changeset 8328:3bf6ad421347 2.5.0b1

chore: update files for release 2.5.0b1.
author John Rouillard <rouilj@ieee.org>
date Wed, 11 Jun 2025 17:04:51 -0400
parents 8654957a6fd4
children e1e7d9a72410
files COPYING.txt doc/acknowledgements.txt doc/announcement.txt locale/de.po locale/en.po locale/es.po locale/fr.po locale/hu.po locale/it.po locale/ja.po locale/lt.po locale/nb.po locale/roundup.pot locale/ru.po locale/zh_CN.po locale/zh_TW.po roundup/__init__.py scripts/Docker/Dockerfile setup.py
diffstat 19 files changed, 5174 insertions(+), 5154 deletions(-) [+]
line wrap: on
line diff
--- a/COPYING.txt	Wed Jun 11 16:19:00 2025 -0400
+++ b/COPYING.txt	Wed Jun 11 17:04:51 2025 -0400
@@ -5,7 +5,7 @@
 Roundup Licensing
 -----------------
 
-| Copyright (c) 2009-2024 Roundup-Team (https://opensource.org/license/mit)
+| Copyright (c) 2009-2025 Roundup-Team (https://opensource.org/license/mit)
 | Copyright (c) 2003-2009 Richard Jones  (richard@mechanicalcat.net)
 | Copyright (c) 2002 eKit.com Inc
 | Copyright (c) 2001 Bizar Software Pty Ltd
--- a/doc/acknowledgements.txt	Wed Jun 11 16:19:00 2025 -0400
+++ b/doc/acknowledgements.txt	Wed Jun 11 17:04:51 2025 -0400
@@ -16,6 +16,36 @@
 
 .. _`Announcement with changelog for current release.`: announcement.html
 
+2.5
+---
+
+2.5.0
+~~~~~
+
+Maintainer: John Rouillard
+
+Release Manager: John Rouillard
+
+Developer activity by changesets::
+
+
+  rouilj@ieee.org  222 *****************************************************
+  rsc@runtux.com    27 ******
+
+Other contributers:
+
+Christof Meerwald - reported issue 2551387
+
+Ludwig Reiter - reported issue 2551074
+
+Marcus Priesch - patch for issue 2551287
+
+Paul Schwabauer - updates to gpg python module so it still works for Roundup.
+
+Randy - reported issue 2551396
+
+Tobias Herp - patch for issue 1895197
+
 2.4
 ---
 
--- a/doc/announcement.txt	Wed Jun 11 16:19:00 2025 -0400
+++ b/doc/announcement.txt	Wed Jun 11 17:04:51 2025 -0400
@@ -1,15 +1,13 @@
-I'm proud to release version 2.4.0 of the Roundup issue
+I'm proud to release version 2.5.0b1 of the Roundup issue
 tracker.  This release is a bugfix and feature release, so
 make sure to read `docs/upgrading.txt
 <https://www.roundup-tracker.org/docs/upgrading.html>`_ to
 bring your tracker up to date.
 
-The 79 changes, as usual, include some new features and many
+The 41 changes, as usual, include some new features and many
 bug fixes.
 
-Version 2.4.0 will be the last release to support Python
-2. The next minor release, planned for mid 2025, will occur
-5 years after Roundup started supporting Python 3.
+Version 2.5.0b1 does not support Python 2.
 
 Note that you should run ``roundup-admin ... migrate`` to
 update the database schema version. Do this before you use
@@ -26,73 +24,54 @@
 
 then unpack and test/install from the tarball.
 
-Among the notable improvements in 2.4.0 from the 2.3.0
+Among the notable improvements in 2.5.0 from the 2.4.0
 release are:
 
-* three CVE's have been fixed. One requires changes to your
-  tracker's home directory. The other two are fixed by
-  installing 2.4.0.  See
-  https://www.roundup-tracker.org/docs/security.html for
-  details and instructions on how to fix these in 2.4.0 and
-  earlier releases.
+* detect more errors in RPN search expressions. Return more
+  useful error messages. Documented (advanced) RPN search expressions
+  in the user guide.
 
-* new classhelper component thanks to a team of students
-  from CS682 at U-Mass Boston. This fixes many issues with
-  the old classhelper. It is implemented as a web-component
-  and needs REST interface access. It will fall back to the
-  classic classhelper if REST is not available or if the
-  browser does not support web-components.
+* change default password hash method to PBKDF2 with SHA512. You
+  may need to reset password_pbkdf2_default_rounds to a lower
+  value. See upgrading doc.
 
-* fix Windows Python installation using pip. It used to go
-  into an infinite loop during install or download. Also fix
-  installation of shared files (templates) so roundup-admin
-  can find them.
+* add filter function to Permission objects. This pushes some
+  permission checks down to the SQL database and speeds up display of
+  index pages.
+
+* fix crash bug on windows with Python 3.13
 
-* using ``@current_user`` as a value in a search URL for a
-  user property will use the current logged in user. Now you
-  can share searches like: "My issues" as "my" will become
-  the current logged in user.
+* update doc on required REST headers. Also other docs updates.
 
-* login failures to the REST/XML-RPC interfaces are now rate
-  limited to limit password guessing attacks.
+* detect error condition early when we can't respond with requested
+  REST format response (e.g. xml is requested).
 
-* utf8mb4 is the default charset for MySQL. This requires
-  migrating your database using the mysql client. You can
-  choose to keep the older character set in config.ini.
+* do not generate an error if a PUT REST request sets the user's
+  address to the current value.
 
-* PostgreSQL services defined in pg_service.conf can be
-  used.  PostgreSQL schemas are supported to eliminate the
-  need for the roundup user to have database
-  creation/deletion privileges.
-
-* fix out of memory issue when importing larger trackers
-  into PostgreSQL.
+* make ``roundup-gettext`` extract translatable strings from detectors
+  and extensions.
 
-* multiple roundup-admin improvements: display protected
-  properties (like creation date), better formatting of
-  output, command history. Also on windows, pyreadline3 is
-  supported to provide an editable interactive command line.
+* improve security of session cookies by marking them with the magic
+  ``__Secure__`` prefix.
 
-* an experimental wsgi performance improvement in 2.3.0 is
-  now now the default and is opt-out.
+* make the rest endpoint return raw message or file content data. Use
+  the ``binary_content`` endpoint and a suitable ``Accept``` header in
+  the request.
 
-* new template functions: utils.readfile and
-  utils.expandfile. Javascript that is included in the
-  Python core will be moved to external files and be able to
-  have values from Roundup substituted in the Javascript.
+* add support for the ``defusedxml`` Python module to improve security when
+  using XML.
 
-* allow content-type of a template to be set from inside the
-  template.  This allows returning json or xml from a
-  template without a .json or .xml extention.
+* add templating function: ``utils.set_http_response(integer)`` to set
+  HTTP return code from your template.
 
-* fix import/export on windows to use Unix style line
-  endings fixing export/import on Windows and making exports
-  portable across platforms.
+* add generation of native HTML date and number/integer inputs. See
+  Upgrading for caveats this is disabled by default.
 
-* various other Windows platform fixes including test suite
-  fixes.
+* re-enable support for GPG/PGP signed emails. Requires installing
+  from the test PyPi repository.
 
-* sqlite version 1 and StructuredText support removed.
+* remove XHTML support simplifying the code base
 
 The file CHANGES.txt has a detailed list of feature
 additions and bug fixes for each release. The most recent
@@ -182,270 +161,146 @@
 Recent Changes
 ==============
 
-From 2.3.0 to 2.4.0
+From 2.4.0 to 2.5.0
 
 Fixed:
 
-- CVE-2024-39124 - The classhelpers (_generic.help.html) are
-  vulnerable to an XSS attack. A specially crafted URL that used
-  that endpoint would result in running a script embedded in the
-  URL. (Found/reported by Alec Romano (4rdr), fix/tests John
-  Rouillard)
-- CVE-2024-39125 - If the Referer header is set to a script tag,
-  it will be executed when the error in the Referer header is
-  reported. (Found/reported by Alec Romano (4rdr), fix/tests John
-  Rouillard)
-- CVE-2024-39126 - PDF, XML and SVG files attached to an issue can contain
-  embedded JavaScript. This JavaScript was executed when the file was
-  accessed. PDF files are now downloaded and not displayed in the
-  browser. A content security policy is added for all download files
-  which prevents code execution in SVG files.  (Found/reported by Alec
-  Romano (4rdr), fix/tests John Rouillard)
-- issue2551282 - MySQL utf8mb4 issues and
-  issue2551115 - Use utf8mb4 as a default for MySQL instead of utf8
-  The default database type and collations have been set to:
-  utf8mb4, utf8mb4_unicode_ci and utf8mb4_0900_bin. They are (sadly)
-  configurable from config.ini. Require directions on upgrading the
-  MySQL db have been documented in upgrading.txt.
-- issue2551063 - Rest/Xmlrpc interfaces needs failed login protection.
-  Failed API login rate limiting with expiring lockout added. (John
-  Rouillard)
-- issue2551184 - improve i18n handling. Patch to test to make sure it
-  uses the test tracker's locale files and not other locale
-  files. (Marcus Priesch)
-- issue2551283 - fail if version 2.4.9 of markdown2 is used, it broke
-  [issue1](issue1) style links. Support markdown2 2.4.8 and earlier
-  and 2.4.10 with its new schema filtering method. (John Rouillard)
-- multiple flake8 fixes (John Rouillard)
-- rename loop variable in 'for sendto in sendto:' (John Rouillard)
-- issue2551193 - Fix roundup for removal of cgi and cgitb standard
-  python modules (and FieldStorage/MiniFieldStorage). Replaced imports
-  from cgi to use roundup.anypy.cgi\_ which will load the system cgi
-  unless it is missing. Then it will load roundup.anypy.vendored.cgi
-  and make \*FieldStorage symbols available. Roundup uses its own
-  cgitb.py and not the system cgitb.py. It looks like it's the
-  precursor to the system cgitb.py. (John Rouillard)
-- issue2551278 - datetime.datetime.utcnow deprecation. Replace
-  calls with equivalent that produces timezone aware dates rather than
-  naive dates. (John Rouillard)
-- when using "roundup-admin display" indent the listing only if
-  headers or protected fields are requested. This makes the output
-  look like it did previously to 2.3.0 if the new features aren't
-  used.  Roundup-admin output was never meant to be machine parsed, but
-  don't break it unless required. (John Rouillard)
-- issue2551290 - pip install roundup Hangs on Windows 10
-  The install under windows goes into an infinite loop using pip or
-  source install. (John Rouillard)
-- Document use of pyreadline3 to allow roundup-admin to have CLI editing
-  on windows. (John Rouillard)
-- issue2551293 - remove schema_hook from Tracker instance. Looks like
-  it was an obsolete hook used for testing. Never documented and not
-  accessible from schema.py.
-- Fix roundup-admin security command. Lowercase its optional
-  argument. Roles are indexed by lower case role name. So 'security
-  User' and 'security user' should generate the same output. (John
-  Rouillard from issue on mailing list by Chuck Cunningham)
-- make roundup-server exit more quickly on ^C. This seems to be
-  limited to windows. (John Rouillard)
-- Fix error handling so failure during import of a non-user item
-  doesn't cause a second traceback. (Found by Norbert Schlemmer, fix
-  John Rouillard)
-- Handle out of memory error when importing large trackers in
-  PostgreSQL. (Found by Norbert Schlemmer, extensive testing by
-  Norbert, fix John Rouillard)
-- use unittest.mock rather than mock for
-  test/test_hyperdbvals.py. (found by Ralf Schlatterbeck. Fix John
-  Rouillard)
-- disable proxy with wget in roundup_healthcheck. (Norbert Schlemmer
-  Noschvie on github.com)
-- support dicttoxml2.py for Roundup running on 3.7 and
-  newer. dicttoxml uses a type alias: collection.Iterator that is
-  dropped in Python 3.10. (found by Norbert Schlemmer, fix John
+- issue2551343 - Remove support for PySQLite. It is unmaintained
+  and sqlite3 is used which is the default for a Python
+  distribution.  (John Rouillard)
+- replace use of os.listdir with os.scandir. Performance
+  improvement.  Using with Python 2 requires 'pip install
+  scandir'. (John Rouillard)
+- issue2551131 - Return accept-patch if patch body not accepted
+  (415 code). Accept-Patch returned with acceptable values. (John
   Rouillard)
-- fix duplicate html id 'password' in user.item.html in all templates except
-  jinja2. (John Rouillard)
-- fix unclosed file when saving index in indexer_dbm.py. (John Rouillard)
-- fix task index in devel tracker so it doesn't cause a crash if all
-  fields are selected. (John Rouillard)
-- fix windows install. When using pip share directory is installed in
-  a directory tree under the lib directory. Fix it so that Lib/share
-  is used to install the share tree. The lets Roundup find tracker
-  templates and translation files. (Found by Simon Eigeldinger, fix
-  John Rouillard)
-- fix roundup-demo, interactive mode would nuke an existing tracker.
-  (Found Tonu Mikk, fix John Rouillard)
-- fix detection/reporting when using a SQLite3 library without FTS5
-  support. Install docs updated to state that FTS5 support is required
-  when using SQLite for back end. (Found Tonu Mikk, fix John
+- issue2551074 - In "responsive" template: click on hide comment leads
+  to a red error msg. (Report by Ludwig Reiter; fix John Rouillard)
+- issue2550698 - added documentation on filtering using RPN property
+  expressions. (John Rouillard)
+- issue2551372 - Better document necessary headers for REST and fix
+  logging to log missing Origin header (Ralf Schlatterbeck with
+  suggestions on documentation by John Rouillard)
+- issue2551289 - Invalid REST Accept header with post/put performs
+  change before returning 406. Error before making any changes to the
+  db if we can't respond with requested format. (John Rouillard)
+- issue2551356 - Add etag header when If-Modified-Since GET request
+  returns not-modified (304). Breaking change to function signature
+  for client.py-Client::_serve_file(). (John Rouillard)
+- issue2551381 - roundup-server parses URI's with multiple '?"
+  incorrectly. (John Rouillard)
+- issue2551382 - invalid @verbose, @page_* values in rest uri's
+  generate 409 not 400 error. (John Rouillard)
+- fix issues with rest doc and use of PUT on a property item. Response
+  is similar to use of PUT on the item, not a GET on the
+  item. Discovered while fuzz testing. (John Rouillard)
+- issue2551383 - Setting same address via REST PUT command results in
+  an error. Now the userauditor does not trigger an error if a user
+  sets the primary address to the existing value. (John Rouillard)
+- issue2551253 - Modify password PBKDF2 method to use SHA512. The
+  default password hashing algorithm has been upgraded to
+  PBKDF2-SHA512 from PBKDF2-SHA1. The default pbkdf2 rounds in the
+  config file has been changed to 250000. The admin should change it
+  manually if it is at 2 million. PBKDF2-SHA512 (PBKDF2S5) has been
+  available since release 2.3, but it required a manual step to make
+  it the default. (John Rouillard)
+- fixed a crash with roundup-admin perftest password when rounds not set
+  on command line. (John Rouillard)
+- issue2551374 - Add error handling for filter expressions. Filter
+  expression errors are now reported. (John Rouillard)
+- issue2551384: Modify flow in client.py's REST handler to verify
+  authorization earlier. The validation order for REST requests
+  has been changed. Checking user authorization to use the REST
+  interface is done before validating the Origin header. As a
+  result, incorrectly formatted CORS preflight requests
+  (e.g. missing Origin header) can now return HTTP status 403 as
+  well as status 400. (John Rouillard)
+- issue2551387 - TypeError: not indexable. Fix crash due to
+  uninitialized list element on a (Mini)FieldStorage when unexpected
+  input is posted via wsgi. (Reported and debugged by Christof
+  Meerwald; fix John Rouillard)
+- close http socket and send a 408 status when a timeout exception
+  is handed in roundup-server. This prevents another exception
+  caused by using a timed out socket. (John Rouillard)
+- issue2551391, partial fix for issue1513369. input fields were
+  not getting id's assigned. Fixed automatic id assignment to
+  input fields. Thinko in the code. (John Rouillard)
+- issue1895197 - translated help texts in admin.py not displayed
+  correctly. (Initial patch tobias-herp, John Rouillard)
+- issue2551238 - roundup-server should exit with error if -d
+  <pidfile> is used without -l <logfile>. Added code to report
+  the issue. Added issue with relative paths for log file whn
+  using -L and -d with roundup-server. (John Rouillard)
+- Allow the specification of a "form" parameter for Date fields to make
+  the popup calendar work when the enclosing form has a name different
+  from "itemSynopsis". (Ralf Schlatterbeck)
+- issue2551376: Fix tracebacks in item templates (Ralf Schlatterbeck)
+- issue2551396: Use of os.path.stat.ST_MTIME in python 3.13 crashes
+  roundup on windows. Replaced with equivalent stat.ST_MTIME. (Randy
+  on IRC, fix: John Rouillard and R. David Murray (bitdancer))
+- issue2551323: remove functions used for XHTML template
+  support. XHTML was deprecated in Roundup 2.3.0 and an invalid value
+  in 2.4.0. (John Rouillard)
+- issue2551406: 'Templating Error: too many values to unpack' crash
+  fixed. (reported by and patch Christof Meerwald, commit/test John
   Rouillard)
-- issue2551320: user.help-search.html doesn't respect
-  properties. Setting url parameter properties when using the
-  classhelp for users now shows the requested properties. (Found by
-  Patel Malav and Nikunj Thakkar of the UMass-Boston CS682 Spring
-  2024 class; fix John Rouillard)
-- use ast.eval_literal() rather than eval() to turn CSV exported
-  string values into Python object/values.
-- use template's guess at Content-Type in headers only if Content-Type
-  is not already set. This allows a template to set its own content
-  type. For example: _generic.translate can set content type (via
-  request.client.additional_headers) to application/json and return
-  json from the template. This json could access the 1i18n functions
-  for a javascript helper. (John Rouillard)
-- when template processing raises an exception the line number is
-  sometimes missing. This causes cgitb to raise a second exception
-  which clobbers the info about the template issue. As a stop-gap set
-  the line number to -1 so the original traceback can be seen. This
-  could be a bug in ZopeTAL. (John Rouillard)
-- issue2551328 - REST results show next link if number of results is a
-  multiple of page size. There should be no next link. (Found by Patel
-  Malav and Bharath Kanama of the UMass-Boston CS682 Spring 2024
-  class; fix John Rouillard)
-- issue2551264 - REST X-Total-Count header and @total_size count
-  incorrect when paginated - correct values are now returned.
-  (John Rouillard)
-- issue2551331 - Fix repeat first/last methods. (John Rouillard)
-- Fix import/export on windows. Use unix line terminating characters.
-  (John Rouillard)
-- Fix anydbm session/otks clear() method on windows when backed by
-  dumbdbm. Also make anydbm detect the initialized database when
-  using dumbdbm. (John Rouillard)
-- Use of '-' directory in static_files config option under windows
-  Python fixed. (John Rouillard)
-- issue2551334 - number of test bugs that prevented test suite from
-  running under Windows Python are fixed. WIP. (John Rouillard)
-- issue2551302 - Remove support for sqlite version 1 from
-  back_sqlite.py. We have been using sqlite3 for over a decade. (John
-  Rouillard)
-- issue2551285 - Remove StructuredText support. reStructuredText is
-  still supported. (John Rouillard)
-- Use roundup-demo -p option to set listening port. Was ignored
-  before. (John Rouillard)
-- issue2551346 - Classic tracker's statusauditor raises error if
-  detectors/config.ini missing
-  STATUSAUDITOR_CHATTING_REQUIRES_TWO_USERS.  The statusauditor.py for
-  jinja2 and classic templates has been changed to assume that this
-  option is off when the setting is missing from
-  detectors/config.ini. Other templates do not implement this option.
-  (John Rouillard)
-- issue2551350 - Python changes for 3.12 with roundup 2.3.0. Fixes for
-  cgitb.py crash due to pydoc.html.header() signature change. (Patch
-  by Andrew (kragacles), applied John Rouillard)
-- issue2551350 - Python changes for 3.12 with roundup 2.3.0. Fixes for
-  mailer.py crash due to change in starttls signature change. (Patch
-  by Andrew (kragacles), modified and applied John Rouillard)
-- make classhelper link open in a new window by setting
-  target="_blank". This prevents overwriting of current page with the
-  classhelper if javascript is disabled. (John Rouillard)
-- issue2551341 - if @columns missing from an index url, the
-  group headers colspan property = 0. Add "or 100" in
-  stanza's so headers span all rows (up to 100).
-- fix roundup-server response requiring a 301 redirect. Did
-  not set content length leading to hang/error. (John
-  Rouillard)
-- report basename of filename when template file is invalid
-  rather than reporting a TypeError. (John Rouillard)
-- Make Last-Modified header use GMT not -0000 timezone. Fix error
-  reported by redbot testing. (John Rouillard)
-- Send Vary: Accept-Encoding on any file that could be compressed
-  even if the file is not encoded/compressed. Found by Redbot
-  testing. (John Rouillard)
-- make If-None-Match work for static file (@@file) case. Found by
-  Redbot testing (John Rouillard)
-- Send vary: accept-encoding for if-modified-since conditional
-  requests where the file is not modified. (John Rouillard)
-- Update JWT example in rest.py to use replacement for
-  datetime.datetime.utcnow(). (John Rouillard)
-- issue2551219 - document requirements of PEM file when using
-  roundup-server in SSL/TLS mode. Report better error messages
-  when PEM file is missing certificate or private key. (John
-  Rouillard)
-- Cleanup tracker index generation by roundup-server. Send
-  correct Content-Length headers so HTTP/1.1 connections don't
-  hang. (John Rouillard)
-- Fix delay when using csv export actions. The CSV file is written
-  incrementally, so we can't determine the Content-Length. When using
-  HTTP/1.1, this causes a delay while the browser waits for a timeout.
-  Forcing the connection to close after the CSV file is written
-  removes the delay. (John Rouillard)
+- fix potential HTTP Response Splitting issue in
+  roundup-server. Discovered by CodeQL in CI. (John Rouillard)
 
 Features:
 
-- issue2551323 - Remove XHTML support. Disabled option to set
-  html_version to xhtml. Running roundup commands with html_version
-  set to xhtml will result in an "Invalid value for HTML_VERSION:
-  'xhtml'" error. (John Rouillard)
-- issue2551103 - add pragma 'display_protected' to roundup-admin. If
-  true, print protected attributes like id, activity, actor...
-  when using display or specification subcommands. (John Rouillard)
-- add -P pragma=value command line option to roundup-admin. Allows
-  setting pragmas when using non-interactive mode. (John Rouillard)
-- issue685275 - add pragma show_retired to control display of retired
-  items when using list/table. Add pragma display_header to print
-  headers for display command. Header displays designator and
-  retired/active status. (John Rouillard)
-- issue2551299 - support config.ini rdbms option 'service'. Allow use
-  of a PostgreSQL connection service file (pg_service.conf) for
-  configuring database on a per-tracker basis. Also replaces use of
-  PGSERVICE env variable for single instance trackers. (From ML
-  question by ivanov. John Rouillard)
-- issue2550852 - support for specifying a PostgreSQL schema to use for
-  the Roundup database. (Patch by Stuart McGraw; slight modifications,
-  tests, docs: John Rouillard).
-- issue2551274: add configurable logging for REST API when something
-  fails, we now log status code and error message.
-  (Ralf Schlatterbeck)
-- issue2551317 - add some Jinja2 examples to customizing.txt
-  document. (John Rouillard)
-- multiple scripts/... updates - Python3, linting, enhancements:
-  weekly-report,schema-dump.py, roundup-reminder, copy-user.py,
-  dump_dbm_sessions_db.py, contributors.py (John Rouillard)
-- roundup/msgfile.py can now be called as 'python msgfmt.py de.po de.mo'
-  or 'python msgfmt.py -o de.mo de.po' to compile a translation file if
-  GNU msgfmt is missing. (John Rouillard)
-- save roundup-admin history between sessions. Load
-  ~/.roundup_admin_rlrc file to set history-size persistently. Add
-  pragma history_length to override for a session. (John Rouillard)
-- the roundup-admin history command now dumps the journal entries
-  in a more human readable format. Use the raw option to get the older
-  machine parsible output. (John Rouillard)
-- Multiple JWT secrets are supported to allow key rotation. See
-  an updated config.ini for details. (John Rouillard)
-- issue2551212 - wsgi performance improvement feature added in 2.2.0
-  is active by default. Can be turned off if needed. See upgrading.txt
-  for info. (John Rouillard)
-- issue2551270 - Better templating support for JavaScript. Add
-  utils.readfile(file, optional=False) and utils.expandfile(file,
-  token_dict=None, optional=False). Allows reading an external file
-  (e.g. JavaScript) and inserting it using tal:contents or equivalent
-  jinja function. expandfile allows setting a dictionary and tokens in
-  the file of the form "%(token_name)s" will be replaced in the file
-  with the values from the dict. (John Rouillard)
-- add @group to rest interface collection queries. Useful when using
-  optgroup in select elements. (John Rouillard)
-- roundup-demo can set the hostname in the URL using the -H
-  parameter. So you can start a demo tracker that is available from
-  your network using 'roundup-demo ... -B hostname -H hostname'. (John
+- issue2551287 - Enhance roundup_gettext.py to extract strings from
+  detectors/extensions. If the polib module is available,
+  roundup-gettext will extract translatable strings from the tracker's
+  Python code. If polib is missing, it will print a warning. (Patch
+  Marcus Priesch, cleanup to remove python 2 issues, John Rouillard.)
+- issue2551315 - Document use of
+  RestfulInstance.max_response_row_size to limit data returned
+  from rest request. (John Rouillard)
+- issue2551330 - Add an optional 'filter' function to the Permission
+  objects and the addPermission method. This is used to optimize search
+  performance by not checking items returned from a database query
+  one-by-one (using the check function) but instead offload the
+  permission checks to the database. For SQL backends this performs the
+  filtering in the database.  (Ralf Schlatterbeck)
+- issue2551370 - mark roundup session cookie with __Secure-
+  prefix. (John Rouillard)
+- add -P flag to roundup-server to log client address from
+  X-Forwarded-For reverse proxy header rather than connecting
+  address. This logs the actual client address when
+  roundup-server is run behind a reverse proxy. It also appends a
+  + sign to the logged address/name. (John Rouillard)
+- issue2551068 - Provide way to retrieve file/msg data via rest
+  endpoint. Raw file/msg data can be retrieved using the
+  /binary_content attribute and an Accept header to select the mime
+  type for the data (e.g. image/png for a png file). The existing html
+  interface method still works and is supported, but is legacy. (John
+  Rouillard) 
+- added fuzz testing for some code. Found issue2551382 and
+  others. (John Rouillard)
+- issue2551116 - Replace xmlrpclib (xmlrpc.client) with defusedxml.
+  Added support for defusedxml to better secure the xmlrpc
+  endpoint. (John Rouillard)
+- Added new instance.registerUtilMethod() method to make using complex
+  templating easier as it provides a default Client instance to the
+  templating method. (John Rouillard)
+- Added new templating utils.set_http_response(integer) method to
+  allow reporting an error to the user from a template. (John
   Rouillard)
-- issue2551347 - make _generic.help.html work without property
-  settings. THis applies to classic or minimal trackers. It allows use
-  of classhelp without the property seting for informtion only
-  (e.g. description of what a priority or status means) without being
-  able to select the property in the classhelper.  Good for adding help
-  for Link properties. (John Rouilllard)
-- issue1525113 - notation to filter by logged-in user. Use
-  @current_user with properties that are a Link to the 'user' class to
-  match the currently logged in user. Allows sharing of queries like
-  "Issues I created" or "Issues I am assigned to" by removing the
-  hard coded user id number and replacing it with the current user's
-  id. Tracker templates updated to use it. (John Rouillard from a
-  patch by Jon C. Thomason)
-- Add a /rest/data/user/roles REST endpoint. (John Rouillard)
-- issue2551353 - Add roundup-classhelper for 2.4.0
-  release. Integrate new classhelper web component to wrap
-  existing classhelper link. This fixes a number of
-  outstanding bugs against the current classhelper using
-  current web features. (Patel Malav, Nikunj Thakkar,
-  Bharath Kanama with integration by John Rouillard)
-- disable spellcheck on all password fields to try to prevent
-  browser from exposing passwords to external servers. (John
-  Rouillard)
+- issue2551390 - Replace text input/calendar popup with native
+  date input. Also add double-click and exit keyboard handlers to
+  allow copy/paste/editing the text version of the date. Configurable
+  via the use_browser_date_input setting in the [web] section of
+  config.ini. By default browser native dates are turned off.
+  (John Rouillard, Ralf Schlatterbeck)
+- Use native number type input for Number() and Integer()
+  properties. Integer() uses step=1 as well. Configurable via the
+  use_browser_number_input setting in the [web] section of config.ini.
+  Set off by default. See
+  https://issues.roundup-tracker.org/issue2551398 for discussion of
+  issues with native number inputs.  (John Rouillard, Ralf
+  Schlatterbeck)
+- issue2551231 - template.py-HTMLClass::classhelp doesn't merge
+  user defined classes. It now merges them in. (John Rouillard)
+- re-enable support for GPG/PGP encrypted emails using new python gpg
+  package on the test pypi instance. (Paul Schwabauer)
--- a/locale/de.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/de.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "Die Klasse \"%(classname)s\" existiert nicht"
 
 # ../roundup/admin.py:93 :97
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "Der Parameter \"%(arg)s\" entspricht nicht dem Format Eigenschaft=Wert"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -106,7 +106,7 @@
 "Problem: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Befehle:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -299,25 +299,25 @@
 "\n"
 "Befehlshilfe:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:336 :382
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Vorlagen:"
 
 # ../roundup/admin.py:339 :393
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Datenbanken:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -342,7 +342,7 @@
 "        geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -362,42 +362,42 @@
 
 # ../roundup/admin.py:358 :483 :562 :612 :682 :703 :731 :802 :869 :940 :988
 # :1010 :1037 :1098 :1156
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "Zu wenig Parameter übergeben"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Passwort):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Wiederholen):"
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Bitte erneut versuchen..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "Sie müssen einen Wert für \"%(propname)s\" angeben."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -417,13 +417,13 @@
 "        gewählten Eintrags an.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, 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:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -456,7 +456,7 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -491,7 +491,7 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -513,20 +513,20 @@
 "        "
 
 # ../roundup/admin.py:631 :669 :822 :834 :888
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "Die Klasse \"%(classname)s\" hat keine Eigenschaft \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -544,7 +544,7 @@
 "        als ID oder als Bezeichner (\"msg23\") spezifiziert werden.\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -556,7 +556,7 @@
 "        Standardwerten in die Datei <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -564,20 +564,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -598,7 +598,7 @@
 "        "
 
 # ../roundup/admin.py:516 :531
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -606,21 +606,21 @@
 "hier nicht ausgewertet."
 
 # ../roundup/admin.py:539 :951 :1000 :1022
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, 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:945
+#: ../roundup/admin.py:956
 #, 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:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -640,12 +640,12 @@
 "        all       -- sämtlichen Hilfetext anzeigen\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Zum Thema \"%(topic)s\" existiert leider kein Hilfetext"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -668,27 +668,27 @@
 "        kann zudem wiederverwendet werden.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "verbergen"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "Eigenschaft \"%(propname)s\" bei \"%(class)s %(item_id)s\" bearbeitet"
@@ -696,29 +696,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(prop)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -764,7 +764,7 @@
 "        verbergen).\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -774,7 +774,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -792,23 +792,23 @@
 "        Die Funktion dbinit.init() wird aufgerufen\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Administratorpasswort: "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "  Wiederholen: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "Tracker-Verzeichnis existiert nicht"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "Tracker-Instanz wurde nicht installiert"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -818,7 +818,7 @@
 "Eine erneute Initialisierung löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -871,12 +871,12 @@
 "        Siehe auch unter dem Hilfethema \"initopts\".\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Das angegebene Tracker-Verzeichnis \"%(parent)s\" existiert nicht"
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -887,22 +887,22 @@
 "installiert zu sein! Eine erneute Installation löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Vorlagensatz auswählen [classic]:"
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Datenbank auswählen [anydbm]"
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Fehler in der Konfiguration: \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -914,11 +914,11 @@
 " Sie sollten nun die Konfigurationsdatei des Trackers bearbeiten:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... passen sie zumindest folgende Optionen an:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -944,7 +944,7 @@
 " Anschließend MÜSSEN Sie \"roundup-admin initialise\" ausführen.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -975,17 +975,17 @@
 "aufgelistet.\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "Sie haben zuviele Argumente übergeben"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 #, fuzzy
 msgid ""
 "Usage: migrate\n"
@@ -1028,17 +1028,17 @@
 "        es nicht nötig ist; also gewöhnen Sie es sich einfach an.\n"
 "        "
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "Keine Migration notwendig"
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1076,11 +1076,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Ungültiges Format"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1098,25 +1098,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1145,49 +1145,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Benutzername unbekannt"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1211,17 +1211,17 @@
 "        normalerweise automatisch.\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "Der Eintrag \"%(designator)s\" existiert nicht"
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "Der Eintrag \"%(class)s%(id)s\" existiert nicht"
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1240,7 +1240,7 @@
 "        für die Benutzer wieder sichtbar.\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1262,7 +1262,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1281,7 +1281,7 @@
 "        verworfen.\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1294,48 +1294,48 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Die Rolle \"%(role)s\" existiert nicht "
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, 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:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolle \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr "%(description)s (%(name)s einzig für \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1343,17 +1343,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, 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:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1390,7 +1390,7 @@
 "(\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1404,17 +1404,17 @@
 "        Zeigt sämtliche Eigenschaften der Klasse auf.\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (Schlüsseleigenschaft)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1477,17 +1477,17 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" entspricht nicht dem Format Eigenschaft:Breite"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1497,7 +1497,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1513,34 +1513,34 @@
 "        "
 
 # ../roundup/cgi/actions.py:546 :556
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Fehler: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, 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:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Zur Abkürzung \"%(command)s\" passen mehrere Befehle: %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Tracker-Verzeichnis: "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, 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:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1549,30 +1549,30 @@
 "Roundup %s ist bereit.\n"
 "Schreiben Sie \"help\", um zur Hilfe zu gelangen."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "Bemerkung: Befehlsverlauf/-bearbeitung möglicherweise nicht verfügbar"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "beenden..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Es gibt noch ungespeicherte Änderungen. Änderungen speichern (y/N)?"
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr "Konnte den Datenbanktyp nicht ermitteln"
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, fuzzy, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
@@ -1581,7 +1581,7 @@
 "Konnte die Datenbank nicht öffnen - das erforderliche Modul '%s' ist nicht "
 "verfügbar"
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
@@ -1590,21 +1590,21 @@
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr "Datenbank nur zum Lesen geöffnet"
 
@@ -1630,45 +1630,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "erstellt"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "Link gelöscht"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "verlinkt"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "geändert"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "verborgen"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "wiederhergestellt"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "Eigenschaft %s: %r ist keine Zahl"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1753,10 +1758,10 @@
 msgstr "\"%(input)s\" ist keine ID (%(classname)s ID wird erwartet)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr "Ungültige Anforderung"
 
@@ -1810,8 +1815,8 @@
 msgid "Invalid integer: "
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr ""
@@ -1822,8 +1827,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Nicht genügend Werte in Zeile %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr ""
@@ -1833,17 +1838,17 @@
 msgid "Items edited OK"
 msgstr "Die Einträge wurden aktualisiert"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "Eigenschaft \"%(properties)s\" bei \"%(class)s %(id)s\" bearbeitet"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "Der Eintrag \"%(class)s%(id)s\" wurde erstellt"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1853,12 +1858,12 @@
 "<a target=\"_new\" href=\"%(klass)s%(id)s\">dessen Änderungen</a> in einem "
 "neuen Fenster."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Fehler bei der Bearbeitung: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1868,12 +1873,12 @@
 "(Ein Fehler in Mozilla kann diese Meldung hervorrufen, bitte prüfen Sie Ihr "
 "E-Mail-Konto)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Passwort zurücksetzen"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1882,29 +1887,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "Ihr Passwort wurde zurückgesetzt und per E-Mail an %s versandt"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Benutzername unbekannt"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "E-Mail-Adresse unbekannt"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Sie müssen einen Benutzernamen oder eine E-Mail-Adresse angeben"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Passwort bestätigen"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1918,31 +1923,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "Eine E-Mail wurde an %s versandt"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Sie sind nun registriert. Willkommen!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1958,12 +1963,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1973,44 +1978,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Bei der Registrierung dürfen keine Rollen angegeben werden"
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Sie wurden vom System abgemeldet"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "Benutzername notwendig"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Sie sind nicht berechtigt, sich anzumelden"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Sie sind nicht berechtigt, Einträge der Klasse \"%(class)s\" zu lesen"
@@ -2143,8 +2148,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Zeichensatz nicht erkannt: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2222,50 +2227,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Sie sind nicht berechtigt, diese Seite anzuzeigen."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, 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:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2274,7 +2280,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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2347,65 +2353,65 @@
 "Sie sind nicht berechtigt, die Aktion  \"%(action)s\" auf Einträge der "
 "Klasse \"%(class)s\" anzuwenden"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(Liste)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "Eintrag speichern"
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[verborgen]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Neuer Eintrag - Noch kein Verlauf"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Speichern"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Die gewählte Eigenschaft existiert nicht mehr</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Die verlinkte Klasse \"%(classname)s\" existiert nicht mehr"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:905 :926
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Der verknüpfte Eintrag existiert nicht mehr</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (kein Wert)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2414,46 +2420,46 @@
 "<strong><em>Dieses Ereignis kann nicht im Verlauf angezeigt werden!</em></"
 "strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 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:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Verlauf"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Datum</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Benutzer</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Aktion</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Argumente</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Kopie von %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "Nein"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Ja"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2461,29 +2467,29 @@
 "Der voreingestellte Wert einer DateHTML-Eigenschaft muss entweder ein\n"
 "DateHTML-Objekt sein oder ein Datum repräsentieren."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nichts ausgewählt -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2656,54 +2662,54 @@
 msgid "in %s"
 msgstr "in %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Eigenschaft %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr "Eigenschaft %s: %r ist kein gültiges Datum (%s)"
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, fuzzy, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr "Eigenschaft %s: %r ist kein gültiges Datumsintervall (%s)"
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "Eigenschaft %s: %r ist keine Zahl"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "Eigenschaft %s: %r ist keine Zahl"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr "\"%s\" ist kein gültiger Bezeichner"
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr "Keine Eigenschaft: %s"
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "Der Wert \"%(value)s\" ist nicht in der Liste für \"%(property)s\""
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr "Sie können für die Eigenschaft %s  nur IDs eingeben"
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, fuzzy, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr "%r ist keine Eigenschaft von %s"
@@ -3046,60 +3052,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Ungültiger Benutzername %s"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3219,34 +3225,34 @@
 msgid "creator"
 msgstr "Ersteller"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Neue Nachricht von %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s merkte an:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Änderung von %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 "Die Datei '%(filename)s' ist nicht beigefügt - Sie können Sie unter\n"
 "%(link)s herunterladen."
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3356,63 +3362,63 @@
 "<html><head><title>Roundup Tracker-Liste</title></head>\n"
 "<body><h1>Roundup Tracker-Liste</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(type)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 "WARNUNG: die Option \"-g\" wird ignoriert, da Sie nicht Administrator sind"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Die Gruppe kann nicht gewechselt werden - das Modul grp fehlt"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Die Gruppe %(group)s existiert nicht"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr ""
 "Dieser Prozess kann nicht unter dem Administrator-Konto (\"root\") laufen!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 "WARNUNG: die Option \"-u\" wird ignoriert, da Sie nicht Administrator sind"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "Der Benutzer kann nicht gewechselt werden - das Modul pwd fehlt"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "Der Benutzer %(user)s existiert nicht"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "Der Multiprozessmodus \"%s\" ist nicht verfügbar, Einprozessmodus aktiviert"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Start des Servers auf Port %s schlug fehl. Port bereits verwendet."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 "Start des Servers auf Port %(port)s schlug fehl. Port bereits verwendet."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3428,7 +3434,7 @@
 "               Zudem müssen Sie die Logfile-Option aktivieren.\n"
 "               \"roundup-server -c help\" zeigt eine weitere Hilfe zum Thema."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3444,7 +3450,7 @@
 "               die Prozess-ID in die Datei PIDDatei.\n"
 "               Die Option -l muss dann auch angegeben werden."
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3570,21 +3576,25 @@
 "   URLs Probleme bereiten könnten. Am besten verwenden Sie nur Buchstaben, \n"
 "   Zahlen und \"-_\".\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "Instanzen müssen als Tracker-Name=Tracker-Verzeichnis angegeben werden"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Konfiguration in der Datei %s gespeichert"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Auf diesem Betriebssystem kann der Server nicht als Hintergrundprozess laufen"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Der Roundup-Server wurde unter %(HOST)s:%(PORT)s gestartet"
@@ -4867,46 +4877,46 @@
 msgid "clear this message"
 msgstr "diese Nachricht löschen"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "egal"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "kein Wert"
 
--- a/locale/en.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/en.po	Wed Jun 11 17:04:51 2025 -0400
@@ -9,9 +9,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 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:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -242,7 +242,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -254,42 +254,42 @@
 "        "
 msgstr ""
 
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 msgid ""
 "Usage: display designator[,designator]*\n"
 "        Show the property values for the given node(s).\n"
@@ -302,13 +302,13 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database and file content.\n"
@@ -327,7 +327,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export only the database to files, no file content.\n"
@@ -347,7 +347,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -360,19 +360,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -383,14 +383,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -398,20 +398,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -424,23 +424,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -452,12 +452,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -472,26 +472,26 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr ""
@@ -499,29 +499,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database and file contents from the directory.\n"
@@ -545,7 +545,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -555,7 +555,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -566,30 +566,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 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:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -615,12 +615,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -628,20 +628,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1426
-msgid "Select backend"
-msgstr ""
-
 #: ../roundup/admin.py:1437
+msgid "Select backend"
+msgstr ""
+
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -650,11 +650,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -671,7 +671,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -687,17 +687,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -720,17 +720,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 msgid ""
 "Usage: pack period | date\n"
 "        Remove journal entries older than the date/period.\n"
@@ -750,11 +750,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -772,25 +772,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -819,49 +819,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr ""
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -878,17 +878,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -900,7 +900,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -914,7 +914,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -926,7 +926,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -939,46 +939,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1939
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1941
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1944
-#, python-format
-msgid "Role \"%(name)s\":\n"
-msgstr ""
-
 #: ../roundup/admin.py:1950
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1952
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1955
+#, python-format
+msgid "Role \"%(name)s\":\n"
+msgstr ""
+
+#: ../roundup/admin.py:1961
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -986,17 +986,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1017,7 +1017,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1026,17 +1026,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1068,17 +1068,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1088,7 +1088,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1098,92 +1098,92 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr ""
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1209,45 +1209,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr ""
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr ""
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1330,10 +1335,10 @@
 msgstr ""
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr ""
 
@@ -1381,8 +1386,8 @@
 msgid "Invalid integer: "
 msgstr ""
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr ""
@@ -1392,8 +1397,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr ""
@@ -1402,41 +1407,41 @@
 msgid "Items edited OK"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
 "target=\"_blank\" href=\"%(klass)s%(id)s\">their changes</a> in a new window."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
 "your email)"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, python-format
 msgid "Password reset for %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1445,29 +1450,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:999
-msgid "Unknown email address"
-msgstr ""
-
 #: ../roundup/cgi/actions.py:1004
+msgid "Unknown email address"
+msgstr ""
+
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, python-format
 msgid "Confirm reset of password for %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1481,31 +1486,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, python-format
 msgid "Email sent to %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1521,12 +1526,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1536,44 +1541,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr ""
@@ -1683,8 +1688,8 @@
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -1762,57 +1767,58 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1875,136 +1881,136 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr ""
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr ""
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2168,54 +2174,54 @@
 msgid "in %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr ""
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr ""
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2469,60 +2475,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, python-format
 msgid "Invalid value for --style: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2642,32 +2648,32 @@
 msgid "creator"
 msgstr ""
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -2766,58 +2772,58 @@
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:895
-#, python-format
-msgid "Unable to bind to port %s, port already in use."
-msgstr ""
-
 #: ../roundup/scripts/roundup_server.py:899
 #, python-format
+msgid "Unable to bind to port %s, port already in use."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:903
+#, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2827,7 +2833,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2837,7 +2843,7 @@
 " -D            run the server in the foreground even when -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, python-format
 msgid ""
 "\n"
@@ -2910,20 +2916,24 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
@@ -4177,46 +4187,46 @@
 msgid "clear this message"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr ""
 
--- a/locale/es.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/es.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :955 :1004 :1026
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "la clase \"%(classname)s\" no existe"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "el argumento \"%(arg)s\" no es de la forma nombrepropiedad=valor"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandos:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -324,25 +324,25 @@
 "\n"
 "Ayuda sobre comandos:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Plantillas:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Motor de almacenamiento"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -388,42 +388,42 @@
 
 # ../roundup/admin.py:360 :442 :503 :582 :632 :688 :709 :737 :808 :875 :946
 # :994 :1016 :1043 :1106 :1173
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "No se provey una cantidad suficiente de argumentos"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Contrasea): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Nuevamente): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Lo lamento, intente nuevamente..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "debe proveer la propiedad \"%(propname)s\"."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -443,13 +443,13 @@
 "especificado.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -481,7 +481,7 @@
 "        directorio de destino especificado (dir_exportacin).\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -514,7 +514,7 @@
 "        directorio de destino especificado.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -539,20 +539,20 @@
 "        "
 
 # ../roundup/admin.py:675 :828 :840 :894
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s no posee la propiedad \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -573,7 +573,7 @@
 "        enlazado o su valor clave.\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -586,7 +586,7 @@
 "        con valores por defecto en el fichero <fichero>.\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -594,20 +594,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -628,7 +628,7 @@
 "        "
 
 # ../roundup/admin.py:536 :551
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -636,18 +636,18 @@
 "no puede usarse."
 
 # ../roundup/admin.py:559 :957 :1006 :1028
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "no existe nodo de clase %(classname)s llamado  \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "no existe propiedad de clase %(classname)s llamado  \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -667,12 +667,12 @@
 "        all       -- toda la ayuda disponible\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Lo siento, no hay ayuda para \"%(topic)s\""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -695,27 +695,27 @@
 "        reusado.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "eliminar"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "Edicin exitosa de %(properties)s de %(class)s %(id)s"
@@ -723,29 +723,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -792,7 +792,7 @@
 "        tediosamente, retirar toda los datos viejos.)\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -802,7 +802,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -821,23 +821,23 @@
 "        Ejecuta la funcin de inicializacin dbinit.init() del tracker\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Contrasea de administracin: "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Confirmar: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "El directorio base de la instancia no existe"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "La instancia no ha sido instalada"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -847,7 +847,7 @@
 "Si la reinicializa, perder toda la informacin!\n"
 "Eliminar la misma? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -903,14 +903,14 @@
 "        Vea tambin initopts help.\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, 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:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -921,22 +921,22 @@
 "Si Ud. lo reinstala, perder toda la informacin relacionada al mismo!\n"
 "Elimino la misma? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Seleccione la plantilla [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Selecccione el motor de almacenamiento [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Error en opciones de configuracin: \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -949,11 +949,11 @@
 " Ud. debe ahora editar el fichero de configuracin del tracker:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... como mnimo, debe configurar las siguientes opciones:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -981,7 +981,7 @@
 " completado los pasos arriba descriptos.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -1011,17 +1011,17 @@
 "clase.\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "Demasiados argumentos"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -1044,17 +1044,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1092,11 +1092,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Formato invlido"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1114,25 +1114,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1161,49 +1161,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Usuario desconocido"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1227,17 +1227,17 @@
 "        Es un comando que por lo general se ejecuta automticamente.\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "no existe un tem llamado \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "no existe un tem llamado \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1256,7 +1256,7 @@
 "        para los usuarios.\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1278,7 +1278,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1300,7 +1300,7 @@
 "        no introducira cambios en la base de datos.\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1313,49 +1313,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "No existe un Rol llamado \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, 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:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rol \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s para \"%(klass)s\" solamente)"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1363,17 +1363,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, 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:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1408,7 +1408,7 @@
 "        asociados como nmeros separados por comas (\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1422,17 +1422,17 @@
 "        Visualiza las propiedades para una cierta clase.\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (propiedad de clave)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1496,17 +1496,17 @@
 "        caracteres.\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" no es de la forma nombre:longitud"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1516,7 +1516,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1533,36 +1533,36 @@
 "        "
 
 # ../roundup/cgi/actions.py:579 :590 :761 :780
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Error: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, 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:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Coinciden mas de un comando \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Ingrese directorio base del tracker: "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Error: No se pudo abrir el tracker: %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1571,58 +1571,58 @@
 "Roundup %s listo para comandos.\n"
 "Tipee \"help\" para ayuda."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "Nota: historia y edicin de comandos no disponible"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "salir..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Hay cambios sin guardar. Debo guardar los mismos (y/N)? "
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1648,45 +1648,52 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "crea"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "desenlaza"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "enlaza"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "asigna"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "retira"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "restaura"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr ""
+"propiedad \"%(propname)s\": \"%(value)s\" no se encuentra en este momento en "
+"la lista"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1770,10 +1777,10 @@
 msgstr "\"%(input)s\" no es un ID (se requieren IDs %(classname)s)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr "Formato invlido"
@@ -1827,8 +1834,8 @@
 msgid "Invalid integer: "
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Ud. no posee los permisos necesarios para crear %(class)s"
@@ -1838,8 +1845,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "No hay valores suficientes en la lnea %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Ud. no posee los permisos necesarios para editar %(class)s"
@@ -1848,17 +1855,17 @@
 msgid "Items edited OK"
 msgstr "Items editados exitosamente"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "Edicin exitosa de %(properties)s de %(class)s %(id)s"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s creado"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1868,12 +1875,12 @@
 "<a target=\"new\" href=\"%(klass)s%(id)s\">cambios</a> que dicha persona ha "
 "realizado en una ventana aparte."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Error de edicin: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1883,12 +1890,12 @@
 "(un bug de Mozilla puede ser el causante de que se visualice este mensaje en "
 "forma errnea, por favor verifique su casilla de e-mail)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Solicitud de generacin de nueva contrasea"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1897,29 +1904,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "Contrasea reinicializada y mensaje de e-mail enviado a %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Usuario desconocido"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Direccin de e-mail desconocida"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Debe especificar un nombre de usuario o direccin de e-mail"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Confirmar contrasea"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1933,31 +1940,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "Se ha enviado un mensaje de e-mail a %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Ud. se ha registrado exitosamente, bienvenido!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1973,12 +1980,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1988,45 +1995,45 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "No est permitido especificar roles en el momento del registro."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Ha salido del sistema exitosamente"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "Se requiere el ingreso de un nombre de usuario"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
 # ../roundup/cgi/actions.py:891 :895
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Ud. no tiene permiso para ingresar al sistema"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Ud. no posee los permisos necesarios para editar %(class)s"
@@ -2158,8 +2165,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Conjunto de caracteres desconocido: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2239,50 +2246,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Ud. no tiene permitido ver este fichero"
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTiempo transcurrido: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2291,7 +2299,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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2366,67 +2374,67 @@
 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:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(lista)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[oculto]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Nuevo nodo - sin historia"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Enviar modificaciones"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La propiedad indicada ya no existe</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La clase relacionada %(classname)s ya no existe"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:903 :924
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>El nodo relacionado ya no existe</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (sin valor)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2435,46 +2443,46 @@
 "<strong><em>Este evento no es soportado por la visualizacin de historia!</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Nota:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Historia"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Fecha</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Usuario</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Accin</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Args</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Copia de %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "No"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Si"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2482,27 +2490,27 @@
 "el valor por defecto para DateHTMLProperty debe ser un DateHTMLProperty o "
 "una cadena que represente una fecha."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- sin seleccin -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2676,60 +2684,60 @@
 msgid "in %s"
 msgstr "en %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Error: %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr ""
 "propiedad \"%(propname)s\": \"%(value)s\" no se encuentra en este momento en "
 "la lista"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr ""
 "propiedad \"%(propname)s\": \"%(value)s\" no se encuentra en este momento en "
 "la lista"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "propiedad \"%(propname)s\": \"%(value)s\" no se encuentra en este momento en "
 "la lista"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -3067,61 +3075,61 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
 # ../roundup/cgi/actions.py:891 :895
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3242,32 +3250,32 @@
 msgid "creator"
 msgstr "creador"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Nuevo aporte de %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s agreg el comentario:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Modificacin de %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr "Fichero '%(filename)s' no anexado - puede descargarlo de %(link)s."
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3378,59 +3386,59 @@
 "<html><head><title>ndice de trackers Roundup</title></head>\n"
 "<body><h1>ndice de trackers Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "ATENCIN: ignorando argumento \"-g\" , Ud. no es root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "No puede cambiar grupos - el mdulo grp no est presente"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "El grupo %(group)s no existe"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "No puede ejecutarse como root!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "ATENCIN: ignorando argumento \"-u\", Ud. no es root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "No puedo cambiar usuarios - no existe el mdulo pwd"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "El usuario %(user)s no existe"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "El modo multiproceso \"%s\" no est disponible, conmutado a proceso simple"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Imposible asociarse al puerto %s, el mismo ya est en uso."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Imposible asociarse al puerto %s, el mismo ya est en uso."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3452,7 +3460,7 @@
 "para\n"
 "               Servicios Web."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3469,7 +3477,7 @@
 "               PID del servidor en el fichero especificado por PIDfile.\n"
 "               La opcin -l *debe* ser especificada si se usa la opcin -d."
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3608,22 +3616,26 @@
 "   caracteres tales como espacios, dado que los mismos confunden a Internet "
 "Explorer.\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "Las Instancias debe ser de la forma nombre=directorio base"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configuracin guardada en %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Lo siento, no puede ejecutar el servidor como un demonio en este Sistema "
 "Operativo"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "servidor Roundup iniciado en %(HOST)s:%(PORT)s"
@@ -4906,46 +4918,46 @@
 msgid "clear this message"
 msgstr "quitar este mensaje"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "cualquier(a)"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "sin valor"
 
--- a/locale/fr.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/fr.po	Wed Jun 11 17:04:51 2025 -0400
@@ -8,9 +8,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 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:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, 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:188
+#: ../roundup/admin.py:189
 #, 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:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -110,7 +110,7 @@
 "Problme: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Commandes:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -323,27 +323,27 @@
 "\n"
 "Aide sur les commandes:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, 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:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 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:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Moteurs de stockage:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -392,42 +392,42 @@
 # :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: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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "Pas suffisamment d'arguments fournis"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (mot de passe): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s ( nouveau): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Dsol, essayez  nouveau..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "vous devez renseigner la proprit %(propname)s."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -447,13 +447,13 @@
 "        des noeuds indiqus.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -483,7 +483,7 @@
 "        format aux valeurs spares par des doubles-points.\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -514,7 +514,7 @@
 "        format aux valeurs spares par des doubles-points.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -538,21 +538,21 @@
 
 # ../roundup/admin.py:699 :852 :864 :918
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s n'a pas de proprit %(propname)s"
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -571,7 +571,7 @@
 "        noeud li, ou sa valeur de cl.\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -583,7 +583,7 @@
 "              (au format ini) avec des valeurs par dfaut dans\n"
 "              <nomfichier>"
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -591,20 +591,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -626,7 +626,7 @@
 
 # ../roundup/admin.py:558 :573
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -635,19 +635,19 @@
 
 # ../roundup/admin.py:581 :981 :1030 :1052
 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, 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:945
+#: ../roundup/admin.py:956
 #, 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:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -667,12 +667,12 @@
 "        all        -- toute l'aide disponible\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Dsol, aucune aide n'est disponible au sujet de %(topic)s"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -695,27 +695,27 @@
 "        valeur de cl peut tre r-utilise.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "supprimer"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s modifi(s) avec succs"
@@ -723,29 +723,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -792,7 +792,7 @@
 "        plus pniblement, abandonnez toutes les anciennes donnes).\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -802,7 +802,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -821,23 +821,23 @@
 "        Excute la fonction d'initialisation dbinit.init() du pisteur.\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Mot de passe administrateur: "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Confirmez: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "Le rpertoire racine de l'instance n'existe pas"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "L'instance n'a pas t installe"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -847,7 +847,7 @@
 "Si vous la rinitialisez, vous perdrez toutes les donnes!\n"
 "Supprimez la base de donnes (Y/N)? "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -902,12 +902,12 @@
 "        Consultez galement l'aide sur initopts.\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, 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:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -919,22 +919,22 @@
 "Si vous le rinstallez, vous perdrez toutes les donnes!\n"
 "Supprimer le pisteur (Y/N)? "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Slection du modle [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Slection du moteur de stockage [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erreur dans les paramtres de la configuration: %s"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -947,11 +947,11 @@
 " Vous devez maintenant modifier le fichier de configuration du pisteur:\n"
 "    %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ou au minimum, vous devez dfinir les options suivantes:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -983,7 +983,7 @@
 " que vous avez ralis les tapes prcdentes.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -1013,17 +1013,17 @@
 "        proprit pour chaque instance de cette classe.\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "Trop d'arguments fournis"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -1046,17 +1046,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1097,11 +1097,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Format non valide"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1119,25 +1119,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1166,49 +1166,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nom d'utilisateur inconnu"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1232,17 +1232,17 @@
 "        Cette opration est normalement effectuer automatiquement.\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "pas d'lment %(designator)s"
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "pas d'lment %(designator)s"
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1262,7 +1262,7 @@
 "        utilisateurs.\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1284,7 +1284,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1307,7 +1307,7 @@
 "        base de donnes.\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1320,48 +1320,48 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Ce rle %(role)s n'existe pas"
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, 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:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rle %(name)s:"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s pour %(klass)s uniquement)"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1369,17 +1369,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, 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:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1414,7 +1414,7 @@
 "        ce lien sont indiqus comme des nombres spars par des\n"
 "        virgules (par ex. 1,2,3)."
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1428,17 +1428,17 @@
 "        Cette commande numre les proprits de la classe nomme.\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (proprit cl)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1500,17 +1500,17 @@
 "        donnera une colonne Name large de 4 caractres.\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "%(spec)s ne correspond pas au format nom:largeur"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1520,7 +1520,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1537,34 +1537,34 @@
 
 # ../roundup/cgi/actions.py:596 :607 :778 :797
 # ../roundup/cgi/actions.py:596:607 :778:797
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Erreur: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, 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:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Plusieurs commandes correspondent  %(command)s: %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Saisissez le rpertoire racine du pisteur: "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Erreur: impossible d'ouvrir le pisteur, %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1573,58 +1573,58 @@
 "Roundup %s est prt pour la saisie.\n"
 "Saisissez help pour l'aide."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "Note: l'historique et l'dition des commandes n'est pas disponible"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "sortie..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Des changements n'ont pas t enregistrs, les valider (y/N)?"
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1650,45 +1650,52 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "crer"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "dtacher"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "attacher"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "assigner"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "retir"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "restaur"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr ""
+"proprit %(propname)s: %(value)s n'est pas actuellement dans la "
+"liste"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1774,10 +1781,10 @@
 "requis)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr "Format non valide"
@@ -1834,8 +1841,8 @@
 msgid "Invalid integer: "
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Vous n'avez pas la permission de crer de %(class)s"
@@ -1845,8 +1852,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Pas suffisament de valeurs sur la ligne %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Vous n'avez pas la permission de modifier %(class)s"
@@ -1855,17 +1862,17 @@
 msgid "Items edited OK"
 msgstr "Les lments ont t modifis avec succs"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s modifi(s) avec succs"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s cr"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1875,12 +1882,12 @@
 "(%(props)s). Consultez <a target=\"new\" href=\"%(klass)s%(id)s\">ses "
 "modifications</a> dans une nouvelle fentre."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Erreur de modification: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1890,12 +1897,12 @@
 "Un bug dans Mozilla peut provoquer une apparition errone de ce message, "
 "vrifiez votre courriel."
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Demande de r&eacute;initialisation de mot de passe"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1904,29 +1911,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "Mot de passe rinitialis et courriel envoy  %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Nom d'utilisateur inconnu"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Adresse lectronique inconnue"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Vous devez indiquer un nom d'utilisateur ou une adresse lectronique"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Confirmation du mot de passe"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1940,31 +1947,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "Courriel envoy  %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Vous tes dsormais inscrit, bienvenue!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1980,12 +1987,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1995,46 +2002,46 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Impossible de renseigner les rles  l'inscription."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Vous tes dconnect"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "Nom d'utilisateur requis"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
 # ../roundup/cgi/actions.py:930:934
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Vous n'avez la permission de vous connecter"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Vous n'avez pas la permission de modifier %(class)s"
@@ -2168,8 +2175,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Jeu de caractres non reconnu: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2252,50 +2259,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Vous n'tes pas autoris  voir ce fichier"
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTemps coul: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2305,7 +2313,7 @@
 "Chargement d'lments: %(get_items)f secondes. Filtrage: %(filtering)f "
 "secondes.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2379,11 +2387,11 @@
 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:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(liste)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "Soumettre un nouvelle entre"
 
@@ -2392,58 +2400,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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[masqu]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Nouveau n~ud - pas d'historique"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Soumettre les changements"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La proprit indique n'existe plus</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La classe lie %(classname)s n'existe plus"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:940 :964
 # ../roundup/cgi/templating.py:940:964
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Le noeud li n'existe plus</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (pas de valeur)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2452,31 +2460,31 @@
 "<strong><em>Cet vnement n'est pas gr par l'affichage de l'historique.</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Historique"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Date</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Utilisateur</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Action</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Arguments</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Copie de %(class)s %(id)s"
@@ -2484,20 +2492,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:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 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:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Oui"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2505,27 +2513,27 @@
 "la valeur par dfaut pour DateHTMLProperty doit tre soit DateHTMLProperty "
 "soit une reprsentation textuelle de la date."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- pas de slection -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2699,60 +2707,60 @@
 msgid "in %s"
 msgstr "dans %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Erreur: %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr ""
 "proprit %(propname)s: %(value)s n'est pas actuellement dans la "
 "liste"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr ""
 "proprit %(propname)s: %(value)s n'est pas actuellement dans la "
 "liste"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "proprit %(propname)s: %(value)s n'est pas actuellement dans la "
 "liste"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -3091,62 +3099,62 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
 # ../roundup/cgi/actions.py:930:934
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3269,32 +3277,32 @@
 msgid "creator"
 msgstr "crateur"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Nouvel envoi de %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s a ajout le commentaire:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, fuzzy, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Nouvel envoi de %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3402,64 +3410,64 @@
 "<html><head><title>Index des pisteurs Roundup</title></head>\n"
 "<body><h1>Index des pisteurs Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 "ATTENTION: le paramtre -g est ignor, vous n'tes pas superutilisateur "
 "(root)"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Impossible de changer les groupes - le module grp n'est pas prsent"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Le groupe %(group)s n'existe pas"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "Impossible d'excuter en tant que superutilisateur (\"root\")"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 "ATTENTION: le paramtre \"-u\" est ignor, vous n'tes pas superutilisateur "
 "(\"root\")"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr ""
 "Impossible de changer les utilisateurs - le module pwd n'est pas prsent"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "L'utilisateur %(user)s n'existe pas"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "Le mode multiprocessus \"%s\" n'existe pas, passage en mode processus unique"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Impossible de s'attacher au port %s, le port est dj utilis"
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Impossible de s'attacher au port %s, le port est dj utilis"
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3478,7 +3486,7 @@
 "               La commande roundup-server -c help donne les\n"
 "               spcificits du service Windows."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3499,7 +3507,7 @@
 "PID\n"
 "               L'option -l option *doit* tre spcifie si -d est utilis."
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3626,22 +3634,26 @@
 "    souhait. Assurez-vous que name ne contienne pas de caractres\n"
 "    inappropris pour une URL, comme les espaces qui perturbe IE.\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "Les instances doivent tre nom=base-du-pisteur"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configuration sauvegarde dans %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Dsol, vous ne pouvez pas dmarrer le serveur en tche de fond avec ce "
 "systme d'exploitation"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Le serveur Roundup est dmarr sur %(HOST)s:%(PORT)s"
@@ -4929,46 +4941,46 @@
 msgid "clear this message"
 msgstr "Supprimer ce message"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "aucune importance"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "pas de valeur"
 
--- a/locale/hu.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/hu.po	Wed Jun 11 17:04:51 2025 -0400
@@ -6,9 +6,9 @@
 # kilo aka Gabor Kmetyko <kg_kilo@freemail.hu>, 2007.
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :981 :1030 :1052
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nincs \"%(classname)s\" osztály"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "A(z) \"%(arg)s\" argumentum nem név=érték alakú"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr "Probléma: %(message)s\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Parancsok:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 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:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:340 :396
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Sablonok:"
 
 # ../roundup/admin.py:343 :407
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Adatbázis hátterek:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -271,7 +271,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -285,42 +285,42 @@
 
 # ../roundup/admin.py:369 :466 :527 :606 :656 :714 :735 :763 :834 :901 :972
 # :1020 :1042 :1069 :1136 :1207
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "Nincs megadva elég argumentum"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Jelszó): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ismét): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Sajnálom, próbálja újra..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "meg kell adni a(z) \"%(propname)s\" tulajdonságot."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -340,13 +340,13 @@
 "        csomópont értékét.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database and file content.\n"
@@ -365,7 +365,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export only the database to files, no file content.\n"
@@ -385,7 +385,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -399,20 +399,20 @@
 msgstr ""
 
 # ../roundup/admin.py:701 :854 :866 :920
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s-nek nincs \"%(propname)s\" tulajdonsága"
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -423,7 +423,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -436,7 +436,7 @@
 "        a <fájlnév> fájlba.\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -444,20 +444,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -478,7 +478,7 @@
 "        "
 
 # ../roundup/admin.py:560 :575
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -486,18 +486,18 @@
 "alkalmazható."
 
 # ../roundup/admin.py:583 :983 :1032 :1054
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont"
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nincs \"%(propname)s\" %(classname)s tulajdonság"
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -517,12 +517,12 @@
 "        all       -- minden elérhető segítség\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Elnézést, \"%(topic)s\" témához nincs súgó"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -544,27 +544,27 @@
 "        csomópont értékét.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "Törlés"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve"
@@ -572,29 +572,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database and file contents from the directory.\n"
@@ -618,7 +618,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -628,7 +628,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -646,23 +646,23 @@
 "        Végrehajtja az adatbázist inicializáló dbinit.init() rutint\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Adminisztrátori jelszó: "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Megerősítés "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "A példány könyvtára nem létezik"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "A példány nem lett installálva"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -672,7 +672,7 @@
 "Újrainicializálás esetén minden adat elvész!\n"
 "Törli? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -698,12 +698,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, 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:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -715,22 +715,22 @@
 "Ha újra installálod, minden adat elveszik!\n"
 "Töröljem? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Sablon választása [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Adatbázis háttér választása [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Hiba a konfigurációs beállításokban: \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -743,11 +743,11 @@
 " Most kell szerkesztened a konfigurációs fájlt:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... legalább a következő opciókat kell beállítani:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -764,7 +764,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -780,17 +780,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "Túl sok argumentum került megadásra"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -813,17 +813,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 msgid ""
 "Usage: pack period | date\n"
 "        Remove journal entries older than the date/period.\n"
@@ -843,11 +843,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Hibás formátum"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -865,25 +865,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -912,49 +912,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Ismeretlen felhasználónév"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -971,17 +971,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nincs ilyen elem: \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "nincs ilyen elem: \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -993,7 +993,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 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:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1019,7 +1019,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1032,47 +1032,47 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nincs ilyen szerepkör: \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, 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:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "\"%(name)s\" szerepkör:"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1080,17 +1080,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 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:2044
+#: ../roundup/admin.py:2055
 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:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (kulcs tulajdonság)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 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:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" nem név:hossz formátumú"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1187,7 +1187,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1204,37 +1204,37 @@
 "        "
 
 # ../roundup/cgi/actions.py:596 :607 :778 :797
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Hiba: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, 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:2248
+#: ../roundup/admin.py:2259
 #, 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:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Adja meg a hibakövető könyvtárát: "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Hiba: Hibakövető megnyitása sikertelen: %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1243,37 +1243,37 @@
 "A Roundup %s fogadókész.\n"
 "Segítségért gépeljen \"help\"-et."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 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:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "kilépés..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Vannak nem mentett változtatások. Elmenti őket (y/N)? "
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
@@ -1284,21 +1284,21 @@
 # :1755:1775 :1828:2436 :866:1601
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1324,45 +1324,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "létrehozás"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "törlés"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "kapcsolás"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "beállítás"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "visszavonult"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "visszaállított"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1445,10 +1450,10 @@
 msgstr "\"%(input)s\" nem azonosító (%(classname)s azonosító szükséges)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr "Hibás formátum"
@@ -1502,8 +1507,8 @@
 msgid "Invalid integer: "
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Nincs jogosultsága létrehozni %(class)s-t"
@@ -1513,8 +1518,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Nincs elég érték a(z) %(line)s soron"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Nincs jogosultsága szerkeszteni %(class)s-t"
@@ -1523,17 +1528,17 @@
 msgid "Items edited OK"
 msgstr "Az elemek sikeresen szerkesztve"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s létrehozva"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1543,24 +1548,24 @@
 "a <a target=\"new\" href=\"%(klass)s%(id)s\">változtatásait</a> egy új "
 "ablakban."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Szerkesztési hiba: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
 "your email)"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Jelszó törlés kérése"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1569,29 +1574,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "A jelszó törlésre került és e-mailt küldtünk %s-nek"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Ismeretlen felhasználónév"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Ismeretlen e-mail cím"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Meg kell adni egy felhasználónevet vagy címet"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Jelszó megerősítése"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1605,31 +1610,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "E-mail elküldve %s-nek"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Regisztrálás sikeres, isten hozott!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1645,12 +1650,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1660,45 +1665,45 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Regisztráláskor nem adhatók meg szerepkörök."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Kijelentkezett"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "A felhasználónév szükséges"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Nincs jogosultsága bejelentkezni"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Nincs jogosultsága szerkeszteni %(class)s-t"
@@ -1823,8 +1828,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Ismeretlen karakterkészlet: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -1904,50 +1909,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Nem nézheti meg ezt a fájlt."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sEltelt idő: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -1956,7 +1962,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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2028,67 +2034,67 @@
 "Nincs jogosultsága a(z) %(class)s osztály elemein %(action)s műveletet "
 "végrehajtani"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(lista)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[rejtett]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Új bejegyzés - nincs történet"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Változások mentése"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 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:1268
+#: ../roundup/cgi/templating.py:1253
 #, 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:1305 ../roundup/cgi/templating.py:1335
-#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
-#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:940 :964
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 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:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (nincs érték)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2096,48 +2102,48 @@
 msgstr ""
 "<strong><em>Az előzmények képernyő nem kezeli ezt az eseményt!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 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:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Előzmények"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Dátum</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Szerző</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Művelet</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Tulajdonságok</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, 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:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "Nem"
 
 # ../roundup/cgi/templating.py:1006 :1404 :1423 :1428
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Igen"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2145,27 +2151,27 @@
 "a DateHTMLProperty alapértéke DateHTMLProperty vagy szöveges dátumleírás "
 "típusú kell legyen."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nincs kiválasztás -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2337,55 +2343,55 @@
 msgid "in %s"
 msgstr "%s-ban"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Hiba: %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
 # ../roundup/hyperdb.py:949:957
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2692,61 +2698,61 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2868,32 +2874,32 @@
 msgid "creator"
 msgstr "létrehozó"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Új beadvány %(authname)s%(authaddr)s részéről:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s ezt a megjegyzést írta:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, fuzzy, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Új beadvány %(authname)s%(authaddr)s részéről:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -2998,58 +3004,58 @@
 "<html><head><title>Roundup hibakövetők listája</title></head>\n"
 "<body><h1>Roundup hibakövetők listája</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "FIGYELEM: \"-g\" opció figyelmen kívül hagyásra került, nem root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Nem lehet csoportot váltani - nincs meg a grp modul"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "%(group)s csoport nem létezik"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "Nem futhat root-ként!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "FIGYELEM: \"-u\" opció figyelmen kívül hagyásra került, nem root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "Felhasználóváltás nem sikerült - nincs pwd modul"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "A(z) %(user)s felhasználó nem létezik"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr "\"%s\" többszálú mód nem érhető el, áttérés egyszálú módra"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Nem sikerült a(z) %s portra csatlakozni, a port már használatban van."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Nem sikerült a(z) %s portra csatlakozni, a port már használatban van."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3059,7 +3065,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3069,7 +3075,7 @@
 " -D            run the server in the foreground even when -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, python-format
 msgid ""
 "\n"
@@ -3142,21 +3148,25 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "A példányoknak név=home formában kell lenniük"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Beállítások elmentve ide: %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Elnézést, ezen az operációs rendszeren a szerver nem indítható démonként"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server elindítva a(z) %(HOST)s:%(PORT)s gépen"
@@ -4426,46 +4436,46 @@
 msgid "clear this message"
 msgstr "üzenet törlése"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "mindegy"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "nincs érték"
 
--- a/locale/it.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/it.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, 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:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argomento \"%(arg)s\" non nel formato nome=valore"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -104,7 +104,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandi:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 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:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Modelli predefiniti:"
 
 # ../roundup/admin.py:343 ../roundup/admin.py:407 ../roundup/admin.py:343:407
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Back ends:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -248,7 +248,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -262,42 +262,42 @@
 
 # ../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: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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "Non sono stati forniti abbastanza argomenti"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s·(Password):·"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ripeti password): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Mi dispiace, riprova..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "deve essere fornita la proprietà \"%(propname)s\"."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 msgid ""
 "Usage: display designator[,designator]*\n"
 "        Show the property values for the given node(s).\n"
@@ -310,13 +310,13 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s:·%(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database and file content.\n"
@@ -335,7 +335,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export only the database to files, no file content.\n"
@@ -355,7 +355,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -369,20 +369,20 @@
 msgstr ""
 
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "la classe %(classname)s non ha la proprietà \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -393,14 +393,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -408,20 +408,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -435,24 +435,24 @@
 msgstr ""
 
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, 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:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -464,12 +464,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Nessun aiuto per \"%(topic)s\""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -484,27 +484,27 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "rimuovi"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s modificata correttamente"
@@ -512,29 +512,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database and file contents from the directory.\n"
@@ -558,7 +558,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -568,7 +568,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -579,30 +579,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Password dell'amministratore"
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Conferma: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "La home dell'istanza non esiste"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "L'istanza non è stata installata"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 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:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -628,12 +628,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, 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:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -644,22 +644,22 @@
 "Se verrà reinstallata, tutti i dati precedentemente salvati andranno persi\n"
 "Cancellare la directory specificata? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Seleziona il modello predefinito [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Seleziona il backend [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erorre nei settaggi di configurazione: \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -668,11 +668,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... devono essere configurate almeno le seguenti opzioni:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -689,7 +689,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -705,17 +705,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -738,17 +738,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 msgid ""
 "Usage: pack period | date\n"
 "        Remove journal entries older than the date/period.\n"
@@ -768,11 +768,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -790,25 +790,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -837,49 +837,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nome Utente sconosciuto"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -896,18 +896,18 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "classe \"%(classname)s\" mancante"
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -919,7 +919,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 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:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -945,7 +945,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -958,46 +958,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Non è presente il ruolo \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, 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:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Ruolo \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1005,17 +1005,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 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:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1045,17 +1045,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s %(value)s (chiave)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 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:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1107,7 +1107,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1118,92 +1118,92 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:597:608 :779:798
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Errore: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1229,45 +1229,51 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "crea"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "collega"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "scollega"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "assegna"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "ritira"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "ripristina"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr ""
+"la proprietà \"%(propname)s\": \"%(value)s\" non è al momento nella lista"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1350,10 +1356,10 @@
 msgstr "\"%(input)s\" non è un ID (ID della %(classname)s è obbligatorio)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr ""
 
@@ -1407,8 +1413,8 @@
 msgid "Invalid integer: "
 msgstr "Login invalida"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Non hai il permesso per creare %(class)s"
@@ -1418,8 +1424,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Non abbastanza valori alla riga %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Non hai i permessi per modificare i %(class)s"
@@ -1428,17 +1434,17 @@
 msgid "Items edited OK"
 msgstr "Item modificato correttamente"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s modificata correttamente"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s creata"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1448,12 +1454,12 @@
 "(%(props)s). Visualizza <a target=\"new\" href=\"%(klass)s%(id)s\">le sue "
 "modifiche</a> in una nuova finestra."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Errore di modifica: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1463,12 +1469,12 @@
 "(un bug di Mozilla può causare la erronea presenza di questo messaggio, (per "
 "favore controlla la tua email)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Richiesta nuova password"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1477,29 +1483,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "Password modificata e mandata in email a %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Nome Utente sconosciuto"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Indirizzo di email sconosciuto"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "È necessario specificare un Nome Utente o un indirizzo email"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Conferma Password"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1513,31 +1519,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "Email inviata a %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Ora sei un utente registrato, benvenuto!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1553,12 +1559,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1568,45 +1574,45 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Non è permesso fornire ruoli in fase di registrazione."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Disconnesso"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "È richiesto il Nome Utente"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
 # ../roundup/cgi/actions.py:931:935
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Non hai il permesso per eseguire la login"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Non hai i permessi per modificare i %(class)s"
@@ -1738,8 +1744,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Codice di carattere sconosciuto: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -1820,57 +1826,58 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Non si dispone dei permessi per visualizzare questo file."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTempo trascorso: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1942,67 +1949,67 @@
 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:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(elenco)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[nascosto]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Nuovo nodo - nessuno storico"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Inserisci Modifiche"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La caratteristica indicata non esiste</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La classe collegata %(classname)s non esiste più"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:973:997
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Il Nodo collegato non esiste più</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (nessun valore)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2011,50 +2018,50 @@
 "<strong><em>Questo evento non è gestito dal visualizzatore dello storico!</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Storico"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Data</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Utente</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Azione</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Argomenti</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, 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:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "No"
 
 # ../roundup/cgi/templating.py:1488 ../roundup/cgi/templating.py:1039:1464
 # :1483:1488
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Sì"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2062,27 +2069,27 @@
 "Il valore predefinito per DateHTMLProperty deve essere  DateHTMLProperty "
 "oppure una stringa rappresentante una data."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nessuna selezione -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2256,57 +2263,57 @@
 msgid "in %s"
 msgstr "in %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Errore: %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr ""
 "la proprietà \"%(propname)s\": \"%(value)s\" non è al momento nella lista"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr ""
 "la proprietà \"%(propname)s\": \"%(value)s\" non è al momento nella lista"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "la proprietà \"%(propname)s\": \"%(value)s\" non è al momento nella lista"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2633,61 +2640,61 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
 # ../roundup/cgi/actions.py:931:935
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Login invalida"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2809,12 +2816,12 @@
 msgid "creator"
 msgstr "creatore"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
@@ -2822,7 +2829,7 @@
 "%(authname)s%(authaddr)s.\n"
 "Il testo della nuova richiesta è il seguente:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
@@ -2830,7 +2837,7 @@
 "%(authname)s%(authaddr)s.\n"
 "Il testo del messaggio è il seguente:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, fuzzy, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
@@ -2838,12 +2845,12 @@
 "%(authname)s%(authaddr)s.\n"
 "Il testo della nuova richiesta è il seguente:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -2948,60 +2955,60 @@
 "<html><head><title>indice dei ticket Roundup</title></head>\n"
 "<body><h1>indice dei ticket Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "ATTENZIONE: ignoro il parametro \"-g\", non sei root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Non è possibile cambiare gruppo - nessun modulo grp"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Il gruppo %(group)s non esiste"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "Non può essere eseguito come root!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "Non è possibile cambiare utente - nessun modulo pwd"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "L'utente %(user)s non esiste"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "La modalità multiprocesso \"%s\" non è disponibile, viene utilizzata quella "
 "a singolo processo"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Impossibile bindare alla porta %s, la porta risulta già in uso."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Impossibile bindare alla porta %s, la porta risulta già in uso."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3011,7 +3018,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3021,7 +3028,7 @@
 " -D            run the server in the foreground even when -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, python-format
 msgid ""
 "\n"
@@ -3094,22 +3101,26 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "L'istanza deve essere nel formato nome=home"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configurazione salvata in %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Spiacente, non è possibile utilizzare il server come demone su questo "
 "sistema operativo."
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Il server Roundup è stato attivato su %(HOST)s:%(PORT)s"
@@ -4389,46 +4400,46 @@
 msgid "clear this message"
 msgstr "non visualizzare questo messaggio"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "non importa"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "nessun valore"
 
--- a/locale/ja.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/ja.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 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:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -239,7 +239,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -251,42 +251,42 @@
 "        "
 msgstr ""
 
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 msgid ""
 "Usage: display designator[,designator]*\n"
 "        Show the property values for the given node(s).\n"
@@ -299,13 +299,13 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database and file content.\n"
@@ -324,7 +324,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export only the database to files, no file content.\n"
@@ -344,7 +344,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -357,19 +357,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -380,14 +380,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -395,20 +395,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -421,23 +421,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -449,12 +449,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -469,27 +469,27 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "削除"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 更新完了"
@@ -497,29 +497,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database and file contents from the directory.\n"
@@ -543,7 +543,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -553,7 +553,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -564,30 +564,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 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:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -613,12 +613,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -626,20 +626,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1426
-msgid "Select backend"
-msgstr ""
-
 #: ../roundup/admin.py:1437
+msgid "Select backend"
+msgstr ""
+
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -648,11 +648,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -669,7 +669,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -685,17 +685,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -718,17 +718,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 msgid ""
 "Usage: pack period | date\n"
 "        Remove journal entries older than the date/period.\n"
@@ -748,11 +748,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -770,25 +770,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -817,49 +817,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "登録されていないユーザー名です"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -876,17 +876,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "%(class)s %(id)s のコピー"
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -898,7 +898,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -912,7 +912,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -924,7 +924,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -937,46 +937,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1939
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1941
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1944
-#, python-format
-msgid "Role \"%(name)s\":\n"
-msgstr ""
-
 #: ../roundup/admin.py:1950
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1952
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1955
+#, python-format
+msgid "Role \"%(name)s\":\n"
+msgstr ""
+
+#: ../roundup/admin.py:1961
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -984,17 +984,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1015,7 +1015,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1024,17 +1024,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1066,17 +1066,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1086,7 +1086,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1096,92 +1096,92 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "エラー: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1207,45 +1207,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr ""
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1328,10 +1333,10 @@
 msgstr "\"%(input)s\" はIDではありません(%(classname)s ID を入力してください)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr "不正なリクエスト"
 
@@ -1381,8 +1386,8 @@
 msgid "Invalid integer: "
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "%(class)sを登録する権限がありません"
@@ -1392,8 +1397,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "%(class)sを編集する権限がありません"
@@ -1402,17 +1407,17 @@
 msgid "Items edited OK"
 msgstr "アイテムの編集完了"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s 更新完了"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s 登録完了"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1421,24 +1426,24 @@
 "編集エラー: 他のユーザーが %(klass)s (%(props)s) を変更しました。. <a target="
 "\"new\" href=\"%(klass)s%(id)s\">変更内容の確認</a>(別ウィンドウで開く)"
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "更新エラー: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
 "your email)"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "パスワード再設定"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1447,29 +1452,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "登録されていないユーザー名です"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "登録されていないメールアドレスです"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "ユーザー名またはメールアドレスを入力してください"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "パスワード(確認)"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1483,31 +1488,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "%sへメールを送信しました"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "ユーザー登録完了!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1523,12 +1528,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1538,44 +1543,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "登録時のロール割り当ては許可されていません。"
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "ログアウト完了"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "ユーザー名は入力必須です"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "%(class)s を表示する権限がありません"
@@ -1688,8 +1693,8 @@
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -1767,57 +1772,58 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1884,110 +1890,110 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "クラス %(class)s のアイテムを %(action)s する権限がありません"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(一覧)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "新規登録"
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "更新"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指定されたプロパティは存在しません<em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "リンク先のクラス %(classname)s は存在しません"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>リンク先のノードは存在しません</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, 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:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>備考:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "履歴"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>日時</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>ユーザー</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>アクション</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>引数</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s のコピー"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -1995,27 +2001,27 @@
 "DateHTMLProperty のデフォルト値は DateHTMLProperty もしくは日付の文字列表現で"
 "なくてはなりません。"
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "存在しない値の %(attr)s 検索が実行されました"
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "存在しない値の %(attr)s 検索が実行されました"
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未選択 -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2181,54 +2187,54 @@
 msgid "in %s"
 msgstr "%s以内"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2483,60 +2489,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2656,32 +2662,32 @@
 msgid "creator"
 msgstr "登録者"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -2780,58 +2786,58 @@
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:895
-#, python-format
-msgid "Unable to bind to port %s, port already in use."
-msgstr ""
-
 #: ../roundup/scripts/roundup_server.py:899
 #, python-format
+msgid "Unable to bind to port %s, port already in use."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:903
+#, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2841,7 +2847,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2851,7 +2857,7 @@
 " -D            run the server in the foreground even when -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, python-format
 msgid ""
 "\n"
@@ -2924,20 +2930,24 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
@@ -4215,46 +4225,46 @@
 msgid "clear this message"
 msgstr "このメッセージをクリア"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "指定しない"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr ""
 
--- a/locale/lt.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/lt.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :962 :1011 :1033
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nėra klasės \"%(classname)s\""
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argumentas \"%(arg)s\" nėra parinktis=reikšmė formato"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Komandos:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -306,25 +306,25 @@
 "\n"
 "Komandų pagalba:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Šablonai:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Duomenų saugyklos:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -370,42 +370,42 @@
 
 # ../roundup/admin.py:360 :447 :508 :587 :637 :695 :716 :744 :815 :882 :953
 # :1001 :1023 :1050 :1117 :1184
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "Paduota nepakankamai argumentų"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Slaptažodis): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Pakartoti): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Bandykite dar kartą..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "turite pateikti parinktį \"%(propname)s\"."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -424,13 +424,13 @@
 "            Ši komanda išvardina parinktis ir jų reikšmes duotam elementui.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -462,7 +462,7 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -496,7 +496,7 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -519,20 +519,20 @@
 "        "
 
 # ../roundup/admin.py:682 :835 :847 :901
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s neturi parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -551,7 +551,7 @@
 "            arba jo raktinė reikšmė.\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -563,7 +563,7 @@
 "            įprastomis reikšmėmis faile <failovardas>.\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -571,20 +571,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -604,7 +604,7 @@
 "            "
 
 # ../roundup/admin.py:541 :556
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -612,18 +612,18 @@
 "-d netinkamas."
 
 # ../roundup/admin.py:564 :964 :1013 :1035
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nėra tokio %(classname)s parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -643,12 +643,12 @@
 "        all       -- visa įmanoma pagalba\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Atsiprašome, pagalbos temai \"%(topic)s\" nėra"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -671,27 +671,27 @@
 "            kartą.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "pašalinti"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s pakeitimai išsaugoti"
@@ -699,29 +699,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -768,7 +768,7 @@
 "            veiksmas).\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -778,7 +778,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -796,23 +796,23 @@
 "            Vykdyti tracker'io inicializacijos funkciją dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Administratoriaus slaptažodis: "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Patvirtinkite: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "Namų direktorija neegzistuoja"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "Egzempliorius nebuvo įdiegtas"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -822,7 +822,7 @@
 "Jei jūs ją inicializuosite dar kartą, prarasite visus duomenis!\n"
 "Ištrinti duomenų bazę? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -870,12 +870,12 @@
 "        Taip pat pažiūrėkite initopts pagalbą.\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Namų direktorijos tėvinė direktorija \"%(parent)s\" neegzistuoja"
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -886,22 +886,22 @@
 "Jei jūs jį perdiegsite, prarasite visus duomenis!\n"
 "Ištrinti jį? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Pasirinkite šabloną [klasikinis]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Pasirinkite duomenų saugyklą [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Klaida konfigūracijos nustatymuose: \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -914,11 +914,11 @@
 " Dabar jūs turėtumėte pakeisti tracker'io konfigūracijos failą:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... mažiausiai turėtumėte nustalyti šias parinktis:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -947,7 +947,7 @@
 " aukščiau minėtus žingsnius.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -975,17 +975,17 @@
 "            parinkties sąrašas kiekvienam klasės egzemplioriui.\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "Pateikta per daug argumentų"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -1008,17 +1008,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1056,11 +1056,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Netinkamas formatas"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1078,25 +1078,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1125,49 +1125,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nežinomas vartotojo vardas"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1191,17 +1191,17 @@
 "            Paprastai tai įvyksta automatiškai.\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nėra elemento \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "nėra elemento \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1219,7 +1219,7 @@
 "            Duotas elementas vėl taps prieinamas vartotojams.\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1241,7 +1241,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1263,7 +1263,7 @@
 "             nepadarys jokių pakeitimų duomenų bazėje.\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1276,47 +1276,47 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nėra tokios rolės \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, 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:1935
+#: ../roundup/admin.py:1946
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Naujiems web vartotojams suteikiama rolė \"%(role)s\""
 
-#: ../roundup/admin.py:1939
+#: ../roundup/admin.py:1950
 #, 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:1941
+#: ../roundup/admin.py:1952
 #, 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:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolė \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1324,17 +1324,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, 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:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1369,7 +1369,7 @@
 "            reikšmės (t.y. \"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1383,17 +1383,17 @@
 "            Ši komanda išvardina duotos klasės parinktis.\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (key property)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1455,17 +1455,17 @@
 "            pateiks 4 simbolių ilgio \"Name\" stulpelį.\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" ne vardas:plotis"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1475,7 +1475,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1491,36 +1491,36 @@
 "        "
 
 # ../roundup/cgi/actions.py:579 :590 :761 :780
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Klaida: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, 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:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Kelios komandos atitinka \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Įveskite tracker'io namų direktoriją: "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Klaida: Negaliu atidaryti tracker'io: %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1529,58 +1529,58 @@
 "Roundup %s pasiruošęs priimti duomenis.\n"
 "Norėdami iškviesti pagalbą įveskite \"help\"."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "Pastaba: komandų archyvas ir redagavimas neprieinami"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "išeiti..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Yra neišsaugotų pakeitimų. Išsaugoti juos (y/N)? "
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1606,45 +1606,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "sukurti"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "atsieti"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "susieti"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "nustatyti"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "deaktyvuotas"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "aktyvuotas"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1727,10 +1732,10 @@
 msgstr "\"%(input)s\" nėra ID (reikia %(classname)s ID)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr "Netinkamas formatas"
@@ -1784,8 +1789,8 @@
 msgid "Invalid integer: "
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Neturite leidimo sukurti %(class)s"
@@ -1795,8 +1800,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Nepakanka reikšmių eilutėje %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Neturite leidimo redaguoti %(class)s"
@@ -1805,17 +1810,17 @@
 msgid "Items edited OK"
 msgstr "Elementų pakeitimai išsaugoti"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s pakeitimai išsaugoti"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "sukurta %(class)s %(id)s"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1825,12 +1830,12 @@
 "Peržiūrėkite <a target=\"new\" href=\"%(klass)s%(id)s\">jų pakeitimus</a> "
 "naujame lange."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Redagavimo klaida: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1840,12 +1845,12 @@
 "(šį pranešimą gali neteisingai sukelti Mozilla klaida, patikrinkite savo "
 "paštą.)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Slaptažodžio atstatymo užklausa"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1854,29 +1859,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "Slaptažodis atstatytas ir el. laiškas išsiųstas %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Nežinomas vartotojo vardas"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Nežinomas el. pašto adresas"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Privalote nurodyti vartotojo vardą ar el. pašto adresą"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Patvirtinti slaptažodį"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1890,31 +1895,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "El. laiškas išsiųstas %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Jūs esate užregistruotas, sveiki prisijungę!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1930,12 +1935,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1945,45 +1950,45 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Negalima pateikti rolių registracijos metu."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Jūs atsijungėte"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "Reikalingas vartotojo vardas"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
 # ../roundup/cgi/actions.py:897 :901
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Neturite prisijungimo teisių"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Neturite leidimo redaguoti %(class)s"
@@ -2114,8 +2119,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Neatpažinta koduotė: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2195,50 +2200,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Jūs neturite teisių žiūrėti šį failą."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, 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:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2248,7 +2254,7 @@
 "%(cache_misses)d. Įkeliami elementai: %(get_items)f sek. Filtruojama: "
 "%(filtering)f sek.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2318,115 +2324,115 @@
 msgstr ""
 "Jūs negalite atlikti komandos %(action)s su klasės %(class)s elementais"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(list)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[paslėpta]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Naujas elementas -- nėra istorijos"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Išsaugoti pakeitimus"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Nurodytos parinkties nėra</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Susietos klasės %(classname)s nebėra"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:930 :951
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Susieto elemento nebėra</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (no value)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, 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:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Pastaba:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Archyvas"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Data</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Vartotojas</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Veiksmas</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Argumentai</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, 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:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "Ne"
 
 # ../roundup/cgi/templating.py:993 :1357 :1376 :1381
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Taip"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2434,27 +2440,27 @@
 "standartinė DateHTMLProperty reikšmė turi būti arba DateHTMLProperty arba "
 "datos reprezentacija kaip simbolių eilutės."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nepasirinkta -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2634,54 +2640,54 @@
 msgid "in %s"
 msgstr "po %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "Klaida: %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -3002,61 +3008,61 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
 # ../roundup/cgi/actions.py:897 :901
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3178,32 +3184,32 @@
 msgid "creator"
 msgstr "kūrėjas"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Nauja pateiktis nuo %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s parašė komentarą:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, fuzzy, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Nauja pateiktis nuo %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3311,58 +3317,58 @@
 "<html><head><title>Roundup tracker'io indeksas</title></head>\n"
 "<body><h1>Roundup tracker'io indeksas</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "PERSPĖJIMAS: \"-g\" argumentas ignoruojamas, nėra root teisių"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Negaliu pakeisti grupių -- nėra grp modulio"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Grupės %(group)s nėra"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "Negaliu paleisti root teisėmis!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "PERSPĖJIMAS: \"-u\" argumentas ignoruojamas, nėra root teisių"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "Negaliu pakesiti vartotojų - nėra pwd modulio"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "Vartotojo %(user)s nėra"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr "Multiprocesinė aplinka \"%s\" neprieinama, perjungiu į vienprocesinę"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Negaliu prijungti prie jungties %s, jungtis jau naudojama."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Negaliu prijungti prie jungties %s, jungtis jau naudojama."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3379,7 +3385,7 @@
 "               Įvedę \"roundup-server -c help\" pamatysite Windows Services\n"
 "               specifiką."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3395,7 +3401,7 @@
 "               nurodytą PIDfaile. Parinktis -l *privalo* būti nurodyta\n"
 "               jei naudojama -d."
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3521,21 +3527,25 @@
 "   nesupras.\n"
 "\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "Egzempliorius turi būti nurodomas taip: vardas=namų_direktorija"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Konfigūracija išsaugota %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Jūs negalite paleisti serverio kaip daemon'o šioje operacinėje sistemoje"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup serveris paleistas ant %(HOST)s:%(PORT)s"
@@ -4817,46 +4827,46 @@
 msgid "clear this message"
 msgstr "išvalyti šį pranešimą"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "nesvarbu"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "nėra reikšmės"
 
--- a/locale/nb.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/nb.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "ingen slik klasse \"%(classname)s\""
 
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argumentet \"%(arg)s\" ikke propname=value"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problem: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "Kommandoer:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -309,23 +309,23 @@
 "\n"
 "Kommandohjelp:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "Maler:"
 
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "Back ends:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -366,42 +366,42 @@
 "        på kommandolinjen ette \"create\"kommandoen.\n"
 "        "
 
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "For få parametre"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Password): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Again): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "Beklager, prøv en gang til..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "du må oppgi \"%(propname)s\" egenskapen."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -420,13 +420,13 @@
 "        Lister egenskapene og deres verdier for oppgitt node.\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -457,7 +457,7 @@
 "\t  kolonseparerte filer som plasseres i angitt katalog.\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -490,7 +490,7 @@
 "      kolonseparerte filer som plasseres i angitt katalog.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -510,19 +510,19 @@
 "        Verdien kan enten være nodeid-en til den lenkede noden, eller dens "
 "nøkkelverdi.n        "
 
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s har ingen verdi \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -539,7 +539,7 @@
 "        Verdien kan enten være nodeid-en til den lenkede noden, eller dens "
 "nøkkelverdi.n        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -551,7 +551,7 @@
 "        i <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -559,20 +559,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -593,24 +593,24 @@
 "\t\tved angivelsene.\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, 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:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "finnes ikke %(classname)s node \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "finnes ikke %(classname)s property \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -630,12 +630,12 @@
 "        all       -- all tilgjengeli hjelp\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Beklager, ingen hjelp for \"%(topic)s\""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -657,27 +657,27 @@
 "       av list eller find-kommandoene, og at dens nøkkel kan gjenbrukes.\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "slette"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s endret ok"
@@ -685,29 +685,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -751,7 +751,7 @@
 "    (eller, mer omstendelig glem alle gamle data).\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -761,7 +761,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -779,23 +779,23 @@
 "        Kjør sporerens oppstartsfunksjon dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "Admin passord:"
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       Bekreft: "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "Hjemmekatalogen finnes ikke"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "Sporeren er ikke installert"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -805,7 +805,7 @@
 "Hvis du reinitialiserer den vil alle data bli slettet.\n"
 "Slette den? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -852,12 +852,12 @@
 "\t\tSe også hjelp for initops.\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Overordnet katalog \"%(parent)s\" finnes ikke"
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -868,22 +868,22 @@
 "Du vil miste alle data hvis du reinstallerer!\n"
 "Slette den? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "Velg mal [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "Velg database backend [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Feil i konfigurasjon \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -896,11 +896,11 @@
 " Du bør redigere konfigurasjonsfilen for sporeren nå:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr "... du må spesifisere følgende opsjoner som et minimum:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -928,7 +928,7 @@
 " disse endringene.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -957,17 +957,17 @@
 "        for alle klasseinstanser.\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "For mange argumenter"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 #, fuzzy
 msgid ""
 "Usage: migrate\n"
@@ -1014,17 +1014,17 @@
 "    la det bli en vane.\n"
 "        "
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "Ingen migrasjon krevet"
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1062,11 +1062,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "Ugyldig format"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1084,25 +1084,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1131,49 +1131,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Ukjent brukernavn:"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1197,17 +1197,17 @@
 "    automatisk.\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "ingen slik enhet  \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "ingen slik enhet  \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1225,7 +1225,7 @@
 "\t   Oppgitte noder blir tilgjengelige for brukerne igjen.\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1246,7 +1246,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1265,7 +1265,7 @@
 "          commited. \n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1278,47 +1278,47 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Ingen slik rolle \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Nye web-brukere for rollene \"%(role)s\""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Nye web-brukere for rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1939
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Nye epostbrukere for rollene \"%(role)s\""
 
-#: ../roundup/admin.py:1941
+#: ../roundup/admin.py:1952
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Nye epostbrukere for rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolle \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s bare for \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1326,17 +1326,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, 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:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1371,7 +1371,7 @@
 "som\n"
 "        en kommaseparert liste (feks \"1,2,3\")."
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1385,17 +1385,17 @@
 "        Lister egenskapene til gitt klasse.\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (key property)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1455,17 +1455,17 @@
 "        resulterer i en fire bokstavaer bred \"Name\" kolonne.\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" ikke navn:bredde"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1475,7 +1475,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1490,34 +1490,34 @@
 "        i <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "Feil: %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "Ukjent kommando \"%(command)s\" (\"help commands\" for liste)"
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Multiple kommandoer  matcher \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "Oppgi sporers plassering:"
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Feil: Kan ikke åpne sporer: %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1526,30 +1526,30 @@
 "Roundup %s er klar til bruk.\n"
 "Skriv  \"help\" for hjelp."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "Merk: kommandohistorikk og redigering utilgjengelig"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "exit..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Det er ikkelagrede endringer. Lagre dem (y/N)? "
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr "Kunne ikke identifisere databsetypen"
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, fuzzy, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
@@ -1557,7 +1557,7 @@
 msgstr ""
 "Kunne ikke åpne databasen - den påkrevde modulen '%s' er ikke tilgjengelig"
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
@@ -1565,21 +1565,21 @@
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr "Databsen åpnet bare for lesing"
 
@@ -1605,45 +1605,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "lag"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "fjern lenke"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "lenke"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "oppdater"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "glemt"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "brakt tilbake"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "egenskap %s: %r er ikke et nummer"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1726,10 +1731,10 @@
 msgstr "\"%(input)s\" er ikke en ID (%(classname)s ID påkrevet)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr "Ugyldig forespørsel"
 
@@ -1779,8 +1784,8 @@
 msgid "Invalid integer: "
 msgstr "Ugylig login"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "Du har ikke tillatelse til  å opprette %(class)s"
@@ -1790,8 +1795,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "Ikke nok verdier på linjen %(line)s"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "Du har ikke tillatelse til å endre %(class)s"
@@ -1800,17 +1805,17 @@
 msgid "Items edited OK"
 msgstr "Saker endret OK"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s endret ok"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s opprettet"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1820,12 +1825,12 @@
 "Se <a target=\"new\" href=\"%(klass)s%(id)s\">deres endringer </a> i et nytt "
 "vindu."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "Redigeringsfeil: %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1835,12 +1840,12 @@
 "(En Mozilla feil kan forårsake at denne meldingen kommer feilaktig, venligst "
 "sjekk eposten din)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "Passord endringsforespørse"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1849,29 +1854,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "En e-post med passord er nå sendt til %s."
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "Ukjent brukernavn:"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "Ukjent postadresse:"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "Du må spesifisere et brukernavn eller en adresse"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "Bekreft passord"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1885,31 +1890,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "Epost sendt til %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "Du er registrert, velkommen!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1925,12 +1930,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1940,44 +1945,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "Du kan ikke oppgi roller ved registreringen."
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "Du er logget ut"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "Brukernavn nødvendig"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "Ugylig login"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "Du har ikke tillatelse til å logge inn"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Du har ikke tillatelse til  å se på %(class)s"
@@ -2102,8 +2107,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "Ukjent tegnsett: %r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2181,50 +2186,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "Du har ikke lov å se denne filen."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, 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:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2233,7 +2239,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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2299,64 +2305,64 @@
 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:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(liste)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "Legg til ny oppføring"
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[skjult]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "Ny node - ingen historie"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "Lagre endringer"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Valgt egenskap finnes ikke lenger</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Den lenkede klassen %(classname)s finnes ikke lenger"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Den lenkede noden finnes ikke lenger</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (ingen verdi)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2365,46 +2371,46 @@
 "<strong><em>Denne hendelsen håndteres ikke av historievisningen!</em></"
 "strong>"
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Noter:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "Historie"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>Dato</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>Bruker</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>Aksjon</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>Argumenter</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Kopi av %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "Nei"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "Ja"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2412,27 +2418,27 @@
 "standard verdi for DateHTMLProperty må være enten DateHTMLProperty eller en "
 "streng represantasjon av tidspunkt."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, 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:2479
+#: ../roundup/cgi/templating.py:2508
 #, 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:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- intet valg -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2603,54 +2609,54 @@
 msgid "in %s"
 msgstr "i %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "egenskap %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr "egenskap %s: %r er en ugyldig dato (%s)"
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, fuzzy, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr "egenskap %s: %r er et ugyldig datointervalll (%s)"
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "egenskap %s: %r er ikke et nummer"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "egenskap %s: %r er ikke et nummer"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr "\"%s\" ikke en node-benevnelse"
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr "Ikke et navn på egenskap: %s"
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "egenskapen \"%(propname)s\": \"%(value)s\" er ikke i listen nå"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr "du kan bare oppgi ID-verdier for egenskap %s"
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, fuzzy, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr "%r er ikke en egenskap ved %s"
@@ -2990,60 +2996,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "Ugylig login"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3163,33 +3169,33 @@
 msgid "creator"
 msgstr "opprettet av"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "Ny sak fra %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s la inn kommentaren:"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr "Endret av %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 "Filen '%(filename)s' er ikke vedlagt - du kan laste den ned fra %(link)s."
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3299,59 +3305,59 @@
 "<html><head><title>Roundup saksliste</title></head>\n"
 "<body><h1>Roundup saksliste</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "ADVARSEL: ignorerer \"-g\" argument, ikke root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "Kan ikke skifte gruppe, ingen grp modul"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Gruppe %(group)s finnes ikke"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "Kan ikke kjøre som root"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "ADVARSEL: ignorerer \"-u\" argument, ikke root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "Kan ikke skifte bruker , ingen pwd modul"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "Bruker %(user)s finnes ikke"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "Multiprosess modus  \"%s\" ikke tilgjengelig, fortsetter som enkeltprosess"
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Ikke mulig å binde til port %s, porten er allerede i bruk."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Ikke mulig å binde til port %s, porten er allerede i bruk."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3368,7 +3374,7 @@
 "               Skriv \"roundup-server -c help\" for å vise Windows Services\n"
 "               informasjon."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3384,7 +3390,7 @@
 "               serverens PID til filen indikert av PIDfile.\n"
 "               -l optsjonen *må* brukes hvis -d brukes."
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3512,21 +3518,25 @@
 "   Pass på at de ikke inneholder url-utrygge tegn som mellomrom, for de kan "
 "forvirre IE.\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "Instanser må være navn=home"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Konfigurasjon lagret til %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Beklager, du kan ikke kjøre servern som daemon under dette operativsystemet"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server startet på %(HOST)s:%(PORT)s"
@@ -4803,46 +4813,46 @@
 msgid "clear this message"
 msgstr "klarer denne meldingen"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "valgfritt"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "ingen verdi"
 
--- a/locale/roundup.pot	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/roundup.pot	Wed Jun 11 17:04:51 2025 -0400
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:53-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 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:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415 ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426 ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425 ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436 ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -235,7 +235,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -247,42 +247,42 @@
 "        "
 msgstr ""
 
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388 :1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 msgid ""
 "Usage: display designator[,designator]*\n"
 "        Show the property values for the given node(s).\n"
@@ -295,13 +295,13 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database and file content.\n"
@@ -320,7 +320,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export only the database to files, no file content.\n"
@@ -340,7 +340,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -353,19 +353,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120 ../roundup/admin.py:791:840
-#: :1536:1549 :2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131 ../roundup/admin.py:802:851
+#: :1547:1560 :2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -376,14 +376,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -391,20 +391,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -417,23 +417,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -445,12 +445,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -465,26 +465,26 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr ""
@@ -492,29 +492,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database and file contents from the directory.\n"
@@ -538,7 +538,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -548,7 +548,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -559,30 +559,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 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:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -608,12 +608,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -621,20 +621,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1426
-msgid "Select backend"
-msgstr ""
-
 #: ../roundup/admin.py:1437
+msgid "Select backend"
+msgstr ""
+
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -643,11 +643,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -663,7 +663,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -679,17 +679,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -712,17 +712,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 msgid ""
 "Usage: pack period | date\n"
 "        Remove journal entries older than the date/period.\n"
@@ -742,11 +742,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -764,25 +764,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -811,49 +811,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr ""
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -870,17 +870,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -892,7 +892,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -906,7 +906,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -918,7 +918,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -931,46 +931,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1939
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1941
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1944
-#, python-format
-msgid "Role \"%(name)s\":\n"
-msgstr ""
-
 #: ../roundup/admin.py:1950
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1952
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1955
+#, python-format
+msgid "Role \"%(name)s\":\n"
+msgstr ""
+
+#: ../roundup/admin.py:1961
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -978,17 +978,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1009,7 +1009,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1018,17 +1018,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1060,17 +1060,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1080,7 +1080,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1090,90 +1090,90 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr ""
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280 ../roundup/backends/sessions_dbm.py:61
+#: ../roundup/backends/back_anydbm.py:278 ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873 ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442 :1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444 :1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1199,45 +1199,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr ""
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr ""
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1319,10 +1324,10 @@
 msgstr ""
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266 :1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266 :1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr ""
 
@@ -1370,8 +1375,8 @@
 msgid "Invalid integer: "
 msgstr ""
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr ""
@@ -1381,8 +1386,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr ""
@@ -1391,41 +1396,41 @@
 msgid "Items edited OK"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
 "target=\"_blank\" href=\"%(klass)s%(id)s\">their changes</a> in a new window."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
 "your email)"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, python-format
 msgid "Password reset for %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1434,29 +1439,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:999
-msgid "Unknown email address"
-msgstr ""
-
 #: ../roundup/cgi/actions.py:1004
+msgid "Unknown email address"
+msgstr ""
+
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, python-format
 msgid "Confirm reset of password for %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1470,31 +1475,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, python-format
 msgid "Email sent to %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1509,12 +1514,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1524,44 +1529,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr ""
@@ -1671,8 +1676,8 @@
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -1750,57 +1755,58 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749 :1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751 :1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1863,135 +1869,135 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr ""
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517 :2820
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr ""
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></strong>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125 :2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119 :2154
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125 :2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119 :2148
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2155,54 +2161,54 @@
 msgid "in %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr ""
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr ""
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2456,60 +2462,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, python-format
 msgid "Invalid value for --style: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2629,32 +2635,32 @@
 msgid "creator"
 msgstr ""
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -2753,58 +2759,58 @@
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:895
-#, python-format
-msgid "Unable to bind to port %s, port already in use."
-msgstr ""
-
 #: ../roundup/scripts/roundup_server.py:899
 #, python-format
+msgid "Unable to bind to port %s, port already in use."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:903
+#, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2814,7 +2820,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2824,7 +2830,7 @@
 " -D            run the server in the foreground even when -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, python-format
 msgid ""
 "\n"
@@ -2896,20 +2902,24 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
@@ -4163,46 +4173,46 @@
 msgid "clear this message"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr ""
 
--- a/locale/ru.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/ru.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr " \"%(classname)s\"  "
 
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr " \"%(arg)s\"    ="
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -104,7 +104,7 @@
 ": %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr ":"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -308,23 +308,23 @@
 "\n"
 "  :\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr ":"
 
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr ":"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -348,7 +348,7 @@
 "        ,       .\n"
 "        "
 
-#: ../roundup/admin.py:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -366,42 +366,42 @@
 "           .\n"
 "        "
 
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr " "
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr " %(propname)s (): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "%(propname)s ( ): "
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "  .    ."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr " \"%(propname)s\"   ."
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -421,13 +421,13 @@
 "         .\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -468,7 +468,7 @@
 "        exporttables.\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -510,7 +510,7 @@
 "        ,   export.\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -531,19 +531,19 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -561,7 +561,7 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 #, fuzzy
 msgid ""
 "Usage: genconfig filename\n"
@@ -573,7 +573,7 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -581,20 +581,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -615,24 +615,24 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, 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:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "  %(classname)s   \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "  %(classname)s   \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -652,12 +652,12 @@
 "        all       --  \n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ",  \"%(topic)s\"  ."
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -681,27 +681,27 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "  %(properties)s  %(class)s %(id)s"
@@ -709,29 +709,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -777,7 +777,7 @@
 "            ).\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -788,7 +788,7 @@
 
 #  password
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -806,23 +806,23 @@
 "            dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr " : "
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "               : "
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "    "
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "  "
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -832,7 +832,7 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -884,12 +884,12 @@
 "        . \"help initopts\".\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr " \"%(parent)s\"  "
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -900,22 +900,22 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "  [classic]: "
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "  [anydbm]: "
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "   : \"%s\""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, python-format
 msgid ""
 "\n"
@@ -928,12 +928,12 @@
 "       :\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ...  ,    :"
 
 #    
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, python-format
 msgid ""
 "\n"
@@ -960,7 +960,7 @@
 "       \"roundup-admin initialise\".\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -989,17 +989,17 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "   "
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -1022,17 +1022,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -1071,11 +1071,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr " "
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1093,25 +1093,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1140,49 +1140,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "  "
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1206,17 +1206,17 @@
 "        .      .\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr " \"%(designator)s\"  "
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr " \"%(designator)s\"  "
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1235,7 +1235,7 @@
 "          .\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1258,7 +1258,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1279,7 +1279,7 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1292,49 +1292,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr " \"%(role)s\"  "
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1939
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1941
+#: ../roundup/admin.py:1952
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr " \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1342,17 +1342,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1387,7 +1387,7 @@
 "        .  (, \"1,2,3\".)\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1401,17 +1401,17 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1471,17 +1471,17 @@
 "           \"Name\"   .\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr " \"%(spec)s\"     :"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1491,7 +1491,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -1506,35 +1506,35 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr ": %s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 " \"%(command)s\" . (\"help commands\"   )"
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "\"%(command)s\"   : %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "  : "
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ":   : %(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1543,58 +1543,58 @@
 "Roundup %s   .\n"
 " \"help\"  ."
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr ":     "
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "   ..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ",   .     (y/N)? "
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1620,45 +1620,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr ""
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr " \"%(propname)s\":  \"%(value)s\"   "
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1743,10 +1748,10 @@
 "%(classname)s)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr " "
@@ -1797,8 +1802,8 @@
 msgid "Invalid integer: "
 msgstr "    ."
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "     %(class)s"
@@ -1808,8 +1813,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "  %(line)s   "
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "     %(class)s"
@@ -1818,17 +1823,17 @@
 msgid "Items edited OK"
 msgstr "  "
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "  %(properties)s  %(class)s %(id)s"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s "
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, fuzzy, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
@@ -1838,12 +1843,12 @@
 "target=\"new\" href=\"%(klass)s%(id)s\">  </a>  "
 " ."
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr " : %s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1853,12 +1858,12 @@
 "(-    Mozilla     . "
 "  , .)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr " "
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1867,29 +1872,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr " .    %s  ."
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "  "
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "  email"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "       email"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "( )"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1903,31 +1908,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "   %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr " .   !"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1943,12 +1948,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1958,44 +1963,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "    "
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "  "
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "   "
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "    ."
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "       "
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "     %(class)s"
@@ -2128,8 +2133,8 @@
 msgid "Unrecognized charset: %r"
 msgstr " %r  "
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2207,50 +2212,51 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "       ."
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)s : %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2260,7 +2266,7 @@
 "%(cache_misses)d.  : %(get_items)f . : "
 "%(filtering)f .%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2329,113 +2335,113 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "    %(action)s   %(class)s"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "()"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 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: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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "  -  "
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>    .</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "  %(classname)s   "
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # :823
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>    </strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: ( )"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, 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:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ": %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2443,27 +2449,27 @@
 "    DateHTMLProperty    "
 "DateHTMLProperty    ."
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "   \"%(attr)s\"  "
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "   \"%(attr)s\"  "
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">-   -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2645,54 +2651,54 @@
 msgid "in %s"
 msgstr " %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr ": %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr " \"%(propname)s\":  \"%(value)s\"   "
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr " \"%(propname)s\":  \"%(value)s\"   "
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr " \"%(propname)s\":  \"%(value)s\"   "
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -3026,60 +3032,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "    ."
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -3199,33 +3205,33 @@
 msgid "creator"
 msgstr ""
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr "   %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr "%(authname)s%(authaddr)s  :"
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr " %(authname)s%(authaddr)s:"
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 " '%(filename)s'   -       %(link)s."
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3335,62 +3341,62 @@
 "<html><head><title>  Roundup</title></head>\n"
 "<body><h1>  Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 ":  \"-g\"  ,     "
 " root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "   -   grp"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr " %(group)s  "
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "     root !"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 ":  \"-u\"  ,     "
 " root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "   -   pwd"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr " %(user)s  "
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr " \"%s\" ,    "
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "     %s,   ."
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "     %s,   ."
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3407,7 +3413,7 @@
 "                .   'roundup-server -c help'\n"
 "                     Windows."
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3423,7 +3429,7 @@
 "                    .    \"-d\",\n"
 "                 **     \"-l\""
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3552,21 +3558,25 @@
 "       URL (,    .),\n"
 "             IE.\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "      ="
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "   %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 ",         "
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr " Roundup      %(HOST)s:%(PORT)s"
@@ -4850,46 +4860,46 @@
 msgid "clear this message"
 msgstr "  "
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr " "
 
--- a/locale/zh_CN.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/zh_CN.po	Wed Jun 11 17:04:51 2025 -0400
@@ -6,9 +6,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "无此类别 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "参数 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -107,7 +107,7 @@
 "问题: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -295,25 +295,25 @@
 "\n"
 "使用帮助:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "后端:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -354,42 +354,42 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "未提供足够的参数"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (密码):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "抱歉,再试一次..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必须提供 \"%(propname)s\" 属性。"
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -408,13 +408,13 @@
 "        将显示给出结点的属性和相应的值。\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -442,7 +442,7 @@
 "        放在指定的目标目录中。\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -471,7 +471,7 @@
 "        放在指定的目标目录中。\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -493,20 +493,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 没有 \"%(propname)s\" 属性"
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -524,14 +524,14 @@
 "        或者是结点的键值。\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -539,20 +539,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -572,24 +572,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, 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:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "没有这样的 %(classname)s 属性 \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -609,12 +609,12 @@
 "        all       -- 所有可用的帮助\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,没有“%(topic)s”的帮助信息"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -636,27 +636,27 @@
 "        它的键值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "删除"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 编辑成功"
@@ -664,29 +664,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -728,7 +728,7 @@
 "        旧数据。)\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -738,7 +738,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -756,23 +756,23 @@
 "        执行tracker的初始化函数 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "管理员密码:"
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       确认:"
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "实例目录不存在"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "实例还没有安装"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -782,7 +782,7 @@
 "如果你重新初始化它,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -822,12 +822,12 @@
 "        请查看初始化参数帮助。\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "实例目录的父目录 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -838,22 +838,22 @@
 "如果你重新安装,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "选择模板 [classic]:"
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "选择后端 [anydbm]:"
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置设定有错: “%s”"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -865,11 +865,11 @@
 " 现在你应该修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必须设置以下选项:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -893,7 +893,7 @@
 "   %(database_init_file)s\n"
 " ... 查看关于客户化的文档来了解更多的信息。\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -919,17 +919,17 @@
 "        定了属性,对每个类型实例会打印出这个属性。\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "提供了太多的参数了"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -952,17 +952,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "不必执行迁移"
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -999,11 +999,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "无效的格式"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1021,25 +1021,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1068,49 +1068,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "未知用户名"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1133,17 +1133,17 @@
 "        重新生成 tracker 的搜索索引,它将自动进行。\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "没有这样的条目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "没有这样的条目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1161,7 +1161,7 @@
 "        给定的结点将对用户来说再次生效。\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1182,7 +1182,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1201,7 +1201,7 @@
 "        产生变化。\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1214,47 +1214,47 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "没有这样的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1939
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1941
+#: ../roundup/admin.py:1952
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1262,17 +1262,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1305,7 +1305,7 @@
 "        你需要为多链接提供用逗号分隔的数字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1319,17 +1319,17 @@
 "        会列出给定类型的属性。\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (关键属性)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1387,17 +1387,17 @@
 "        将生成4个字符宽的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:宽度"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1407,7 +1407,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1418,34 +1418,34 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:549 :559 :730 :749
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "错误:%s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "输入tracker起始目录:"
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "错误:不能打开tracker:%(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1454,58 +1454,58 @@
 "Roundup %s 输入就绪。\n"
 "敲入 \"help\" 获得帮助。"
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "注意:命令历史和编辑无效"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改动。提交吗(y/N)?"
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1531,45 +1531,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "创建"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "解链"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "链接"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "修改"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "撤除"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "恢复"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1652,10 +1657,10 @@
 msgstr "\"%(input)s\" 不是一个 ID (要求 %(classname)s ID)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 msgid "Invalid request"
 msgstr "无效请求"
 
@@ -1705,8 +1710,8 @@
 msgid "Invalid integer: "
 msgstr "无效登录"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "你没有权限来创建 %(class)s"
@@ -1716,8 +1721,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "在 %(line)s 行没有足够的值"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "你没有权限来编辑 %(class)s"
@@ -1726,29 +1731,29 @@
 msgid "Items edited OK"
 msgstr "项目编辑成功"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s 编辑成功"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s 被创建"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
 "target=\"_blank\" href=\"%(klass)s%(id)s\">their changes</a> in a new window."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "编辑错误:%s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1757,12 +1762,12 @@
 "Invalid One Time Key!\n"
 "(一个 Mozilla 的错误可能会错误地引发这个消息,你检查你的邮件)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "密码重设请求"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1771,29 +1776,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "密码被重设,邮件被发给 %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "未知用户名"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "未知邮件地址"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "你需要指定用户名或地址"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "确认密码"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1807,31 +1812,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "邮件发给 %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "你已经注册,欢迎!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1847,12 +1852,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1862,44 +1867,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "不允许在注册时指供角色。"
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "你已经登出"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "需要用户名"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "无效登录"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "你没有登录的权限"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "你没有查看 %(class)s 的权限"
@@ -2023,8 +2028,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "无法识别的字符集:%r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2102,57 +2107,58 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 msgid "You are not allowed to view this file."
 msgstr "你没有查看此文件的权限"
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2216,137 +2222,137 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "你不允许 %(action)s 类 %(class)s 的项目"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(列表)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "提交"
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr "[隐藏]"
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "新记录 - 无历史"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "提交变动"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指示的属性不再存在</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "链接的类 %(classname)s 不再存在"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:872 :893
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>链接的结点不再存在</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (无值)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, 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:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>注意:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "历史"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>日期</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>用户</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>动作</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>参数</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, fuzzy, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s 被创建"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "否"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "是"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr "DateHTMLProperty 的缺省值或者是 DateHTMLProperty 或字符串的日期表示。"
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未选择 -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2504,54 +2510,54 @@
 msgid "in %s"
 msgstr "在 %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "属性 %s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, python-format
 msgid "Not a property name: %s"
 msgstr "不是属性名: %s"
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2806,60 +2812,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "无效登录"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2979,32 +2985,32 @@
 msgid "creator"
 msgstr "创建者"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3108,58 +3114,58 @@
 "<html><head><title>Roundup tracker 索引</title></head>\n"
 "<body><h1>Roundup tracker 索引</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "警告:忽略 \"-g\" 参数,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "不能修改组 - 无 grp 模块"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "组 %(group)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "不能以 root 运行!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "警告:忽略 \"-u\" 参数,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "不能修改用户 - 无 pwd 模块"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "用户 %(user)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "无法绑定到端口 %s, 端口已经被占用。"
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "无法绑定到端口 %s, 端口已经被占用。"
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 #, fuzzy
 msgid ""
 " -c <Command>  Windows Service options.\n"
@@ -3176,7 +3182,7 @@
 "               变量上配置一个tracker。这个选项与其经选项是互斥的。打入\n"
 "               \"roundup-server -c help\" 来了解Windows服务的规范。"
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3192,7 +3198,7 @@
 "去。\n"
 "               如果使用了 -d 选项,则 -l 选项 *必须* 要指定。"
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3294,20 +3300,24 @@
 "   意数量的 name=home 对。要确保 name 部分不能包括任何非url安全的\n"
 "   字符,象空格,因为它们会把IE搞乱。\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "实例必须是 实例名=实例路径"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "配置保存到 %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr "抱歉,在这个操作系统上不能以守护进程的方式来运行服务"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server 启动于 %(HOST)s:%(PORT)s"
@@ -4575,46 +4585,46 @@
 msgid "clear this message"
 msgstr "清除此消息"
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "不用关心"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr "------------"
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "无值"
 
--- a/locale/zh_TW.po	Wed Jun 11 16:19:00 2025 -0400
+++ b/locale/zh_TW.po	Wed Jun 11 17:04:51 2025 -0400
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Roundup 2.5.0\n"
+"Project-Id-Version: Roundup 2.5.0b1\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2025-01-12 20:17-0500\n"
+"POT-Creation-Date: 2025-06-11 16:02-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:131
+#: ../roundup/admin.py:132
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:135
+#: ../roundup/admin.py:136
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:139
+#: ../roundup/admin.py:140
 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:148
+#: ../roundup/admin.py:149
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:152
+#: ../roundup/admin.py:153
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:155
+#: ../roundup/admin.py:156
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:158
+#: ../roundup/admin.py:159
 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:160
+#: ../roundup/admin.py:161
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:162
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:163
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:164
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1858
-#: ../roundup/admin.py:1890 ../roundup/admin.py:175:1188 :1858:1890
+#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869
+#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "無此類別 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:188
+#: ../roundup/admin.py:189
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "參數 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -106,7 +106,7 @@
 "問題: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:202
+#: ../roundup/admin.py:203
 #, 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:231
+#: ../roundup/admin.py:232
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:238
+#: ../roundup/admin.py:249
 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:270
+#: ../roundup/admin.py:281
 #, fuzzy
 msgid ""
 "\n"
@@ -293,25 +293,25 @@
 "\n"
 "使用說明:\n"
 
-#: ../roundup/admin.py:334
+#: ../roundup/admin.py:345
 #, python-format
 msgid "%s:"
 msgstr ""
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:439 ../roundup/admin.py:1415
-#: ../roundup/admin.py:439:1415
+#: ../roundup/admin.py:450 ../roundup/admin.py:1426
+#: ../roundup/admin.py:450:1426
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:442 ../roundup/admin.py:1425
-#: ../roundup/admin.py:442:1425
+#: ../roundup/admin.py:453 ../roundup/admin.py:1436
+#: ../roundup/admin.py:453:1436
 msgid "Back ends:"
 msgstr "後端:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:470
 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:474
+#: ../roundup/admin.py:485
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -352,42 +352,42 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../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:1388 ../roundup/admin.py:1516 ../roundup/admin.py:1599
-#: ../roundup/admin.py:1725 ../roundup/admin.py:1848 ../roundup/admin.py:1880
-#: ../roundup/admin.py:1996 ../roundup/admin.py:2050 ../roundup/admin.py:2098
-#: ../roundup/admin.py:482:555 :1216:1388:1516 :1599:1725 :1848:1880 :1996:2050
-#: :2098 :606:733 :806:851 :902:999
+#: ../roundup/admin.py:493 ../roundup/admin.py:566 ../roundup/admin.py:617
+#: ../roundup/admin.py:744 ../roundup/admin.py:817 ../roundup/admin.py:862
+#: ../roundup/admin.py:913 ../roundup/admin.py:1010 ../roundup/admin.py:1227
+#: ../roundup/admin.py:1399 ../roundup/admin.py:1527 ../roundup/admin.py:1610
+#: ../roundup/admin.py:1736 ../roundup/admin.py:1859 ../roundup/admin.py:1891
+#: ../roundup/admin.py:2007 ../roundup/admin.py:2061 ../roundup/admin.py:2109
+#: ../roundup/admin.py:493:566 :1227:1399 :1527:1610 :1736:1859 :1891:2007
+#: :2061:2109 :617:744 :817:862 :913:1010
 msgid "Not enough arguments supplied"
 msgstr "未提供足夠的參數"
 
-#: ../roundup/admin.py:502
+#: ../roundup/admin.py:513
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (口令):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:516
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:509
+#: ../roundup/admin.py:520
 msgid "Sorry, try again..."
 msgstr "抱歉,再試一次..."
 
-#: ../roundup/admin.py:514
+#: ../roundup/admin.py:525
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:533
+#: ../roundup/admin.py:544
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必須提供 \"%(propname)s\" 屬性。"
 
-#: ../roundup/admin.py:545
+#: ../roundup/admin.py:556
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -406,13 +406,13 @@
 "        將顯示給出結點的屬性和相應的值。\n"
 "        "
 
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:597
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:589
+#: ../roundup/admin.py:600
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -440,7 +440,7 @@
 "        放在指定的目標目錄中。\n"
 "        "
 
-#: ../roundup/admin.py:704
+#: ../roundup/admin.py:715
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -469,7 +469,7 @@
 "        放在指定的目標目錄中。\n"
 "        "
 
-#: ../roundup/admin.py:723
+#: ../roundup/admin.py:734
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -491,20 +491,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:764
+#: ../roundup/admin.py:775
 #, 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:791 ../roundup/admin.py:840 ../roundup/admin.py:1536
-#: ../roundup/admin.py:1549 ../roundup/admin.py:2120
-#: ../roundup/admin.py:791:840 :1536:1549:2120
+#: ../roundup/admin.py:802 ../roundup/admin.py:851 ../roundup/admin.py:1547
+#: ../roundup/admin.py:1560 ../roundup/admin.py:2131
+#: ../roundup/admin.py:802:851 :1547:1560:2131
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 沒有 \"%(propname)s\" 屬性"
 
-#: ../roundup/admin.py:798
+#: ../roundup/admin.py:809
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -522,14 +522,14 @@
 "        或者是結點的鍵值。\n"
 "        "
 
-#: ../roundup/admin.py:847
+#: ../roundup/admin.py:858
 msgid ""
 "Usage: genconfig filename\n"
 "        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Changing option\n"
@@ -537,20 +537,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:875
+#: ../roundup/admin.py:886
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:882
+#: ../roundup/admin.py:893
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:892
+#: ../roundup/admin.py:903
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -570,24 +570,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:936
 #, 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:942 ../roundup/admin.py:1190 ../roundup/admin.py:1864
-#: ../roundup/admin.py:1892 ../roundup/admin.py:942:1190 :1864:1892
+#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875
+#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:945
+#: ../roundup/admin.py:956
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "沒有這樣的 %(classname)s 屬性 \"%(propname)s\""
 
-#: ../roundup/admin.py:950
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -607,12 +607,12 @@
 "        all       -- 所有可用的說明\n"
 "        "
 
-#: ../roundup/admin.py:969
+#: ../roundup/admin.py:980
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,沒有對 \"%(topic)s\" 的說明信息"
 
-#: ../roundup/admin.py:986
+#: ../roundup/admin.py:997
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -634,27 +634,27 @@
 "        它的鍵值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1011
+#: ../roundup/admin.py:1022
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1062
+#: ../roundup/admin.py:1073
 #, fuzzy
 msgid "removed"
 msgstr "刪除"
 
-#: ../roundup/admin.py:1064
+#: ../roundup/admin.py:1075
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1066
+#: ../roundup/admin.py:1077
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1091
+#: ../roundup/admin.py:1102
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 編輯成功"
@@ -662,29 +662,29 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1112
+#: ../roundup/admin.py:1123
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
-#: ../roundup/admin.py:1118:1147
+#: ../roundup/admin.py:1129 ../roundup/admin.py:1158
+#: ../roundup/admin.py:1129:1158
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:1137
+#: ../roundup/admin.py:1148
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1144
+#: ../roundup/admin.py:1155
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1195
+#: ../roundup/admin.py:1206
 #, fuzzy
 msgid ""
 "Usage: import import_dir\n"
@@ -726,7 +726,7 @@
 "        舊數據。)\n"
 "        "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: importtables export_dir\n"
 "        This imports the database tables exported using exporttables.\n"
@@ -736,7 +736,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1325
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -754,23 +754,23 @@
 "        執行tracker的初始化函數 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1328
+#: ../roundup/admin.py:1339
 msgid "Admin Password: "
 msgstr "管理員口令:"
 
-#: ../roundup/admin.py:1329
+#: ../roundup/admin.py:1340
 msgid "       Confirm: "
 msgstr "       確認:"
 
-#: ../roundup/admin.py:1333
+#: ../roundup/admin.py:1344
 msgid "Instance home does not exist"
 msgstr "實例目錄不存在"
 
-#: ../roundup/admin.py:1337
+#: ../roundup/admin.py:1348
 msgid "Instance has not been installed"
 msgstr "實例還沒有安裝"
 
-#: ../roundup/admin.py:1345
+#: ../roundup/admin.py:1356
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -780,7 +780,7 @@
 "如果你重新初始化它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:1365
+#: ../roundup/admin.py:1376
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -820,12 +820,12 @@
 "        請查看初始化參數說明。\n"
 "        "
 
-#: ../roundup/admin.py:1394
+#: ../roundup/admin.py:1405
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "實例目錄的父目錄 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:1403
+#: ../roundup/admin.py:1414
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -836,22 +836,22 @@
 "如果你打算重新安裝它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:1416
+#: ../roundup/admin.py:1427
 #, fuzzy
 msgid "Select template"
 msgstr "選擇模板 [classic]:"
 
-#: ../roundup/admin.py:1426
+#: ../roundup/admin.py:1437
 #, fuzzy
 msgid "Select backend"
 msgstr "選擇後端 [anydbm]:"
 
-#: ../roundup/admin.py:1437
+#: ../roundup/admin.py:1448
 #, fuzzy, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置保存到 %s"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1481
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -863,11 +863,11 @@
 " 現在你應該修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1480
+#: ../roundup/admin.py:1491
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必須設置以下選項:"
 
-#: ../roundup/admin.py:1485
+#: ../roundup/admin.py:1496
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -891,7 +891,7 @@
 "   %(database_init_file)s\n"
 " ... 查看關於客戶化的文檔來瞭解更多的信息。\n"
 
-#: ../roundup/admin.py:1501
+#: ../roundup/admin.py:1512
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -917,17 +917,17 @@
 "        定了屬性,對每個類型實例會列印出這個屬性。\n"
 "        "
 
-#: ../roundup/admin.py:1514
+#: ../roundup/admin.py:1525
 msgid "Too many arguments supplied"
 msgstr "提供了太多的參數了"
 
-#: ../roundup/admin.py:1547
+#: ../roundup/admin.py:1558
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1565
 msgid ""
 "Usage: migrate\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
@@ -950,17 +950,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1574
+#: ../roundup/admin.py:1585
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1578
+#: ../roundup/admin.py:1589
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1583
+#: ../roundup/admin.py:1594
 #, fuzzy
 msgid ""
 "Usage: pack period | date\n"
@@ -997,11 +997,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1609
+#: ../roundup/admin.py:1620
 msgid "Invalid format"
 msgstr "無效的格式"
 
-#: ../roundup/admin.py:1620
+#: ../roundup/admin.py:1631
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
 "        Time operations in Roundup.\n"
@@ -1019,25 +1019,25 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1657
+#: ../roundup/admin.py:1668
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1661
+#: ../roundup/admin.py:1672
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1688
+#: ../roundup/admin.py:1699
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1691
+#: ../roundup/admin.py:1702
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1697
+#: ../roundup/admin.py:1708
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
 "        Set internal admin settings to a value.\n"
@@ -1066,49 +1066,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1732
+#: ../roundup/admin.py:1743
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
-msgid "Current settings and values (NYI - not yet implemented):"
-msgstr ""
-
 #: ../roundup/admin.py:1746
+msgid "Current settings and values (NYI - not yet implemented):"
+msgstr ""
+
+#: ../roundup/admin.py:1757
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1763
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "未知用戶名"
 
-#: ../roundup/admin.py:1762
+#: ../roundup/admin.py:1773
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1769
+#: ../roundup/admin.py:1780
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1776
+#: ../roundup/admin.py:1787
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1786
+#: ../roundup/admin.py:1797
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1795
+#: ../roundup/admin.py:1806
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1131,17 +1131,17 @@
 "        重新生成 tracker 的搜索索引,它將自動進行。\n"
 "        "
 
-#: ../roundup/admin.py:1817
+#: ../roundup/admin.py:1828
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "沒有這樣的條目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1827
+#: ../roundup/admin.py:1838
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "沒有這樣的條目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1850
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1159,7 +1159,7 @@
 "        給定的結點將對用戶來說再次生效。\n"
 "        "
 
-#: ../roundup/admin.py:1870
+#: ../roundup/admin.py:1881
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1180,7 +1180,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1909
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1199,7 +1199,7 @@
 "        產生變化。\n"
 "        "
 
-#: ../roundup/admin.py:1911
+#: ../roundup/admin.py:1922
 msgid ""
 "Usage: security [Role name]\n"
 "        Display the Permissions available to one or all Roles.\n"
@@ -1212,47 +1212,47 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1926
+#: ../roundup/admin.py:1937
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "沒有這樣的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1932
+#: ../roundup/admin.py:1943
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1946
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1939
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1941
+#: ../roundup/admin.py:1952
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1944
+#: ../roundup/admin.py:1955
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1950
+#: ../roundup/admin.py:1961
 #, 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:1963
+#: ../roundup/admin.py:1974
 #, python-format
 msgid ""
 "\n"
@@ -1260,17 +1260,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1969
+#: ../roundup/admin.py:1980
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1972
+#: ../roundup/admin.py:1983
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1976
+#: ../roundup/admin.py:1987
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1303,7 +1303,7 @@
 "        你需要為多鏈接提供用逗號分隔的數字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:2044
+#: ../roundup/admin.py:2055
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1317,17 +1317,17 @@
 "        會列出給定類型的屬性。\n"
 "        "
 
-#: ../roundup/admin.py:2063
+#: ../roundup/admin.py:2074
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:2066
+#: ../roundup/admin.py:2077
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:2069
+#: ../roundup/admin.py:2080
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1385,17 +1385,17 @@
 "        將生成4個字符寬的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:2115
+#: ../roundup/admin.py:2126
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:寬度"
 
-#: ../roundup/admin.py:2137
+#: ../roundup/admin.py:2148
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2173
+#: ../roundup/admin.py:2184
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1405,7 +1405,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2201
+#: ../roundup/admin.py:2212
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Merge existing tracker config with new settings.\n"
@@ -1416,34 +1416,34 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:549 :559 :730 :749
-#: ../roundup/admin.py:2210 ../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
+#: ../roundup/admin.py:2221 ../roundup/cgi/actions.py:891
+#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1104
+#: ../roundup/cgi/actions.py:1118 ../roundup/cgi/actions.py:891:902 :1104:1118
 #, python-format
 msgid "Error: %s"
 msgstr "錯誤:%s"
 
-#: ../roundup/admin.py:2242
+#: ../roundup/admin.py:2253
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:2248
+#: ../roundup/admin.py:2259
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2263
+#: ../roundup/admin.py:2274
 msgid "Enter tracker home: "
 msgstr "輸入tracker起始目錄:"
 
-#: ../roundup/admin.py:2292 ../roundup/admin.py:2296
-#: ../roundup/admin.py:2292:2296
+#: ../roundup/admin.py:2303 ../roundup/admin.py:2307
+#: ../roundup/admin.py:2303:2307
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "錯誤:不能打開tracker:%(message)s"
 
-#: ../roundup/admin.py:2344
+#: ../roundup/admin.py:2355
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1452,58 +1452,58 @@
 "Roundup %s 輸入就緒。\n"
 "敲入 \"help\" 獲得說明。"
 
-#: ../roundup/admin.py:2377
+#: ../roundup/admin.py:2388
 msgid "Note: command history and editing not available"
 msgstr "注意:命令歷史和編輯無效"
 
-#: ../roundup/admin.py:2383
+#: ../roundup/admin.py:2394
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:2396
+#: ../roundup/admin.py:2407
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改動。提交嗎(y/N)?"
 
-#: ../roundup/backends/back_anydbm.py:215
-#: ../roundup/backends/rdbms_common.py:928
+#: ../roundup/backends/back_anydbm.py:213
+#: ../roundup/backends/rdbms_common.py:926
 #, python-format
 msgid "Class \"%s\" already defined."
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:280
+#: ../roundup/backends/back_anydbm.py:278
 #: ../roundup/backends/sessions_dbm.py:61
 msgid "Couldn't identify database type"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:314
+#: ../roundup/backends/back_anydbm.py:312
 #, python-format
 msgid ""
 "Couldn't open database - the required module '%s' (as dbm.gnu) is not "
 "available"
 msgstr ""
 
-#: ../roundup/backends/back_anydbm.py:318
+#: ../roundup/backends/back_anydbm.py:316
 #, python-format
 msgid "Couldn't open database - the required module '%s' is not available"
 msgstr ""
 
 #: ../roundup/backends/back_anydbm.py:873
 #: ../roundup/backends/back_anydbm.py:886
-#: ../roundup/backends/back_anydbm.py:1160
-#: ../roundup/backends/back_anydbm.py:1195
-#: ../roundup/backends/back_anydbm.py:1424
-#: ../roundup/backends/back_anydbm.py:1442
-#: ../roundup/backends/back_anydbm.py:1489
-#: ../roundup/backends/back_anydbm.py:2135
+#: ../roundup/backends/back_anydbm.py:1162
+#: ../roundup/backends/back_anydbm.py:1197
+#: ../roundup/backends/back_anydbm.py:1426
+#: ../roundup/backends/back_anydbm.py:1444
+#: ../roundup/backends/back_anydbm.py:1492
+#: ../roundup/backends/back_anydbm.py:2138
 #: ../roundup/backends/back_anydbm.py:873:886
-#: ../roundup/backends/rdbms_common.py:1720
-#: ../roundup/backends/rdbms_common.py:1967
-#: ../roundup/backends/rdbms_common.py:2206
-#: ../roundup/backends/rdbms_common.py:2226
-#: ../roundup/backends/rdbms_common.py:2279
-#: ../roundup/backends/rdbms_common.py:3254
-#: ../roundup/backends/rdbms_common.py:1720:1967 :1160:1195 :1424:1442:1489
-#: :2135 :2206:2226 :2279:3254
+#: ../roundup/backends/rdbms_common.py:1721
+#: ../roundup/backends/rdbms_common.py:1972
+#: ../roundup/backends/rdbms_common.py:2211
+#: ../roundup/backends/rdbms_common.py:2231
+#: ../roundup/backends/rdbms_common.py:2293
+#: ../roundup/backends/rdbms_common.py:3268
+#: ../roundup/backends/rdbms_common.py:1721:1972 :1162:1197 :1426:1444:1492
+#: :2138 :2211:2231 :2293:3268
 msgid "Database open read-only"
 msgstr ""
 
@@ -1529,45 +1529,50 @@
 msgid "Unable to get lock after 10 retries on %s."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:632
+#: ../roundup/backends/rdbms_common.py:630
 #, python-format
 msgid "ALTER operation disallowed: %(old)r -> %(new)r."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:867
+#: ../roundup/backends/rdbms_common.py:865
 #, python-format
 msgid "CREATE operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:884
+#: ../roundup/backends/rdbms_common.py:882
 #, python-format
 msgid "DROP operation disallowed: \"%s\"."
 msgstr ""
 
-#: ../roundup/backends/rdbms_common.py:1863
+#: ../roundup/backends/rdbms_common.py:1864
 msgid "create"
 msgstr "建立"
 
-#: ../roundup/backends/rdbms_common.py:2038
+#: ../roundup/backends/rdbms_common.py:2043
 msgid "unlink"
 msgstr "解除"
 
-#: ../roundup/backends/rdbms_common.py:2042
+#: ../roundup/backends/rdbms_common.py:2047
 msgid "link"
 msgstr "鏈接"
 
-#: ../roundup/backends/rdbms_common.py:2187
+#: ../roundup/backends/rdbms_common.py:2192
 msgid "set"
 msgstr "設置"
 
-#: ../roundup/backends/rdbms_common.py:2216
+#: ../roundup/backends/rdbms_common.py:2221
 msgid "retired"
 msgstr "收回"
 
-#: ../roundup/backends/rdbms_common.py:2246
+#: ../roundup/backends/rdbms_common.py:2251
 msgid "restored"
 msgstr "恢復"
 
+#: ../roundup/backends/rdbms_common.py:2265
+#, fuzzy, python-format
+msgid "class %(cls)s: %(value)r is not an id"
+msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中"
+
 #: ../roundup/backends/sessions_redis.py:78
 #: ../roundup/backends/sessions_redis.py:97
 #: ../roundup/backends/sessions_redis.py:78:97
@@ -1650,10 +1655,10 @@
 msgstr "\"%(input)s\" 不是一個 ID (要求 %(classname)s ID)"
 
 #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266
-#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:833
-#: ../roundup/cgi/actions.py:880 ../roundup/cgi/actions.py:1084
-#: ../roundup/cgi/actions.py:1246 ../roundup/cgi/actions.py:228:266:1246
-#: :493:833 :880:1084
+#: ../roundup/cgi/actions.py:493 ../roundup/cgi/actions.py:838
+#: ../roundup/cgi/actions.py:885 ../roundup/cgi/actions.py:1089
+#: ../roundup/cgi/actions.py:1251 ../roundup/cgi/actions.py:228:266:1251
+#: :493:838 :885:1089
 #, fuzzy
 msgid "Invalid request"
 msgstr "無效的格式"
@@ -1706,8 +1711,8 @@
 msgid "Invalid integer: "
 msgstr "無效登錄"
 
-#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:735
-#: ../roundup/cgi/actions.py:531:735
+#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740
+#: ../roundup/cgi/actions.py:531:740
 #, python-format
 msgid "You do not have permission to create %(class)s"
 msgstr "你沒有權限來建立 %(class)s"
@@ -1717,8 +1722,8 @@
 msgid "Not enough values on line %(line)s"
 msgstr "在 %(line)s 行沒有足夠的值"
 
-#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:723
-#: ../roundup/cgi/actions.py:556:723
+#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728
+#: ../roundup/cgi/actions.py:556:728
 #, python-format
 msgid "You do not have permission to edit %(class)s"
 msgstr "你沒有權限來編輯 %(class)s"
@@ -1727,29 +1732,29 @@
 msgid "Items edited OK"
 msgstr "項目編輯成功"
 
-#: ../roundup/cgi/actions.py:671
+#: ../roundup/cgi/actions.py:676
 #, python-format
 msgid "%(class)s %(id)s %(properties)s edited ok"
 msgstr "%(class)s %(id)s %(properties)s 編輯成功"
 
-#: ../roundup/cgi/actions.py:689
+#: ../roundup/cgi/actions.py:694
 #, python-format
 msgid "%(class)s %(id)s created"
 msgstr "%(class)s %(id)s 被建立"
 
-#: ../roundup/cgi/actions.py:817
+#: ../roundup/cgi/actions.py:822
 #, python-format
 msgid ""
 "Edit Error: someone else has edited this %(klass)s (%(props)s). View <a "
 "target=\"_blank\" href=\"%(klass)s%(id)s\">their changes</a> in a new window."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:850
+#: ../roundup/cgi/actions.py:855
 #, python-format
 msgid "Edit Error: %s"
 msgstr "編輯錯誤:%s"
 
-#: ../roundup/cgi/actions.py:931
+#: ../roundup/cgi/actions.py:936
 msgid ""
 "Invalid One Time Key!\n"
 "(a Mozilla bug may cause this message to show up erroneously, please check "
@@ -1758,12 +1763,12 @@
 "Invalid One Time Key!\n"
 "(一個 Mozilla 的錯誤可能會錯誤地引發這個消息,你檢查你的郵件)"
 
-#: ../roundup/cgi/actions.py:972
+#: ../roundup/cgi/actions.py:977
 #, fuzzy, python-format
 msgid "Password reset for %s"
 msgstr "口令重設請求"
 
-#: ../roundup/cgi/actions.py:973
+#: ../roundup/cgi/actions.py:978
 #, python-format
 msgid ""
 "\n"
@@ -1772,29 +1777,29 @@
 "Your password is now: %(password)s\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:982
+#: ../roundup/cgi/actions.py:987
 #, python-format
 msgid "Password reset and email sent to %s"
 msgstr "口令被重設,郵件被發給 %s"
 
-#: ../roundup/cgi/actions.py:991
+#: ../roundup/cgi/actions.py:996
 msgid "Unknown username"
 msgstr "未知用戶名"
 
-#: ../roundup/cgi/actions.py:999
+#: ../roundup/cgi/actions.py:1004
 msgid "Unknown email address"
 msgstr "未知郵件地址"
 
-#: ../roundup/cgi/actions.py:1004
+#: ../roundup/cgi/actions.py:1009
 msgid "You need to specify a username or address"
 msgstr "你需要指定用戶名或地址"
 
-#: ../roundup/cgi/actions.py:1015
+#: ../roundup/cgi/actions.py:1020
 #, fuzzy, python-format
 msgid "Confirm reset of password for %s"
 msgstr "口令確認"
 
-#: ../roundup/cgi/actions.py:1016
+#: ../roundup/cgi/actions.py:1021
 #, python-format
 msgid ""
 "\n"
@@ -1808,31 +1813,31 @@
 "You should then receive another email with the new password.\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1029
+#: ../roundup/cgi/actions.py:1034
 #, python-format
 msgid "Email sent to primary notification address for %s."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1031
+#: ../roundup/cgi/actions.py:1036
 #, fuzzy, python-format
 msgid "Email sent to %s."
 msgstr "郵件發給 %s"
 
-#: ../roundup/cgi/actions.py:1046
+#: ../roundup/cgi/actions.py:1051
 msgid "You are now registered, welcome!"
 msgstr "你已經註冊,歡迎!"
 
-#: ../roundup/cgi/actions.py:1139
+#: ../roundup/cgi/actions.py:1144
 #, python-format
 msgid "Username '%s' is already used."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1163
+#: ../roundup/cgi/actions.py:1168
 #, python-format
 msgid "Complete your registration to %(tracker_name)s -- key %(key)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1167
+#: ../roundup/cgi/actions.py:1172
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1848,12 +1853,12 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1181
+#: ../roundup/cgi/actions.py:1186
 #, python-format
 msgid "Complete your registration to %s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1182
+#: ../roundup/cgi/actions.py:1187
 #, python-format
 msgid ""
 "To complete your registration of the user \"%(name)s\" with\n"
@@ -1863,44 +1868,44 @@
 "\n"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1206
+#: ../roundup/cgi/actions.py:1211
 msgid "It is not permitted to supply roles at registration."
 msgstr "不允許在註冊時指供角色。"
 
-#: ../roundup/cgi/actions.py:1220
+#: ../roundup/cgi/actions.py:1225
 msgid "You are logged out"
 msgstr "你已經註銷"
 
-#: ../roundup/cgi/actions.py:1250
+#: ../roundup/cgi/actions.py:1255
 msgid "Username required"
 msgstr "需要用戶名"
 
-#: ../roundup/cgi/actions.py:1354
+#: ../roundup/cgi/actions.py:1359
 #, python-format
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1477
+#: ../roundup/cgi/actions.py:1482
 #, python-format
 msgid "Logins occurring too fast. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1515 ../roundup/cgi/actions.py:1526
-#: ../roundup/cgi/actions.py:1515:1526
+#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531
+#: ../roundup/cgi/actions.py:1520:1531
 msgid "Invalid login"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/actions.py:1532
+#: ../roundup/cgi/actions.py:1537
 msgid "You do not have permission to login"
 msgstr "你沒有登錄的權限"
 
-#: ../roundup/cgi/actions.py:1577 ../roundup/cgi/actions.py:1757
-#: ../roundup/cgi/actions.py:1577:1757
+#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762
+#: ../roundup/cgi/actions.py:1582:1762
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1822
+#: ../roundup/cgi/actions.py:1827
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "你沒有權限來編輯 %(class)s"
@@ -2024,8 +2029,8 @@
 msgid "Unrecognized charset: %r"
 msgstr "無法識別的字符集:%r"
 
-#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2394
-#: ../roundup/cgi/client.py:1381:2394
+#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396
+#: ../roundup/cgi/client.py:1381:2396
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
@@ -2103,58 +2108,59 @@
 
 #: ../roundup/cgi/client.py:1679
 #, python-format
-msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
+msgid ""
+"csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s."
 msgstr ""
 
 #: ../roundup/cgi/client.py:1720
 #, python-format
-msgid "Required csrf field missing for user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1722 ../roundup/cgi/client.py:1749
-#: ../roundup/cgi/client.py:1766 ../roundup/cgi/client.py:1722:1749:1766
+msgid "Required csrf field missing for user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1723 ../roundup/cgi/client.py:1751
+#: ../roundup/cgi/client.py:1768 ../roundup/cgi/client.py:1723:1751:1768
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1726
-#, python-format
-msgid "csrf field not supplied by user%s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1738
+#: ../roundup/cgi/client.py:1728
+#, python-format
+msgid "csrf field not supplied by user%(userid)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1740
 #, 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:1756
+#: ../roundup/cgi/client.py:1758
 #, 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:1948
+#: ../roundup/cgi/client.py:1950
 #, fuzzy
 msgid "You are not allowed to view this file."
 msgstr "你不允許查看此頁"
 
-#: ../roundup/cgi/client.py:2272
+#: ../roundup/cgi/client.py:2274
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2276
+#: ../roundup/cgi/client.py:2278
 #, 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:2815
+#: ../roundup/cgi/client.py:2817
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2218,137 +2224,137 @@
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "你不允許 %(action)s 類別 %(class)s 的項目"
 
-#: ../roundup/cgi/templating.py:916
+#: ../roundup/cgi/templating.py:892
 msgid "(list)"
 msgstr "(列表)"
 
-#: ../roundup/cgi/templating.py:991
+#: ../roundup/cgi/templating.py:975
 msgid "Submit New Entry"
 msgstr "提交新的項"
 
-#: ../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
+#: ../roundup/cgi/templating.py:997 ../roundup/cgi/templating.py:1174
+#: ../roundup/cgi/templating.py:1809 ../roundup/cgi/templating.py:1840
+#: ../roundup/cgi/templating.py:1861 ../roundup/cgi/templating.py:1899
+#: ../roundup/cgi/templating.py:1952 ../roundup/cgi/templating.py:1976
+#: ../roundup/cgi/templating.py:1983 ../roundup/cgi/templating.py:2020
+#: ../roundup/cgi/templating.py:2077 ../roundup/cgi/templating.py:2115
+#: ../roundup/cgi/templating.py:2215 ../roundup/cgi/templating.py:2236
+#: ../roundup/cgi/templating.py:2357 ../roundup/cgi/templating.py:2377
+#: ../roundup/cgi/templating.py:2399 ../roundup/cgi/templating.py:2442
+#: ../roundup/cgi/templating.py:2452 ../roundup/cgi/templating.py:2517
+#: ../roundup/cgi/templating.py:2820 ../roundup/cgi/templating.py:997:1174
+#: :1809:1840 :1861:1899 :1952:1976 :1983:2020 :2077:2115 :2215:2236 :2357:2377
+#: :2399:2442 :2452:2517:2820
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1014
+#: ../roundup/cgi/templating.py:998
 msgid "New node - no history"
 msgstr "新記錄 - 無歷史"
 
-#: ../roundup/cgi/templating.py:1154
+#: ../roundup/cgi/templating.py:1139
 msgid "Submit Changes"
 msgstr "提交變動"
 
-#: ../roundup/cgi/templating.py:1232
+#: ../roundup/cgi/templating.py:1217
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指示的屬性不再存在</em>"
 
-#: ../roundup/cgi/templating.py:1268
+#: ../roundup/cgi/templating.py:1253
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "鏈接的類別 %(classname)s 不再存在"
 
-#: ../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
+#: ../roundup/cgi/templating.py:1290 ../roundup/cgi/templating.py:1320
+#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829
+#: ../roundup/cgi/templating.py:1290:1320 :2526:2829
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:872 :893
-#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
-#: ../roundup/cgi/templating.py:1309:1338
+#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323
+#: ../roundup/cgi/templating.py:1294:1323
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>鏈接的結點不再存在</strike>"
 
-#: ../roundup/cgi/templating.py:1400
+#: ../roundup/cgi/templating.py:1385
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (無值)"
 
-#: ../roundup/cgi/templating.py:1416
+#: ../roundup/cgi/templating.py:1401
 #, 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:1429
+#: ../roundup/cgi/templating.py:1414
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>注意:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1423
 msgid "History"
 msgstr "歷史"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1425
 msgid "<th>Date</th>"
 msgstr "<th>日期</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1426
 msgid "<th>User</th>"
 msgstr "<th>用戶</th>"
 
-#: ../roundup/cgi/templating.py:1442
+#: ../roundup/cgi/templating.py:1427
 msgid "<th>Action</th>"
 msgstr "<th>動作</th>"
 
-#: ../roundup/cgi/templating.py:1443
+#: ../roundup/cgi/templating.py:1428
 msgid "<th>Args</th>"
 msgstr "<th>參數</th>"
 
-#: ../roundup/cgi/templating.py:1494
+#: ../roundup/cgi/templating.py:1479
 #, fuzzy, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s 被建立"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
-#: ../roundup/cgi/templating.py:1382:2125:2160
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1367:2119:2154
 msgid "No"
 msgstr "否"
 
-#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
-#: ../roundup/cgi/templating.py:1382:2125:2154
+#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148
+#: ../roundup/cgi/templating.py:1367:2119:2148
 msgid "Yes"
 msgstr "是"
 
-#: ../roundup/cgi/templating.py:2286
+#: ../roundup/cgi/templating.py:2315
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr "DateHTMLProperty 的預設值或者是 DateHTMLProperty 或字符串的日期表示。"
 
-#: ../roundup/cgi/templating.py:2468
+#: ../roundup/cgi/templating.py:2497
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2479
+#: ../roundup/cgi/templating.py:2508
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2584
+#: ../roundup/cgi/templating.py:2613
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未選擇 -</option>"
 
-#: ../roundup/cgi/templating.py:3745
+#: ../roundup/cgi/templating.py:3777
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3795
+#: ../roundup/cgi/templating.py:3827
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2506,54 +2512,54 @@
 msgid "in %s"
 msgstr "在 %s"
 
-#: ../roundup/hyperdb.py:120
+#: ../roundup/hyperdb.py:126
 #, fuzzy, python-format
 msgid "property %(property)s: %(errormsg)s"
 msgstr "錯誤:%s: %s"
 
-#: ../roundup/hyperdb.py:149
+#: ../roundup/hyperdb.py:161
 #, python-format
 msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:172
+#: ../roundup/hyperdb.py:184
 #, python-format
 msgid ""
 "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)"
 msgstr ""
 
-#: ../roundup/hyperdb.py:434
+#: ../roundup/hyperdb.py:446
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a number"
 msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中"
 
-#: ../roundup/hyperdb.py:448
+#: ../roundup/hyperdb.py:460
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not an integer"
 msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中"
 
-#: ../roundup/hyperdb.py:470
+#: ../roundup/hyperdb.py:482
 #, python-format
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1499 ../roundup/hyperdb.py:1507
-#: ../roundup/hyperdb.py:1499:1507
+#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523
+#: ../roundup/hyperdb.py:1515:1523
 #, fuzzy, python-format
 msgid "Not a property name: %s"
 msgstr "不是日期格式:%s"
 
-#: ../roundup/hyperdb.py:2038
+#: ../roundup/hyperdb.py:2054
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中"
 
-#: ../roundup/hyperdb.py:2044
+#: ../roundup/hyperdb.py:2060
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2079
+#: ../roundup/hyperdb.py:2095
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
@@ -2811,60 +2817,60 @@
 "are: %(stack)s"
 msgstr ""
 
-#: ../roundup/pygettext.py:401
+#: ../roundup/pygettext.py:400
 #, python-format
 msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
 msgstr ""
 
-#: ../roundup/pygettext.py:457
+#: ../roundup/pygettext.py:456
 #, python-format
 msgid "# File: %(filename)s, line: %(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:464
+#: ../roundup/pygettext.py:463
 #, python-format
 msgid " %(filename)s:%(lineno)d"
 msgstr ""
 
-#: ../roundup/pygettext.py:540
+#: ../roundup/pygettext.py:539
 #, fuzzy, python-format
 msgid "Invalid value for --style: %s"
 msgstr "無效登錄"
 
-#: ../roundup/pygettext.py:548
+#: ../roundup/pygettext.py:547
 #, python-format
 msgid "pygettext.py (xgettext for Python) %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:554
+#: ../roundup/pygettext.py:553
 #, python-format
 msgid "--width argument must be an integer: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:582
+#: ../roundup/pygettext.py:581
 #, python-format
 msgid "Can't read --exclude-file: %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:601
+#: ../roundup/pygettext.py:600
 msgid "Reading standard input"
 msgstr ""
 
-#: ../roundup/pygettext.py:606
+#: ../roundup/pygettext.py:605
 #, python-format
 msgid "Working on %s"
 msgstr ""
 
-#: ../roundup/pygettext.py:640
+#: ../roundup/pygettext.py:639
 msgid "a unicode string"
 msgstr ""
 
+#: ../roundup/pygettext.py:641
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
 #: ../roundup/pygettext.py:642
-#, python-format
-msgid "*** Seen unexpected token \"%(token)s\""
-msgstr ""
-
-#: ../roundup/pygettext.py:643
 msgid "morethanonestring"
 msgstr ""
 
@@ -2985,32 +2991,32 @@
 msgid "creator"
 msgstr "建立者"
 
-#: ../roundup/roundupdb.py:426
+#: ../roundup/roundupdb.py:447
 #, python-format
 msgid "No key for \"%(adr)s\" in keyring"
 msgstr ""
 
-#: ../roundup/roundupdb.py:504
+#: ../roundup/roundupdb.py:525
 #, python-format
 msgid "New submission from %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:507
+#: ../roundup/roundupdb.py:528
 #, python-format
 msgid "%(authname)s%(authaddr)s added the comment:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:510
+#: ../roundup/roundupdb.py:531
 #, python-format
 msgid "Change by %(authname)s%(authaddr)s:"
 msgstr ""
 
-#: ../roundup/roundupdb.py:529
+#: ../roundup/roundupdb.py:550
 #, python-format
 msgid "File '%(filename)s' not attached - you can download it from %(link)s."
 msgstr ""
 
-#: ../roundup/roundupdb.py:904
+#: ../roundup/roundupdb.py:925
 #, python-format
 msgid ""
 "\n"
@@ -3114,58 +3120,58 @@
 "<html><head><title>Roundup tracker 索引</title></head>\n"
 "<body><h1>Roundup tracker 索引</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:598
+#: ../roundup/scripts/roundup_server.py:602
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/scripts/roundup_server.py:610
+#: ../roundup/scripts/roundup_server.py:614
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "警告:忽略 \"-g\" 參數,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:616
+#: ../roundup/scripts/roundup_server.py:620
 msgid "Can't change groups - no grp module"
 msgstr "不能修改組 - 無 grp 模塊"
 
-#: ../roundup/scripts/roundup_server.py:625
+#: ../roundup/scripts/roundup_server.py:629
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "組 %(group)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:637
+#: ../roundup/scripts/roundup_server.py:641
 msgid "Can't run as root!"
 msgstr "不能以 root 運行!"
 
-#: ../roundup/scripts/roundup_server.py:640
+#: ../roundup/scripts/roundup_server.py:644
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "警告:忽略 \"-u\" 參數,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:646
+#: ../roundup/scripts/roundup_server.py:650
 msgid "Can't change users - no pwd module"
 msgstr "不能修改用戶 - 無 pwd 模塊"
 
-#: ../roundup/scripts/roundup_server.py:655
+#: ../roundup/scripts/roundup_server.py:659
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "用戶 %(user)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:867
+#: ../roundup/scripts/roundup_server.py:871
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:895
+#: ../roundup/scripts/roundup_server.py:899
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "無法綁定到端口 %s, 端口已經被佔用。"
 
-#: ../roundup/scripts/roundup_server.py:899
+#: ../roundup/scripts/roundup_server.py:903
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "無法綁定到端口 %s, 端口已經被佔用。"
 
-#: ../roundup/scripts/roundup_server.py:978
+#: ../roundup/scripts/roundup_server.py:982
 #, fuzzy
 msgid ""
 " -c <Command>  Windows Service options.\n"
@@ -3182,7 +3188,7 @@
 "               變量上配置一個tracker。這個選項與其經選項是互斥的。打入\n"
 "               \"roundup-server -c help\" 來瞭解Windows服務的規範。"
 
-#: ../roundup/scripts/roundup_server.py:985
+#: ../roundup/scripts/roundup_server.py:989
 #, fuzzy
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
@@ -3198,7 +3204,7 @@
 "去。\n"
 "               如果使用了 -d 選項,則 -l 選項 *必須* 要指定。"
 
-#: ../roundup/scripts/roundup_server.py:993
+#: ../roundup/scripts/roundup_server.py:997
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3300,20 +3306,24 @@
 "   意數量的 name=home 對。要確保 name 部分不能包括任何非url安全的\n"
 "   字符,像空格,因為它們會把IE搞亂。\n"
 
-#: ../roundup/scripts/roundup_server.py:1173
+#: ../roundup/scripts/roundup_server.py:1177
 msgid "Instances must be name=home"
 msgstr "實例必須是 實例名=實例路徑"
 
-#: ../roundup/scripts/roundup_server.py:1187
+#: ../roundup/scripts/roundup_server.py:1191
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "配置保存到 %s"
 
-#: ../roundup/scripts/roundup_server.py:1205
+#: ../roundup/scripts/roundup_server.py:1206
+msgid "If you specify a PID file you must use -l or -L."
+msgstr ""
+
+#: ../roundup/scripts/roundup_server.py:1212
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr "抱歉,在這個操作系統上不能以守護進程的方式來運行服務"
 
-#: ../roundup/scripts/roundup_server.py:1225
+#: ../roundup/scripts/roundup_server.py:1232
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server 啟動於 %(HOST)s:%(PORT)s"
@@ -4586,46 +4596,46 @@
 msgid "clear this message"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:257
-#: ../share/roundup/templates/classic/html/page.html:270
-#: ../share/roundup/templates/classic/html/page.html:288
-#: ../share/roundup/templates/classic/html/page.html:302
-#: ../share/roundup/templates/devel/html/page.html:316
-#: ../share/roundup/templates/devel/html/page.html:329
-#: ../share/roundup/templates/devel/html/page.html:347
-#: ../share/roundup/templates/devel/html/page.html:361
-#: ../share/roundup/templates/minimal/html/page.html:239
-#: ../share/roundup/templates/minimal/html/page.html:254
-#: ../share/roundup/templates/minimal/html/page.html:268
-#: ../share/roundup/templates/responsive/html/page.html:331
-#: ../share/roundup/templates/responsive/html/page.html:344
-#: ../share/roundup/templates/responsive/html/page.html:362
-#: ../share/roundup/templates/responsive/html/page.html:376
+#: ../share/roundup/templates/classic/html/page.html:258
+#: ../share/roundup/templates/classic/html/page.html:271
+#: ../share/roundup/templates/classic/html/page.html:289
+#: ../share/roundup/templates/classic/html/page.html:303
+#: ../share/roundup/templates/devel/html/page.html:317
+#: ../share/roundup/templates/devel/html/page.html:330
+#: ../share/roundup/templates/devel/html/page.html:348
+#: ../share/roundup/templates/devel/html/page.html:362
+#: ../share/roundup/templates/minimal/html/page.html:240
+#: ../share/roundup/templates/minimal/html/page.html:255
+#: ../share/roundup/templates/minimal/html/page.html:269
+#: ../share/roundup/templates/responsive/html/page.html:332
+#: ../share/roundup/templates/responsive/html/page.html:345
+#: ../share/roundup/templates/responsive/html/page.html:363
+#: ../share/roundup/templates/responsive/html/page.html:377
 msgid "don't care"
 msgstr "不用關心"
 
-#: ../share/roundup/templates/classic/html/page.html:259
-#: ../share/roundup/templates/classic/html/page.html:272
-#: ../share/roundup/templates/classic/html/page.html:290
-#: ../share/roundup/templates/classic/html/page.html:303
-#: ../share/roundup/templates/devel/html/page.html:318
-#: ../share/roundup/templates/devel/html/page.html:331
-#: ../share/roundup/templates/devel/html/page.html:349
-#: ../share/roundup/templates/devel/html/page.html:362
-#: ../share/roundup/templates/minimal/html/page.html:241
-#: ../share/roundup/templates/minimal/html/page.html:256
-#: ../share/roundup/templates/minimal/html/page.html:269
-#: ../share/roundup/templates/responsive/html/page.html:333
-#: ../share/roundup/templates/responsive/html/page.html:346
-#: ../share/roundup/templates/responsive/html/page.html:364
-#: ../share/roundup/templates/responsive/html/page.html:377
+#: ../share/roundup/templates/classic/html/page.html:260
+#: ../share/roundup/templates/classic/html/page.html:273
+#: ../share/roundup/templates/classic/html/page.html:291
+#: ../share/roundup/templates/classic/html/page.html:304
+#: ../share/roundup/templates/devel/html/page.html:319
+#: ../share/roundup/templates/devel/html/page.html:332
+#: ../share/roundup/templates/devel/html/page.html:350
+#: ../share/roundup/templates/devel/html/page.html:363
+#: ../share/roundup/templates/minimal/html/page.html:242
+#: ../share/roundup/templates/minimal/html/page.html:257
+#: ../share/roundup/templates/minimal/html/page.html:270
+#: ../share/roundup/templates/responsive/html/page.html:334
+#: ../share/roundup/templates/responsive/html/page.html:347
+#: ../share/roundup/templates/responsive/html/page.html:365
+#: ../share/roundup/templates/responsive/html/page.html:378
 msgid "------------"
 msgstr ""
 
-#: ../share/roundup/templates/classic/html/page.html:335
-#: ../share/roundup/templates/devel/html/page.html:390
-#: ../share/roundup/templates/minimal/html/page.html:297
-#: ../share/roundup/templates/responsive/html/page.html:405
+#: ../share/roundup/templates/classic/html/page.html:336
+#: ../share/roundup/templates/devel/html/page.html:391
+#: ../share/roundup/templates/minimal/html/page.html:298
+#: ../share/roundup/templates/responsive/html/page.html:406
 msgid "no value"
 msgstr "無值"
 
--- a/roundup/__init__.py	Wed Jun 11 16:19:00 2025 -0400
+++ b/roundup/__init__.py	Wed Jun 11 17:04:51 2025 -0400
@@ -67,6 +67,6 @@
 '''
 __docformat__ = 'restructuredtext'
 
-__version__ = '2.5.0'
+__version__ = '2.5.0b1'
 
 # vim: set filetype=python ts=4 sw=4 et si
--- a/scripts/Docker/Dockerfile	Wed Jun 11 16:19:00 2025 -0400
+++ b/scripts/Docker/Dockerfile	Wed Jun 11 17:04:51 2025 -0400
@@ -233,7 +233,7 @@
 LABEL "org.opencontainers.image.vendor"="Roundup Issue Tracker Team" \
       "org.opencontainers.image.title"="Roundup Issue Tracker" \
       "org.opencontainers.image.description"="Roundup Issue Tracker with multi-backend support installed via $source with python version $pythonversion" \
-      "org.opencontainers.image.version"="2.4.0" \
+      "org.opencontainers.image.version"="2.5.0beta1" \
       "org.opencontainers.image.authors"="roundup-devel@lists.sourceforge.net" \
       "org.opencontainers.image.licenses"="MIT AND ZPL-2.0 AND Python-2.0" \
       "org.opencontainers.image.documentation"="https://www.roundup-tracker.org/docs/installation.html" \
--- a/setup.py	Wed Jun 11 16:19:00 2025 -0400
+++ b/setup.py	Wed Jun 11 17:04:51 2025 -0400
@@ -224,8 +224,8 @@
           python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
           url='https://www.roundup-tracker.org',
           download_url='https://pypi.org/project/roundup',
-          classifiers=['Development Status :: 5 - Production/Stable',
-                       #'Development Status :: 4 - Beta',
+          classifiers=[#'Development Status :: 5 - Production/Stable',
+                       'Development Status :: 4 - Beta',
                        #'Development Status :: 3 - Alpha',
                        'Environment :: Console',
                        'Environment :: Web Environment',

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