diff --git a/.codecov.yml b/.codecov.yml index e0d835df0..40663c7f5 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -9,6 +9,5 @@ ignore: - "roundup/cgi/TAL/talgettext.py" # utility command - "roundup/cgi/TAL/DummyEngine.py" # test harness - "roundup/cgi/apache.py" # mod_python is deprecated - - "roundup/install_util.py" # another build utlity - "roundup/dist" # more build utils - "roundup/test" # code used for testing diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fc75e2ae2..79414b360 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,6 +18,8 @@ updates: directory: "/" schedule: interval: "weekly" + cooldown: + default-days: 7 # - package-ecosystem: "docker" # directory: "/scripts/Docker" # target-branch: "master" diff --git a/.github/workflows/anchore.yml b/.github/workflows/anchore.yml index 7eff99f17..7f62ff8d8 100644 --- a/.github/workflows/anchore.yml +++ b/.github/workflows/anchore.yml @@ -37,22 +37,26 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Build the Docker image run: docker pull python:3-alpine; docker build . --file scripts/Docker/Dockerfile --tag localbuild/testimage:latest - name: List the Docker image run: docker image ls - name: Run the Anchore scan action itself with GitHub Advanced Security code scanning integration enabled - uses: anchore/scan-action@1638637db639e0ade3258b51db49a9a137574c3e # 6.5.1 + uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0 id: scan with: image: "localbuild/testimage:latest" fail-build: true - name: Upload Anchore Scan Report if: always() - uses: github/codeql-action/upload-sarif@b1e4dc3db58c9601794e22a9f6d28d45461b9dbf # v2.22.0 + uses: github/codeql-action/upload-sarif@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 with: sarif_file: ${{ steps.scan.outputs.sarif }} - name: Inspect action SARIF report if: always() - run: cat ${{ steps.scan.outputs.sarif }} + run: cat ${STEPS_SCAN_OUTPUTS_SARIF} + env: + STEPS_SCAN_OUTPUTS_SARIF: ${{ steps.scan.outputs.sarif }} diff --git a/.github/workflows/build-xapian.yml b/.github/workflows/build-xapian.yml index 4d6edf6dc..318683529 100644 --- a/.github/workflows/build-xapian.yml +++ b/.github/workflows/build-xapian.yml @@ -42,11 +42,13 @@ jobs: # if: {{ false }} # continue running if step fails # continue-on-error: true - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false # Setup version of Python to use - name: Set Up Python 3.13 - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: 3.13 allow-prereleases: true @@ -69,7 +71,7 @@ jobs: # allow remote ssh into the CI container. I need this to debug # some xfail cases - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 + uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24 if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} timeout-minutes: 60 with: diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 8e88da76c..bb2962126 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -45,6 +45,12 @@ jobs: if: "!contains(github.event.head_commit.message, 'no-github-ci')" + # run the finalizer for coveralls even if one or more + # experimental matrix runs fail. + # moving it above strategy produces unexpected value false + # moving it below (here) produces unexpected value ''. + continue-on-error: ${{ matrix.experimental }} + strategy: fail-fast: false max-parallel: 4 @@ -52,18 +58,14 @@ jobs: # Run in all these versions of Python python-version: # - "2.7" + - "3.14" + - "3.14t" - "3.13" - # - 3.6 run via include on ubuntu 20.04 - # - "3.7" - # - "3.8" run via include for ubuntu-22.04 - # - "3.9" - - "3.10" - # - "3.11" - "3.12" + - "3.10" # use for multiple os or ubuntu versions #os: [ubuntu-latest, macos-latest, windows-latest] - # ubuntu latest 22.04 12/2022 # ubuntu latest 24.04 12/2024 os: [ubuntu-latest] @@ -74,34 +76,22 @@ jobs: # example: if this version fails the jobs still succeeds # allow-prereleases in setup-python allows alpha/beta # releases to run. Also allow free threaded python testing - - python-version: 3.13t + - python-version: 3.15-dev os: ubuntu-24.04 experimental: true - - # 3.7 not available on new 22.04 runners, so run on 22.04 ubuntu - - python-version: 3.7 - os: ubuntu-22.04 - - # 3.8 not available on new 24.04 runners, so run on 22.04 ubuntu - - python-version: 3.8 - os: ubuntu-22.04 + - python-version: 3.15t-dev + os: ubuntu-24.04 + experimental: true #exclude: # skip all python versions on explicit 20.04/24.04 unless # explicitly included - #- os: ubuntu-20.04 #- os: ubuntu-24.04 # disable when testing ubuntu-24.04 to speed up # runs. # - os: ubuntu-latest - # run the finalizer for coveralls even if one or more - # experimental matrix runs fail. - # moving it above strategy produces unexpected value false - # moving it below (here) produces unexpected value ''. - # continue-on-error: ${{ matrix.experimental }} - env: # get colorized pytest output even without a controlling tty PYTEST_ADDOPTS: "--color=yes" @@ -116,11 +106,13 @@ jobs: # if: {{ false }} # continue running if step fails # continue-on-error: true - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false # Setup version of Python to use - name: Set Up Python ${{ matrix.python-version }} - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: ${{ matrix.python-version }} allow-prereleases: true @@ -146,16 +138,18 @@ jobs: - name: Update pip run: python -m pip install --upgrade pip - # note pytest-env is not needed for redis password as there is - # no password on CI's redis. + # note pytest-env is not required for redis password as there is + # no password on CI's redis. But pytest logs a warning if it's + # missing. pytest-subtests isn't needed with + # pytest 9.0.0+, but 9.0 only supports 3.10+ so include for 3.7+. - name: Install pytest and other packages needed for running tests - run: pip install flake8 hypothesis mock pytest pytest-cov requests sphinx-tabs + run: pip install flake8 hypothesis mock pytest pytest-cov pytest-env pytest-subtests requests sphinx-tabs # https://github.com/mxschmitt/action-tmate # allow remote ssh into the CI container. I need this to debug # some xfail cases - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 + uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24 if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} timeout-minutes: 10 with: @@ -228,7 +222,7 @@ jobs: # allow remote ssh into the CI container. I need this to debug # some xfail cases - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 + uses: mxschmitt/action-tmate@35b54afac29c97fb54faba5b513f8fbd1882f113 # v3.24 if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} timeout-minutes: 10 with: @@ -240,23 +234,19 @@ jobs: # pygments for markdown2 to highlight code blocks pip install markdown2 pygments # docutils for ReStructuredText - pip install beautifulsoup4 brotli docutils jinja2 \ + pip install beautifulsoup4 brotli docutils gpg jinja2 \ mistune==0.8.4 pyjwt pytz whoosh - # gpg on PyPi is currently broken with newer OS platform - # ubuntu 24.04 - # used for newer Python versions. Temporarily use the - # testing index, which contains a newer version of the - # bindings on 24.04 or released version for other OS - # versions. See issue2551368. 'pip install gpg' should work - # at some point when things are released to the production repo. - pip install --index-url https://test.pypi.org/simple/ \ - --extra-index-url https://pypi.org/simple gpg; - name: Install aux packages that need versions differences # if zstd fails install, keep going with test, don't abort run: | set -xv pip install zstd || true + # justhtml supports python 3.10 or newer according to pypi + # page, but will install on 3.8 (and maybe 3.9) but formats + # differently. So skip install if before 3.10. + if echo $PYTHON_VERSION | grep '^3\...'; then + pip install justhtml || true; fi if [[ "$PYTHON_VERSION" != "2."* ]]; then pip install Markdown; fi @@ -311,7 +301,7 @@ jobs: -W "ignore:'U' mode::docutils.io" \ -W "ignore:unclosed:ResourceWarning:roundup.roundup.demo" \ -W "ignore:unclosed file:ResourceWarning:enum" \ - -v test/ --cov=roundup + -v test/ --cov=roundup coverage lcov else # python2 case @@ -323,7 +313,7 @@ jobs: - name: Upload coverage to Codecov # see: https://github.com/codecov/codecov-action#usage - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: verbose: true token: ${{ secrets.CODECOV_TOKEN }} @@ -331,7 +321,7 @@ jobs: - name: Upload coverage to Coveralls # python 2.7 and 3.6 versions of coverage can't produce lcov files. if: matrix.python-version != '2.7' && matrix.python-version != '3.6' - uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 + uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7 with: github-token: ${{ secrets.GITHUB_TOKEN }} path-to-lcov: coverage.lcov @@ -367,7 +357,7 @@ jobs: steps: - name: Coveralls Finished - uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6 + uses: coverallsapp/github-action@5cbfd81b66ca5d10c19b062c04de0199c215fb6e # v2.3.7 with: github-token: ${{ secrets.github_token }} parallel-finished: true diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0b214cc78..918184dc3 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -49,11 +49,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@b1e4dc3db58c9601794e22a9f6d28d45461b9dbf # v2.22.0 + uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -64,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@b1e4dc3db58c9601794e22a9f6d28d45461b9dbf # v2.22.0 + uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -78,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b1e4dc3db58c9601794e22a9f6d28d45461b9dbf # v2.22.0 + uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index c6a5547e3..fcd4b7926 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -35,12 +35,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v5.2.1 + uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 with: results_file: results.sarif results_format: sarif @@ -62,7 +62,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif @@ -70,6 +70,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b1e4dc3db58c9601794e22a9f6d28d45461b9dbf # v2.22.0 + uses: github/codeql-action/upload-sarif@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0 with: sarif_file: results.sarif diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml new file mode 100644 index 000000000..0c05bf6b0 --- /dev/null +++ b/.github/workflows/zizmor.yml @@ -0,0 +1,23 @@ +name: GitHub Actions Security Analysis with zizmor + +on: + push: + branches: ["main"] + pull_request: + branches: ["**"] + +permissions: {} + +jobs: + zizmor: + runs-on: ubuntu-latest + permissions: + security-events: write + steps: + - name: Checkout repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Run zizmor + uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7 diff --git a/.hgtags b/.hgtags index e0d4f7130..4a5f11fac 100644 --- a/.hgtags +++ b/.hgtags @@ -156,3 +156,5 @@ c10df5dfed95dc37e8092861886bf66614b77062 2.4.0b1 4dfc07ee489ad000c8ffe7ee97b506c94fae6774 2.4.0 3bf6ad421347c87ae3a6bebe288f8f1dfa7bd6ba 2.5.0b1 c7a2e01793cdb5228d44df085e3b2f8a73e51c28 2.5.0 +174e6163e178598edd2c33c8c051aa03bd3dbf04 2.6.0b1 +d7abd2cf2be584e4869770dfc616c31d249d8b9e 2.6.0 diff --git a/CHANGES.txt b/CHANGES.txt index 122e83527..833178217 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,14 +6,10 @@ and template changes not listed here. Each entry has the developer who committed the change in brackets. Many entries without name were done by Richard Jones. -**IMPORTANT** The v1.5.x releases of Roundup were the last to support -Python v2.5 and v2.6. Starting with the v1.6 releases of Roundup -v2.7.2 or later are required to run newer releases of Roundup. -Roundup 2.0 supports Python 3.4 and later. Roundup 2.1.0 supports -python 3.6 or newer (3.4/3.5 might work, but they are not tested). -Roundup 2.4.0 is the last release to support Python 2. +**IMPORTANT** Roundup 2.6 supports Python 3.10 or newer. +Roundup 2.4.0 was the last release to support Python 2. -2026-XX-XX 2.6.0 +2026-07-13 2.6.0 Fixed: @@ -23,12 +19,161 @@ Fixed: roundup.cgi.exceptions. Also it now inherits from HTTPException rather than Exception since it is an HTTP exception. (John Rouillard) +- cleaned up repo. Close obsolete branches and close a split head due + to an identical merge in two different working copies. (John + Rouillard) +- in roundup-admin, using 'pragma history_length interactively now + sets readline history length. Using -P history_length=10 on the + command line always worked. (John Rouillard) +- enhanced error reporting for errors in ini style logging + configuration. (John Rouillard) +- fix bogus javascript emitted by user_src_input macro. (John + Rouillard) +- replaced hostname localhost with 127.0.0.1 in docker healthcheck + script. Found/patch by Norbert Schlemmer. (John Rouillard) +- change some internal classes to use __slots__ for hopefully a small + performance improvement. (John Rouillard) +- issue2551413 - Broken MultiLink columns in CSV export. CSV export of + a multilink link "messages" that does not have a 'name' property + causes a crash. (found/fix by cmeerw; commit and better handling of + non-labeled multilink by John Rouillard) +- in cgi/client.py, set self.language attribute when translator passed + into Client(). (John Rouillard) +- issue2551393 - Named searches lose their name in title when next + page is selected. (John Rouillard) +- code cleanup replace bare except: with except Exception:. (patch by + Sense_wang (haosenwang1018) applied by John Rouillard) +- handle "null" values in json objects sent to a rest endpoint by + filtering them from the object before processing. A "null" value + will not unset an attribute. The 'remove' action using the + PATCH verb can unset the value. Before this change "null" values + retrieved from the REST interface would cause errors when sent + using POST or PUT verbs. Also guard against password being set to + None. (John Rouillard) +- change the html templates so that the password is not required if + the ``login_empty_passwords`` setting is enabled in ``config.ini``. + Directions for your tracker are in upgrading.txt. (John Rouillard) +- fix traceback displayed when roundup-admin install was used with + invalid settings for config.ini. It now reports the error and + provides the usage output. Also usage output starts with a newline + to provide a blank line between the command and the output to + improve readability. (John Rouillard) +- fix bug in 2.5.0 where roundup-admin import (or importtable) fails + to properly set the next available id for the class. (John Rouillard + broke it and fixed it 8-)) +- refactor mime detection/handling in the rest interface. Better + supports some mime types, ads default mime type for files without a + mime type (e.g. message contents). Cleaner code. (John Rouillard) +- run hexora and mitigate/fix some medium sev and above. (John Rouillard) +- Return 400 if environment or header variables + have values with characters outside of the printable ascii range + (32-127). Applies to roundup-server and roundup-cgi. wsgi and Zope + depend on the hosting server for sanitizing. Se waitress wsgi server + bug: + https://github.com/Pylons/waitress/security/advisories/GHSA-m5ff-3wj3-8ph4 + (John Rouillard) +- Cleanups/minor enhancements to roundup.cgi script. (John Rouillard) +- fix back_anydm::Class::get() method to properly return default value + if requested property is set to None. This should fix missing text + indexing for the anydbm backend. (John Rouillard) +- ruff driven cleanups/refactor of indexer* files. (John Rouillard) +- remove ``roundup.anypy.scandir_`` which was needed for python 2 support. + (John Rouillard) +- roundup-server no longer logs connection aborted when a client + disconnects and is using HTTP 1.1 or newer. (John Rouillard) +- replace isinstance(..., type(X)) where X is an instance of a type + (1, {}, [], '', u"") with the type itself (int, dict, list, str, + str). This is a leftover construct from early Python 2. Replacing + them speeds up code (e.g. type({}) vs dict). (John Rouillard) +- issue2551405 - Missing locale .mo files create 500 error on uwsgi + without further info. Added more specific ConnectionAbortedError + and changed IOError handling. Case in issue now logs the exception + for diagnosis. (Reported by Ralf Schlatterbeck; John Rouillard) +- Make queries selected from query edit screen include the query + name/display name. This makes it work the same as invoking a query + from the main "Your Queries" menu. (John Rouillard) +- Fix SearchAction to not clobber a saved search when a new search of + the same name is created. Assume a search named "asearch" + exists. Create a new search (not editing the existing + "asearch"). Set new query params and name it "asearch". Roundup will + warn you that "asearch" already exists and you need to choose a new + name. In the warning form, you rename it to "bsearch" and + save/execute. Before this would overwrite "asearch" as it set the + "@old-queryname" of the warning form to "asearch". So it looked like + you were trying to edit the existing query. This fix modifies the + queryname before generating the error form. So when submitted it + doesn't overwrite "asearch". (John Rouillard) +- update the classic tracker's page.html to remove table based + layout. It now uses html5 landmarks like header, main, search, + nav. It also uses flexbox and grid layouts and includes a viewport + meta tag for use on mobile devices. It can be navigated with the + keyboard. Parts of the page that are too wide for the viewport can + be scrolled horizontally with the keyboard or touch. Some other CSS + changes make it easier to use. This is a first step to making the + classic template more responsive. (John Rouillard) +- jinja2 template dependencies updated: bootstrap 4.4.1 -> 4.6.2. + (John Rouillard) +- issue2551377 - Disabled submit button UI issues. When the submit + button is clicked (triggering submit_once) but client side + validation blocks the submission, the submit button no longer + submits the form. Clicking it says the form has been submitted + please wait. This change allows the submit button to submit the form + again after 5 seconds. (John Rouillard) +- Fix developers.txt doc bug (discovered by Ross Boylan, change by + John Rouillard) +- Handle ConfigurationErrors in demo.py cleanly. Used to dump a full + traceback. Now prints error and exits. (John Rouillard) +- Do not display journal/history fields when user does not have access + to the property being changed. (John Rouillard) +- Fix missing CSRF protection for PATCH method (John Rouillard) Features: - add support for authorized changes. User can be prompted to enter their password to authorize a change. If the user's password is properly entered, the change is committed. (John Rouillard) +- add support for dictConfig style logging configuration. Ini/File + style configs will still be supported. (John Rouillard) +- add 'q' as alias for quit in roundup-admin interactive mode. (John + Rouillard) +- add readline command to roundup-admin to list history, control input + mode etc. Also support bang (!) commands to rerun commands in history + or put them in the input buffer for editing. (John Rouillard) +- add format to logging section in config.ini. Used to set default + logging format. (John Rouillard) +- the default logging format template includes an identifier unique + for a request. This identifier (trace_id) can be use to identify + logs for a specific transaction. Will use nanoid if installed, uses + uuid.uuid4 otherwise. Logging also supports a trace_reason log token + with the url for a web request. The logging format can be changed in + config.ini. (John Rouillard) +- issue2551152 - added basic PGP setup/use info to admin_guide. (John + Rouillard) +- add support for the 'justhtml' html 5 parser library for python >= + 3.10. It is written in pure Python. Used to convert html emails into + plain text. Faster then beautifulsoup4 and it passes the html 5 + standard browser test suite. Beautifulsoup is still supported. (John + Rouillard) +- add a new detector: immutable_file_contents.py that prevents + changes to file contents. By default, the permissions assigned + to FileClass based classes (files, msgs) do not prevent editing + of file contents. While the usual HTML templates don't provide + a way to modify files, the REST interface allows changing file + contents without an audit trail. Manually driving the HTML + interface (via curl for example) also allows content + changes. The new detector prevents changes to file contents via + Roundup even by a user with admin rights. (John Rouillard) +- Added documentation on doing an in place database migration. This is + faster for large databases. (John Rouillard) +- Added installation.txt docs on setting up SCGI support with the + althttpd web server. (John Rouillard) +- add support for tokenless/nonceless CSRF prevention following + https://words.filippo.io/csrf/. (John Rouillard) +- standardize use of ``roundup.anypy.urllib_``. Replace urlparse() with + urlsplit() (recommended) for some speedup. (John Rouillard) +- issue2551368 - version 2.0.0 of the pgp module was published by + Bernhard Reiter. Updated documentation and tests. (Bernhard Reiter, + John Rouillard) 2025-07-13 2.5.0 diff --git a/COPYING.txt b/COPYING.txt index 18d9f1c3b..5df83e10a 100644 --- a/COPYING.txt +++ b/COPYING.txt @@ -1,11 +1,12 @@ -Roundup, exclusive of the Zope page templates, is `MIT licensed`_. +Roundup, exclusive of the Zope page templates and vendored cgi.py, is +`MIT licensed`_. .. _MIT licensed: https://opensource.org/license/mit Roundup Licensing ----------------- -| Copyright (c) 2009-2025 Roundup-Team (https://opensource.org/license/mit) +| Copyright (c) 2009-2026 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 @@ -117,8 +118,12 @@ Note link for http://www.zope.com/Marks is dead. Vendored cgi.py module ---------------------- -This module is licensed under the Python Software Foundation License -Version 2 as it was extracted from the 3.12 Python distribution. +This module is licensed under the `Python Software Foundation License +Version 2`_ as it was extracted from the 3.12 Python distribution. + +.. _Python Software Foundation License Version 2: + https://opensource.org/license/Python-2.0 + PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- diff --git a/RELEASE.txt b/RELEASE.txt index 9410a721b..4cfedf93f 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -24,10 +24,9 @@ Roundup release checklist: 2. Run unit tests! They should pass successfully. Install pytest using pip2/pip3 for python2 and python3. Then invoke pytest - using both python versions from the top of the roundup tree: + using both python versions from the top of the roundup tree python3 -m pytest test/ - python2 -m pytest test/ 3. Update version in: CHANGES.txt (set date for version as well) @@ -39,7 +38,7 @@ Roundup release checklist: org.opencontainers.image.version 3a. Update license end date in COPYING.txt 3b. Update doc/acknowledgements.txt (add section for - release, churn contributers etc.). (Use hg churn -c -r ####..####) + release, churn contributers etc.). (Use hg churn -c -r 2.5.0..default) 4. Update documentation doc/announcement.txt @@ -130,7 +129,7 @@ Roundup release checklist: added and removed files. Last release e.g. 1.5.1 where tip is what would become 1.6) E.G. - hg status --rev 2.2.0:tip | sed -ne 's/^A //p' | while read i ; \ + hg status --rev 2.5.0:default | sed -ne 's/^A //p' | while read i ; \ do echo $i; grep "$i" roundup.egg-info/SOURCES.txt; done | \ uniq -c | sort -rn @@ -141,7 +140,7 @@ Roundup release checklist: (Note: files under website/ shouldn't be in the manifest.) 10a: Check for removed files still in manifest: - hg status --rev 2.2.0:tip | sed -ne 's/^R //p' | while read i ; \ + hg status --rev 2.5.0:default | sed -ne 's/^R //p' | while read i ; \ do echo $i; grep "$i" roundup.egg-info/SOURCES.txt; done | \ uniq -c | sort -n @@ -250,10 +249,10 @@ Roundup release checklist: the latest -N release. Also roundup:latest points to the newest -N for the newest roundup version.) - docker build -t rounduptracker/roundup:2.4.0 \ + docker build -t rounduptracker/roundup:2.6.0 \ --build-arg="source=pypi" -f scripts/Docker/Dockerfile . - to create the docker image. *Change 2.4.0 to current version* + to create the docker image. *Change 2.6.0 to current version* Always use the exact release tag. 17c. vulnerability scan local image using: @@ -298,8 +297,8 @@ Roundup release checklist: first and user must be member of rounduptracker org with ability to publish). Replace -N with the release number (e.g. -1, -2, -3...) - docker tag rounduptracker/roundup:2.4.0 roundup-tracker/roundup:latest - docker tag rounduptracker/roundup:2.4.0 roundup-tracker/roundup:2.4.0-N + docker tag rounduptracker/roundup:2.4.0 rounduptracker/roundup:latest + docker tag rounduptracker/roundup:2.4.0 rounduptracker/roundup:2.4.0-N docker push rounduptracker/roundup:2.4.0 docker push rounduptracker/roundup:2.4.0-N docker push rounduptracker/roundup # update roundup:latest diff --git a/demo.py b/demo.py index 861b504e3..13aba73e2 100755 --- a/demo.py +++ b/demo.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 import sys -import roundup from roundup.demo import main diff --git a/detectors/README.txt b/detectors/README.txt index fde325dd6..508299ce4 100644 --- a/detectors/README.txt +++ b/detectors/README.txt @@ -19,6 +19,10 @@ creator_resolution.py - only allow the creator of the issue to resolve it emailauditor.py - Rename .eml files (from email multi-part bodies) to .mht so they can be downloaded/viewed in Internet Explorer. +immutable_file_contents.py - prevent changes to the contents property + of file and msg classes including by + people with the admin role. + irker.py - communicate with irkerd to allow roundtup to send announcements to an IRC channel. diff --git a/detectors/immutable_file_contents.py b/detectors/immutable_file_contents.py new file mode 100644 index 000000000..d5a8dc391 --- /dev/null +++ b/detectors/immutable_file_contents.py @@ -0,0 +1,22 @@ +# HTML pages don't provide a way to change the contents of a file. +# However REST does allow setting content and the HTML interface can +# be directed to update the content as well. This detector +# prevents changes to file content. + +from roundup.exceptions import UsageError + +def immutable_file_contents(db, cl, nodeid, newvalues): + ''' Prevent content changes to a file + ''' + if 'content' in newvalues: + raise UsageError("File contents are immutable. " + "Rejecting change to contents.") + + +def init(db): + """If you have other FileClass based classes add them here.""" + + # fire before changes are made + db.file.audit('set', immutable_file_contents) + db.msg.audit('set', immutable_file_contents) + diff --git a/detectors/irker.py b/detectors/irker.py index 57ce2bfb1..1d5b45673 100644 --- a/detectors/irker.py +++ b/detectors/irker.py @@ -1,6 +1,6 @@ # This detector sends notification on IRC through an irker daemon -# (http://www.catb.org/esr/irker/) when issues are created or messages -# are added. +# (https://gitlab.com/esr/irker formerly http://www.catb.org/esr/irker/) +# when issues are created or messages are added. # # Written by Ezio Melotti # @@ -14,7 +14,6 @@ # channels = irc://chat.freenode.net/channelname # -from __future__ import print_function import re import json import socket diff --git a/doc/CVE.txt b/doc/CVE.txt index ef4a9abae..f7dc08fcd 100644 --- a/doc/CVE.txt +++ b/doc/CVE.txt @@ -1,29 +1,34 @@ -.. comments: +.. comment: This file is a temporary way to post CVE notifications before a release. - Document the CVE fix info in upgrading.txt. We extract the sections + Document the CVE fix info in upgrading.txt. Extract the sections from upgrading.txt that deal with the CVE into a separate CVE.html. An updated docs/security.html and docs/CVE.html provide the details - on a between release CVE announcment. + on a between release CVE announcment. These file get installed on + the website. - Publishing upgrading.txt would include info on the to be released - roundup software and wouldn't match the rest of the release docs. + We can't publish upgrading.txt as it includes info on the to be + released roundup software and wouldn't match the rest of the + release docs. - To extract the info from upgrading.txt to use in CVE.html, add a - commented out a reference anchor in upgrading.txt. Then in CVE.txt - we use an include directive with start-after and end-before options - to exract the sections from upgrading.txt into CVE.html. + Extract the info from upgrading.txt into CVE.html, by adding a + commented out a reference anchor in upgrading.txt. In CVE.txt we + use an include directive with start-after and end-before options to + extract the section from upgrading.txt into CVE.html. Note a + subheading should be placed right after start-after reference + anchor so that there is an entry in the CVE table of contents. The extracted section in CVE.txt gets the same anchor that is in - upgrading.txt, but is is not commented out. This allows us to swap - out CVE.txt and uncomment the reference in upgrading.txt. Then - rerunning sphinx-build will make security.html point to the sections - in upgrading.html. + upgrading.txt, but is is not commented out. This anchor is used in + security.txt when listing all the CVE's. We can swap out CVE.txt + and uncomment the reference in upgrading.txt when the new release + comes out. Running sphinx-build will make security.html point to + the sections in upgrading.html. For example, in upgrading.txt add a - .. comment: _CVE-2024-39124: + .. comment: _CVE-2024-39124L: before the section for the CVE (use the real CVE number). At the end of the CVE section add an end comment: @@ -34,18 +39,19 @@ security.txt references look like: * `CVE-2024-39124`_ - :ref:`classhelpers (_generic.help.html) are - vulnerable to an XSS attack. ` Requires fixing + vulnerable to an XSS attack. ` Requires fixing tracker homes. - where is the reference. The same reference anchor - is present (commented out) in upgrading.txt. In CVE.txt you - replicate the existing anchor and include to extract the content - section from upgrading.txt. E.G. + where is the reference to local documentation + while ``CVE-2024-39124_`` is the reference to the CVE page. The + same reference anchor is present (commented out) in + upgrading.txt. In CVE.txt you replicate the existing anchor and + include to extract the content section from upgrading.txt. E.G. - .. _CVE-2024-39124: + .. _CVE-2024-39124L: .. include:: upgrading.txt - :start-after: .. comment: _CVE-2024-39124: + :start-after: .. comment: _CVE-2024-39124L: :end-before: .. comment: end of CVE After building the docs, install docs/security.html and @@ -55,18 +61,24 @@ in the CVE announcement from Mitre. + If Mitre is taking too long to give a number, use something like: + + .. _CVE-2024-perm_brokenL + + or similar until Mitre gives a number. + When the release is ready, replace 'comment: _CVE' with '_CVE' in upgrading.txt. This makes the anchors in upgrading.txt live. - Then disable CVE.txt by removing CVE.txt from contents.txt in the - toctree hidden section. Also add docs/CVE.txt to exclude_patterns in - conf.py. + Then comment out the '_CVE' directives in CVE.txt. This will + generate an empty placeholder CVE.txt, but that's ok. No change needs to happen to security.txt as it's using a :ref: and we just changed the location for the ref so sphinx will get the links correct. - Now build the docs and publish to the web site. + Now build the docs and publish (including the rebuilt + security.html) to the web site. =========== Roundup CVE @@ -80,10 +92,36 @@ upgrading doc `_ for these details. :local: :depth: 2 -.. _CVE-2024-39124: +.. comment: _CVE-2026-csrfL: .. note:: + Releases of Roundup from 2.0.0 to 2.5.0 do not check for cross site + request forgeries (CSRF) when using the ``PATCH`` method. Release + 2.6 fixes this issue. If you are running 2.6.0 you don't have to do + anything. + +.. comment: include:: upgrading.txt + :start-after: .. comment: _CVE-2026-csrfL: + :end-before: .. comment: + +.. comment: _CVE-2026-history_propL: + +.. note:: + + If you are running versions 1.6.0 to version 2.5 the filtering of + history/journal items does not work correctly if the property is + protected by a check function. Release 2.6.0 fixes this. If you are + running 2.6.0, you don't have to do anything. + +.. comment: include:: upgrading.txt + :start-after: .. comment: _CVE-2026-history_prop: + :end-before: .. comment: + +.. comment _CVE-2024-39124L:: + +.. comment note:: + Prior to the release of Roundup 2.4.0, you can access updated tracker templates that address CVE-2024-39124 from `CVE-2024-39124-templates.zip @@ -91,18 +129,18 @@ upgrading doc `_ for these details. file to generate a templates subdirectory containing the classic, minimal and other tracker templates. -.. include:: upgrading.txt - :start-after: .. comment: _CVE-2024-39124: +.. comment include:: upgrading.txt + :start-after: .. _CVE-2024-39124L: :end-before: .. comment: -.. _CVE-2024-39125: +.. comment CVE-2024-39125L: -.. include:: upgrading.txt - :start-after: .. comment: _CVE-2024-39125: +.. comment include:: upgrading.txt + :start-after: .. _CVE-2024-39125L: :end-before: .. comment: -.. _CVE-2024-39126: - -.. include:: upgrading.txt - :start-after: .. comment: _CVE-2024-39126: +.. comment CVE-2024-39126L: + +.. comment include:: upgrading.txt + :start-after: .. _CVE-2024-39126L: :end-before: .. comment: end of CVE include marker diff --git a/doc/Makefile b/doc/Makefile index c9db7af88..c7b87e9d8 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,6 +1,8 @@ +SPHINX := sphinx-build + ##@ Default target all: man_html tracker_config.txt admin_help.html ## make all docs under share - cd ..; ./setup.py build_doc + cd ..; $(SPHINX) -n -W -b html -d ../build/temp_dir/doc_dir doc share/doc/roundup/html ##@ build doc parts tracker_config.txt: ../roundup/configuration.py format_config.awk ## generate a current config file @@ -20,21 +22,25 @@ MAN_HTML=$(patsubst ../share/man/man1/%.1,html_extra/man_pages/%.1.html,$(MAN_RO man_html: $(MAN_HTML) ## generate html versions of man pages for docs html_extra/man_pages/%.1.html: ../share/man/man1/%.1 - man --html=cat $< > $@ - # set max width for paragraphs - sed -i '/ -ROUNDUP-ADMIN +roundup-admin manual page @@ -40,7 +41,7 @@

NAME

-

roundup-admin - +

roundup-admin - administrate roundup trackers

SYNOPSIS @@ -49,7 +50,7 @@

SYNOPSIS -

roundup-admin +

roundup-admin [options] <command> <arguments>

@@ -58,116 +59,125 @@

OPTIONS

-

-i +

-i instance home

-

Specify the issue tracker +

Specify the issue tracker "home directory" to administer

-

-u +

-u user[:password]

-

The user and password to use +

The user and password to use for commands (partial implemention, see Security Notes below).

- + - - + +

Print help text.

+ - + - - + + +

Print full designators (e.g. +issue1) not just id numbers (1).

+ - + - - + + +

When outputting lists of data, +comma-separate them. Same as -S ",".

+

-h

+ -

Print help text.

+
-

-d

+

-d

-

Print full designators (e.g. issue1) not just id numbers -(1).

+
-

-c

+

-c

-

When outputting lists of data, comma-separate them. Same -as -S ",".

+
-

-S string

+

-S string

-

When outputting lists of data, +

When outputting lists of data, separate items with given string.

- + - - + +as -S " ".

+

-s

+

When outputting lists of data, space-separate them. Same -as -S " ".

+
-

-P pragma=value

+

-P pragma=value

-

Set a pragma on the command +

Set a pragma on the command line. Multiple -P options can be specified to set multiple pragmas.

- + - - + - - + - - + + - +

-V

+

Be verbose when importing data.

+
-

-v

+

-v

-

Report Roundup and Python versions and quit.

+

Report Roundup and Python +versions and quit.

-

Only one of +

Only one of -s, -c or -S can be specified.

COMMANDS @@ -175,209 +185,200 @@

COMMANDS

-

If no command -is provided on the command line, roundup-admin will enter an +

If no command is +provided on the command line, roundup-admin will enter an interactive mode. More details about these commands are available using the help command.

-

A designator is +

A designator is a classname and a nodeid concatenated, eg. bug1, user10, ....

-

Roundup-admin +

Roundup-admin takes a number of commands:

- - + - - + -
+

help

+

prints help (same as -h)

+
-

help +

help <subcommand>

-

Print command-specific help

+

Print command-specific help

-

help all

+

help all

-

Print available help for all +

Print available help for all commands.

- - - - - - -
- - -

commit

+

commit

+

Commit changes made to the +database during an interactive session.

-

Commit changes made to the database during an -interactive session.

- -

The changes +

The changes made during an interactive session are not automatically written to the database - they must be committed using this command.

-

One-off +

One-off commands on the command-line are automatically committed if they are successful. See also rollback.

-

create classname +

create classname property=value ...

-

This creates a new entry of the +

This creates a new entry of the given class using the property name=value arguments provided on the command line after the "create" command.

-

display +

display designator[,designator]*

-

This lists the properties and +

This lists the properties and their associated values for the given node. The pragma display_header can be used to add a header between designators that includes the active/retired status of the item.

-

export +

export [[-]class[,class]] export_dir

-

Export the database to +

Export the database to colon-separated-value files. To exclude the files (e.g. for the msg or file class), use the exporttables command.

-

Optionally +

Optionally limit the export to just the named classes or exclude the named classes, if the 1st argument starts with ’-’.

-

This action +

This action exports the current data from the database into colon-separated-value files that are placed in the nominated destination directory.

-

exporttables +

exporttables [[-]class[,class]] export_dir

-

Export the database to +

Export the database to colon-separated-value files, excluding the files below $TRACKER_HOME/db/files/ (which can be archived separately). To include the files, use the export command.

-

filter classname +

filter classname propname=value ...

-

Find the nodes of the given +

Find the nodes of the given class with a given property value. Multiple values can be specified by separating them with commas. If property is a -string, all values must match. I.E. it’s an matches. -I.E. an ’or’ operation.

+string, all values must match. I.E. it’s an +’and’ operation. If the property is a +link/multilink any value matches. I.E. an ’or’ +operation.

-

find classname +

find classname propname=value ...

-

Find the nodes of the given +

Find the nodes of the given class with a given link property value.

-

genconfig +

genconfig <filename>

-

Generate a new tracker config +

Generate a new tracker config file (ini style) with default values in <filename>. Note that this does not preserve any settings from the current tracker. Use updateconfig for that.

-

get property +

get property designator[,designator]*

-

Get the given property of one +

Get the given property of one or more designator(s).

-

Retrieves the +

Retrieves the property value of the nodes specified by the designators.

-

history designator +

history designator [skipquiet] [raw]

-

Lists the journal entries +

Lists the journal entries viewable by the user for the node identified by the designator. If skipquiet is added, journal entries for quiet properties are not shown. Without the raw option a more human readable output format is used.

-

import +

import import_dir

-

Import a database from the +

Import a database from the directory containing CSV files, two per class to import.

-

The imported +

The imported nodes will have the same nodeid as defined in the import file, thus replacing any existing content.

-

The new nodes +

The new nodes are added to the existing database - if you want to create a new database using the imported data, then create a new database (or, tediously, retire all the old data). See also export.

-

importtables +

importtables import_dir

-

Import a database from the +

Import a database from the directory containing CSV files, two per class to import.

-

The imported +

The imported nodes will have the same nodeid as defined in the import file, thus replacing any existing content.

-

This only +

This only imports database tables. It does not import files/message content. It is used to import data exported by exporttables. See also exporttables.

-

initialise +

initialise [adminpw]

-

Initialise a new Roundup +

Initialise a new Roundup tracker.

-

The +

The administrator details will be set at this step.

-

install [template +

install [template [backend [key=val[,key=val]]]]

-

Install a new roundup +

Install a new roundup tracker.

-

The command +

The command will prompt for the tracker home directory (if not supplied through TRACKER_HOME or the -i option). The template and backend may be specified on the command-line as arguments, in that order.

-

Command line +

Command line arguments following the backend allows you to pass initial values for config options. For example, passing "web_http_auth=no,rdbms_user=dinsdale" will @@ -386,189 +387,189 @@

COMMANDS in this argument! (Enclose whole argument in quotes if you need spaces in option value).

-

The initialise +

The initialise command must be called after this command in order to initialise the tracker’s database. You may edit the tracker’s initial database contents before running that command by editing the tracker’s dbinit.py module init() function.

-

See also +

See also initopts help.

-

list classname +

list classname [property]

-

Lists all instances of the +

Lists all instances of the given class. If the property is not specified, the "label" property is used. The label property is tried in order: the key, "name", "title" and then the first property, alphabetically.

-

With -c, +

With -c, -S or -s print a list of item id’s if no property specified. If property specified, print list of that property for every class instance.

-

The pragma +

The pragma show_retired can be used to print only retired items or to print retired and active items. The default is to print only active items.

-

migrate

+

migrate

-

Update a tracker’s +

Update a tracker’s database to be compatible with the Roundup codebase.

-

You should run +

You should run the "migrate" command for your tracker once you’ve installed the latest codebase.

-

Do this before +

Do this before you use the web, command-line or mail interface and before any users access the tracker.

-

This command +

This command will respond with either "Tracker updated" (if you’ve not previously run it on an RDBMS backend) or "No migration action required" (if you have run it, or have used another interface to the tracker, or possibly because you are using anydbm).

-

It’s safe +

It’s safe to run this even if it’s not required, so just get into the habit.

-

pack period | +

pack period | date

-

Remove journal entries older +

Remove journal entries older than a period of time specified or before a certain date.

-

perftest [mode] +

perftest [mode] [arguments]*

-

Run performance test. For +

Run performance test. For example test the effect of changing password hashing parameters.

-

pragma +

pragma setting=value|list

-

Set internal settings to a +

Set internal settings to a value. E.G.

-

pragma +

pragma verbose=True
pragma verbose=yes
pragma verbose=on
pragma verbose=1

-

will turn on +

will turn on verbose mode for roundup-admin.

-

pragma list

+

pragma list

-

will show all +

will show all settings and their current values. If verbose is enabled hidden settings and descriptions will be shown.

-

reindex +

reindex [classname|classname:#-#|designator]* This will

-

re-generate the search indexes +

re-generate the search indexes for a tracker. You can specify a specific item (or items) (e.g. issue23), range(s) of items (e.g. issue:1-1000), class(es) (e.g. issue) or reindex all items in the database if no arguments are supplied.

-

restore +

restore designator[,designator]*

-

Restore the retired node +

Restore the retired node specified by designator.

-

The given nodes +

The given nodes will become available for users again.

-

retire +

retire designator[,designator]*

-

This action indicates that a +

This action indicates that a particular node is not to be retrieved by the list or find commands, and its key value may be re-used. See also restore.

-

rollback

+

rollback

-

Undo all changes that are +

Undo all changes that are pending commit to the database.

-

The changes +

The changes made during an interactive session are not automatically written to the database - they must be committed manually. This command undoes all those changes, so a commit immediately after would make no changes to the database.

-

security [Role +

security [Role name]

-

Display the Permissions +

Display the Permissions available to one or all Roles.

-

set items +

set items property=value property=value ...

-

Set the given properties of one +

Set the given properties of one or more items(s).

-

The items are +

The items are specified as a class or as a comma-separated list of item designators (ie "designator[,designator,...]").

-

This command +

This command sets the properties to the values for all designators given. If the value is missing (ie. "property=") then the property is un-set. If the property is a multilink, you specify the linked ids for the multilink as comma-separated numbers (ie "1,2,3").

-

specification +

specification classname

-

Show the properties for a +

Show the properties for a classname.

-

templates +

templates [trace_search]]

-

Lists the names, location and +

Lists the names, location and description of all known templates.

-

table classname +

table classname [property[,property]*]

-

Lists all instances of the +

Lists all instances of the given class. If the properties are not specified, all properties are displayed. By default, the column widths are the width of the largest value.

-

The pragma +

The pragma show_retired can be used to print only retired items or to print retired and active items. The default is to print only active items.

-

updateconfig +

updateconfig <filename>

-

This is used when updating +

This is used when updating software. It merges the config.ini from the tracker with new settings from the new software. The merged/updated config file is written to <filename>.

-

Commands may be +

Commands may be abbreviated as long as the abbreviation matches only one command, e.g. l == li == lis == list.

@@ -577,15 +578,15 @@

READLINE SUPPORT

-

You can edit -the command line and interact with history in +

You can edit the +command line and interact with history in roundup-admin’s interactive mode. On Linux like systems, GNU Readline is required. On Mac’s libedit can be used as well. On Windows pyreadline3 is required. See: https://docs.python.org/3/library/readline.html for details on readline.

-

Roundup-admin +

Roundup-admin will save the history between roundup-admin sessions. The commands are saved to the .roundup_admin_history file in the user’s home directory. You can set the pragma @@ -593,17 +594,17 @@

READLINE SUPPORT change the amount of available and stored history for the session.

-

If you are -using GNU readline, you can persistently change the history -size by adding: set history-size 100 to the init file +

If you are using +GNU readline, you can persistently change the history size +by adding: set history-size 100 to the init file .roundup_admin_rlrc located in the user’s home directory.

-

Mac users using +

Mac users using libedit should be able to persistently save history and set the history size by adding history size 100.

-

Users of +

Users of pyreadline3 can use: history_length(100).

SECURITY NOTES @@ -611,14 +612,14 @@

SECURITY NOTES

-

The -u +

The -u user setting does not currently operate like a user logging in via the web. The user running roundup-admin must have read access to the tracker home directory. As a result the user has access to the files and the database info contained in config.ini.

-

Using -u +

Using -u user sets the actor/user parameter in the journal. Changes that are made are attributed to that user. The password is ignored if provided. Any existing username has @@ -633,9 +634,9 @@

ENVIRONMENT VARIABLES -

ROUNDUP_LOGIN

+

ROUNDUP_LOGIN

-

Provides an alternate way to +

Provides an alternate way to set the user.

FURTHER HELP @@ -643,8 +644,8 @@

FURTHER HELP

-

roundup-admin --h
+

roundup-admin -h +
roundup-admin help -- this help
roundup-admin help <command> -- command-specific help
@@ -656,7 +657,7 @@

SEE ALSO -

roundup-demo(1), +

roundup-demo(1), roundup-mailgw(1), roundup-server(1)

AUTHOR @@ -664,11 +665,11 @@

AUTHOR

-

This manpage -was written by Bastian Kleineidam <calvin@debian.org> -for the Debian distribution of roundup.

+

This manpage was +written by Bastian Kleineidam <calvin@debian.org> for +the Debian distribution of roundup.

-

The main author +

The main author of roundup is Richard Jones <richard@users.sourceforge.net>.


diff --git a/doc/html_extra/man_pages/roundup-demo.1.html b/doc/html_extra/man_pages/roundup-demo.1.html index a8044c140..808cde8b9 100644 --- a/doc/html_extra/man_pages/roundup-demo.1.html +++ b/doc/html_extra/man_pages/roundup-demo.1.html @@ -1,20 +1,21 @@ - - + + - + -ROUNDUP-DEMO +roundup-demo manual page @@ -36,7 +37,7 @@

NAME

-

roundup-demo - +

roundup-demo - create a roundup "demo" tracker and launch its web interface

@@ -46,13 +47,14 @@

SYNOPSIS -

roundup_demo +

roundup_demo [-h] [-b BIND_ADDRESS] [-b {anydbm,mysql,sqlite,postgresql}] -[-t {minimal,jinja2,classic,responsive,devel}] [-p -PORT] [-P URLPORT] [-V] -[directory] [backend] -[nuke]

+[-t +{minimal,jinja2,classic,responsive,devel}] +[-p PORT] [-P URLPORT] +[-V] [directory] [backend] +[nuke]

OPTIONS @@ -60,97 +62,94 @@

OPTIONS -

directory

+

directory

-

The home +

The home directory for the new demo tracker. (*)

-

backend

+

backend

-

Choose backend +

Choose backend database. Depricated, use -b.

- - + - - +
+

nuke

- - -

Create a fresh demo tracker (deleting the existing one -if any). E.G.

+
-

roundup-demo -b sqlite -t -classic ./mytracker nuke
+

Create a fresh +demo tracker (deleting the existing one if any). E.G.
+roundup-demo -b sqlite -t classic ./mytracker nuke
will remove an existing tracker (if present) from the directory ./mytracker. Then it will create and serve a new empty classic tracker using the sqlite backend.

-

-h, --help

+

-h, --help

-

Show the help +

Show the help message and exit

-

-B BIND_ADDRESS, +

-B BIND_ADDRESS, --bind_address BIND_ADDRESS

-

Choose address +

Choose address for server to listen at. Use 0.0.0.0 to bind to all addreses. Default: 127.0.0.1.

-

-b +

-b {anydbm,mysql,sqlite,postgresql}, --backend_db
{anydbm,mysql,sqlite,postgresql}

-

Choose backend +

Choose backend database. Default: sqlite. Available backends are subject to availability on your system.

-

-t +

-t {minimal,jinja2,classic,responsive,devel}, --template
{minimal,jinja2,classic,responsive,devel}

-

Use specified +

Use specified template when building tracker. (*)

-

-h HOSTNAME, +

-h HOSTNAME, --hostname HOSTNAME

-

Set the +

Set the hostname used in the URL. This does not make the server listen at the hostname. Use the hostname with -B to listen on that IP address.

-

-p PORT, +

-p PORT, --port PORT

-

Listen at this +

Listen at this port. Default: search for open port starting at 8917.

-

-P URLPORT, +

-P URLPORT, --urlport URLPORT

-

When using +

When using docker this option passes the docker external port to the demo instance. If using docker ... -p 9090:8917 ... this should be set to -P 9090. Default: as selected by --port.

-

-V, --version

+

-V, --version

-

Show +

Show program’s version number and exit

-

If items marked +

If items marked with (*) are missing, they will be asked for interactively when setting up the tracker.

@@ -159,7 +158,7 @@

DESCRIPTION

-

This command +

This command creates a fresh demo tracker for you to experiment with. The email features of Roundup will be turned off (so the nosy feature won’t send email). It does this by removing @@ -170,12 +169,12 @@

DESCRIPTION templates directory. The templates command from roundup-admin(1) can help you locate a replacement.

-

If you wish, -you may modify the demo tracker by editing its configuration +

If you wish, you +may modify the demo tracker by editing its configuration files and HTML templates. See the customisation manual for information about how to do that.

-

Once +

Once you’ve fiddled with the demo tracker, you may use it as a template for creating your real, live tracker. Simply run the roundup-admin command to install the tracker @@ -189,7 +188,7 @@

SEE ALSO -

roundup-admin(1), +

roundup-admin(1), roundup-mailgw(1), roundup-server(1)

AUTHOR @@ -197,9 +196,9 @@

AUTHOR

-

This manpage -was written by Richard Jones and extensively modified by -John Rouillard <rouilj@users.sourceforge.net>.

+

This manpage was +written by Richard Jones and extensively modified by John +Rouillard <rouilj@users.sourceforge.net>.


diff --git a/doc/html_extra/man_pages/roundup-mailgw.1.html b/doc/html_extra/man_pages/roundup-mailgw.1.html index 833ceb08b..c32a9eb3e 100644 --- a/doc/html_extra/man_pages/roundup-mailgw.1.html +++ b/doc/html_extra/man_pages/roundup-mailgw.1.html @@ -1,20 +1,21 @@ - - + + - + -ROUNDUP-MAILGW +roundup-mailgw manual page @@ -38,8 +39,8 @@

NAME

-

roundup-mailgw -- mail gateway for roundup

+

roundup-mailgw - +mail gateway for roundup

SYNOPSIS @@ -47,7 +48,7 @@

SYNOPSIS -

roundup-mailgw +

roundup-mailgw [-h|--help] [-v] [--version] [-c|--default-class default_class] [-S|--set-value [class.]field=value] [-O|--oauth-directory directory] [-T|--oauth-token-endpoint @@ -59,40 +60,40 @@

OPTIONS

-

-v +

-v --version

-

Print version and exit.

+

Print version and exit.

-

-c --default-class +

-c --default-class hyperdb class

-

specify the default tracker +

specify the default tracker class - one of issue (the default), msg, file, user etc. Overrides the tracker’s mailgw default_class setting.

-

-S --set-value +

-S --set-value [class.]property=value[;property=value]

-

specify the values to set on +

specify the values to set on the class specified as prefix using the same format as the Subject line property manipulations. If the class prefix is left out it defaults to msg. Can also be specified with --set-value (and abbreviated to --set).

-

-O --oauth-directory +

-O --oauth-directory directory

-

Only with OAuth authentication +

Only with OAuth authentication specify the directory containing additional OAuth credentials.

-

-T ---oauth-token-endpoint url

+

-T --oauth-token-endpoint +url

-

Token endpoint URL of your +

Token endpoint URL of your cloud provider, only used with OAuth.

DESCRIPTION @@ -100,67 +101,67 @@

DESCRIPTION

-

The roundup -mail gateway may be called in one of four ways:

+

The roundup mail +gateway may be called in one of four ways:

- - + - - + - - + - - + + +

with an instance_home as +the only argument,

- - + - - + + +

with both an +instance_home and a mail spool file, or

- - + - - + + +

with both an instance home and a +mail source type and its specification.

+

+

without arguments which will use the env var ROUNDUP_INSTANCE,

+ -

+

-

with an instance_home as the only argument,

+ -

+

-

with both an instance_home and a mail spool file, -or

+ -

+

-

with both an instance home and a mail source type and -its specification.

-

PIPE -
+

PIPE
If there is no mail source specified, the mail gateway reads a single message from the standard input and submits the message to the roundup.mailgw module.

-

UNIX +

UNIX mailbox
In this case, the gateway reads all messages from the UNIX mail spool file and submits each in turn to the @@ -169,16 +170,16 @@

DESCRIPTION
mailbox
/path/to/mailbox

-

In all of the +

In all of the following mail source types, the username and password can -be stored in a ~/.netrc file. If done so, only the server +be stored in a ˜/.netrc file. If done so, only the server name needs to be specified on the command-line.

-

The username +

The username and/or password will be prompted for if not supplied on the -command-line or in ~/.netrc.

+command-line or in ˜/.netrc.

-

POP
+

POP
For the mail source "pop", the gateway reads all messages from the POP server specified and submits each in turn to the roundup.mailgw module. The server is specified @@ -191,19 +192,16 @@

DESCRIPTION pop server
are both valid.

-

POPS -
+

POPS
Connect to the POP server over ssl/tls. This supports the same notation as POP.

-

APOP -
+

APOP
Same as POP, but using Authenticated POP:
apop
username:password@server

-

IMAP -
+

IMAP
Connect to an IMAP server. This supports the same notation as that of POP mail.
imap
@@ -215,7 +213,7 @@

DESCRIPTION username:password@server mailbox

-

IMAPS +

IMAPS
Connect to an IMAP server over ssl/tls. This supports the same notation as IMAP.
@@ -224,7 +222,7 @@

DESCRIPTION [mailbox]

-

IMAPS_CRAM +

IMAPS_CRAM
Connect to an IMAP server over ssl/tls using CRAM-MD5 authentication. This supports the same notation as IMAP. @@ -234,7 +232,7 @@

DESCRIPTION [mailbox]

-

IMAPS_OAUTH +

IMAPS_OAUTH
Connect to an IMAP server over ssl/tls using OAUTH authentication. Note that this does not support a password @@ -262,7 +260,7 @@

ENVIRONMENT VARIABLES -

ROUNDUP_INSTANCE +

ROUNDUP_INSTANCE
This can be used to set the instance directory. If it is set, the instance_home argument is optional.

@@ -272,17 +270,17 @@

EXAMPLE

-

If your msg +

If your msg class has a messsagetype property you can set up aliases to receive the different types of messages. Setting up an alias in your MTA Using:

-

tracker: +

tracker: |/tools/roundup/bin/roundup-mailgw
-S "msg.messagetype=reply - to all" /var/roundup/sysadmin

-

(the lines are +

(the lines are split for readability. In the alias file they will be on the same line). Replace /tools/roundup/bin/roundup-mailgw by your path to the roundup-mailgw. This creates the email @@ -291,39 +289,39 @@

EXAMPLE all". The roundup tracker instance is located at /var/roundup/sysadmin.

-

A comment alias +

A comment alias would receive emails at tracker_comment with:

-

tracker_comment: +

tracker_comment: |/tools/roundup/bin/roundup-mailgw
-S "msg.messagetype=to tech" /var/roundup/sysadmin

-

which would be -a technical message. These messages can trigger different +

which would be a +technical message. These messages can trigger different workflows based on the messagetype.

-

Both examples +

Both examples use the default class specified in the tracker’s config.ini (usually the issue class).

-

You can also -set properties directly on the issue class. If your +

You can also set +properties directly on the issue class. If your tracker’s issue has a "private" property that limits who can view an issue and its messages:

-

security: +

security: |/tools/roundup/bin/roundup-mailgw
-S "issue.private=true" -S "issue.keyword+=security"
/var/roundup/sysadmin

-

would set the +

would set the private property on a issue to restrict visiblity and mark the issue as a security topic using a keyword.

-

Both examples +

Both examples use the default class specified in the tracker’s config.ini (usually the issue class).

@@ -333,7 +331,7 @@

SEE ALSO -

roundup-admin(1), +

roundup-admin(1), roundup-demo(1), roundup-server(1)

AUTHOR @@ -341,15 +339,15 @@

AUTHOR

-

This manpage -was written by Bastian Kleineidam <calvin@debian.org> -for the Debian distribution of roundup.

+

This manpage was +written by Bastian Kleineidam <calvin@debian.org> for +the Debian distribution of roundup.

-

The main author +

The main author of roundup is Richard Jones <richard@users.sourceforge.net>.

-

Updates by John +

Updates by John Rouillard <rouilj@users.sourceforge.net> and Ralf Schlatterbeck <rsc@runtux.com>.


diff --git a/doc/html_extra/man_pages/roundup-server.1.html b/doc/html_extra/man_pages/roundup-server.1.html index c821050f8..ffe4e8a91 100644 --- a/doc/html_extra/man_pages/roundup-server.1.html +++ b/doc/html_extra/man_pages/roundup-server.1.html @@ -1,20 +1,21 @@ - - + + - + -ROUNDUP-SERVER +roundup-server manual page @@ -37,8 +38,8 @@

NAME

-

roundup-server -- start roundup web server

+

roundup-server - +start roundup web server

SYNOPSIS @@ -46,7 +47,7 @@

SYNOPSIS -

roundup-server +

roundup-server [options] [name=tracker home]*

OPTIONS @@ -54,26 +55,26 @@

OPTIONS

-

-C +

-C file or --config file

-

Use options read from the +

Use options read from the configuration file (see below).

-

-n hostname

+

-n hostname

-

Sets the host name or IP +

Sets the host name or IP address to listen on. Default is localhost (127.0.0.1). Use 0.0.0.0 to listen on all interfaces on the system.

-

-p port

+

-p port

-

Sets the port to listen on +

Sets the port to listen on (default: 8080).

-

-d PIDfile

+

-d PIDfile

-

Run the server in the +

Run the server in the background and write the server’s PID to the file indicated by PIDfile. The -l (or -L) option must be specified if -d is used.

@@ -81,49 +82,51 @@

OPTIONS - + - - + +

Run the server in the foreground even if -d is used.

+

-D

+ -

Run the server in the foreground even if -d is used.

+
-

-t +

-t fork|thread|debug|none

-

Control multi-process mode. +

Control multi-process mode. debug and none are always available. If an invalid mode is specified the server starts in none (also called single) mode. Default fork.

-

-m +

-m max_children

-

Set the maximum number of child +

Set the maximum number of child processes (servers). This value may need to be increased on a heavily loaded site. Default 40.

-

-l file

+

-l file

-

Sets a filename to log to +

Sets a filename to log to (instead of stdout). This is required if the -d option is used.

- + - - + - + - - + + +

Have the server log using the +Python logger with key roundup.http.

-P

+

If a reverse proxy is used in front of the @@ -139,22 +142,22 @@

OPTIONS for details and warnings about using the X-Forwarded-For header.

-

-L

+

-L

-

Have the server log using the Python logger with key -roundup.http.

-

-i file

+

-i file

-

Sets a filename to use as a +

Sets a filename to use as a template for generating the tracker index page. The variable "trackers" is available to the template and is a dict of all configured trackers. If you connect to the root @@ -162,10 +165,10 @@

OPTIONS page is shown. Using -i allows you to customize the index page.

-

-I +

-I header1[,header2,...]

-

Pass the header(s) and their +

Pass the header(s) and their values to the backend. This allow-list of header variables can be used by custom code in the tracker or with a tracker’s http_auth_header configuration option @@ -175,13 +178,13 @@

OPTIONS - + - - +

-s

+

Enables use of SSL. In most cases, you will want to run @@ -190,91 +193,73 @@

OPTIONS filter/rate limit/firewall requests to roundup-server.

-

-e file

+

-e file

-

Sets a filename containing the +

Sets a filename containing the PEM file to use for SSL. The PEM file must include both the private key and certificate with appropriate header/trailer markers:

-

-----BEGIN +

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----

-

and

+

and

-

-----BEGIN +

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

-

If no file is +

If no file is specified, a temporary self-signed certificate will be used.

- + - - + +slower).

+

-N

+

Log client machine names instead of IP addresses (much -slower).

+
-

-V HTTPVER

+

-V HTTPVER

-

By default roundup-server uses +

By default roundup-server uses HTTP/1.1 to enable keepalives for faster response. HTTPVER can be set to HTTP/1.0 to disable keepalives.

- - - - - - - - - - - - - -
- - -

-u UID

+

-u UID

+

Runs the Roundup web server as +this UID.

-

Runs the Roundup web server as this UID.

-
- - -

-g GID

+

-g GID

+

Runs the Roundup web server as +this GID.

-

Runs the Roundup web server as this GID.

-
- -

-v or +

-v or --version

-

Print version and exit.

+

Print version and exit.

-

-h or --help

+

-h or --help

-

Print help and exit.

+

Print help and exit.

-

--save-config

+

--save-config

-

Create configuration file and +

Create configuration file and exit. The old config.ini will be saved to config.bak. Note that this command doesn’t attempt to load or verify an existing config.ini. Running this in a tracker home @@ -283,10 +268,10 @@

OPTIONS This will make the tracker in the directory fail to start until the original config.ini is restored.

-

name=tracker +

name=tracker home

-

Sets the tracker home(s) to +

Sets the tracker home(s) to use. The name variable is how the tracker is identified in the URL (it’s the first part of the URL path). The tracker home variable is the directory @@ -298,7 +283,7 @@

OPTIONS characters like spaces, as these confuse the cookie handling in browsers like IE.

-

If you connect +

If you connect to the root directory (I.E. you do not include the name component in the URL, the server will display an index page of trackers served by roundup-server if more than @@ -311,14 +296,14 @@

EXAMPLES -

roundup-server +

roundup-server -p 9000 bugs=/var/tracker reqs=/home/roundup/group1

-

Start the server on port +

Start the server on port 9000 serving two trackers; one under /bugs and one under /reqs.

-

If you connect +

If you connect to the server at the root level (http://host:9000/) it will display a list of the available trackers.

@@ -327,7 +312,7 @@

CONFIGURATION FILE

-

See the +

See the "admin_guide" in the Roundup "doc" directory.

@@ -337,7 +322,7 @@

SEE ALSO -

roundup-admin(1), +

roundup-admin(1), roundup-demo(1), roundup-mailgw(1)

AUTHOR @@ -345,11 +330,11 @@

AUTHOR

-

This manpage -was written by Bastian Kleineidam <calvin@debian.org> -for the Debian distribution of roundup.

+

This manpage was +written by Bastian Kleineidam <calvin@debian.org> for +the Debian distribution of roundup.

-

The main author +

The main author of roundup is Richard Jones <richard@users.sourceforge.net>.


diff --git a/doc/installation.txt b/doc/installation.txt index 14d5b0087..a5cd56b41 100644 --- a/doc/installation.txt +++ b/doc/installation.txt @@ -103,12 +103,13 @@ emails. Once you install Roundup, you can use the ``roundup-demo`` command to install new demo trackers. -.. [1] Demo tracker is set up to be accessed by localhost browser. - If you run demo on a server host, please stop the demo (using +.. [1] Demo tracker is set up to be accessed by localhost browser. If + you run demo on a server host, please stop the demo (using Control-C) after it has shown the startup notice, open file - ``demo/config.ini`` with your editor, change host name in - the ``web`` option in section ``[tracker]``, save the file, - then re-run the demo.py program. + ``demo/config.ini`` with your editor, change host name in the + ``web`` option in section ``[tracker]`` from ``localhost`` to + your servers DNS name, save the file, then re-run the demo.py + program. .. _demo mode using docker: @@ -178,7 +179,7 @@ can remove the tracker using ``rm -f`` on the ``demo`` directory. Prerequisites ============= -Roundup requires Python 3.7 or newer with a functioning anydbm +Roundup requires Python 3.10 or newer with a functioning anydbm or sqlite module. The version installed by most vendors should work if it meets the version requirements. If necessary, you can download the latest version from https://www.python.org/. It is highly recommended @@ -248,11 +249,12 @@ gpg If gpg_ is installed you can configure the mail gateway to perform verification or decryption of incoming OpenPGP MIME messages. When configured, you can require email to be cryptographically signed - before roundup will allow it to make modifications to issues. (Note - with python 3.13 or newer on some platforms, you may need to install - version 2.0 of gpg from test.pypi.org. See the `gpg install - directions in the upgrading document`_. + before Roundup will allow it to make modifications to issues. +nanoid + If nanoid_ is installed, it is used to generate short unique + ids to link all logging to a single request. If not installed, + uuid4's from the standard library are used. jinja2 To use the jinja2 template (may still be experimental, check out @@ -307,6 +309,14 @@ polib roundup-gettext, you must install polib_. See the `developer's guide`_ for details on translating your tracker. +beautifulsoup, justhtml + When HTML only email is received, Roundup can convert it into + plain text using the native dehtml parser. To convert HTML + email into plain text, beautifulsoup4_ or justhtml_ can also be + used. You can choose the converter in the tracker's + config. Note that justhtml is pure Python, fast and conforms to + HTML 5 standards but works only for Python 3.10 or newer. + pywin32 - Windows Service You can run Roundup as a Windows service if pywin32_ is installed. Otherwise it must be started manually. @@ -579,10 +589,7 @@ responsive This issue tracker uses the same schema as devel. The difference between devel and responsive templates is the use of Twitter bootstrap (https://github.com/twbs/bootstrap) in templates and - HTML5 markup. Make sure the "static_files" setting in your - config.ini of your instance is set to the directory where the - static files live (the subdirectory "static" in the default of the - template). + HTML5 markup. jinja2 This is a generic issue tracker based on classic schema. It uses @@ -599,11 +606,14 @@ https://wiki.roundup-tracker.org/TrackerTemplates. Choosing Your Backend --------------------- -The actual storage of Roundup tracker information is handled by backends. +The actual storage of Roundup tracker information is handled by +database backends. Roundup has a process to allow you to change +backends and preserve your tracker's data. So you can upgrade from an +embedded database to MySQL, or PostgreSQL. Roundup supports basic full text search (FTS) for all backends. Some -backends support a faster native FTS. Also Roundup supports using -whoosh or xapian for FTS. +database backends support a faster native FTS. Roundup also supports +using whoosh or xapian for FTS. There are several backends to choose from, each with benefits and limitations: @@ -626,16 +636,11 @@ mysql Fast Many Needs install/admin (MySQLdb_) (e.g. you are interested in adding support for MongoDB or other NoSQL persistence layer). **sqlite** - This uses the embedded database engine SQLite and the PySQLite_ - driver to provide a very fast - backend. This is not suitable for trackers which will have many - simultaneous users, but requires much less installation and maintenance - effort than more scalable postgresql and mysql backends. - - SQLite is supported via PySQLite version 2.1.0 and sqlite3 (the last - being bundled with Python 2.5+) - - Installed SQLite should be the latest version available (3.9.0 or newer). + This uses the SQLite embedded database engine with the sqlite3 + library bundled with Python. This provides a very fast backend. This + is not suitable for trackers which will have many (50+) users + simultaneous updating data. It requires no installation and less + maintenance effort than more scalable postgresql and mysql backends. .. _fts5-testing: @@ -704,8 +709,8 @@ tracker will be heavily used and accessible from the internet, we suggest using Apache or Nginx in WSGI mode or as a reverse proxy to the stand alone web server or WSGI server like Gunicorn. -A FastCGI deployment with an alternate web server is suitable for -lower traffic sites. +A FastCGI or SCGI deployment with an alternate web server is suitable +for lower traffic sites. If you already run Zope, Roundup should deploy nicely in that framework. @@ -717,10 +722,10 @@ Using a true HTTP server provide tools including: DOS prevention, throttling, web application firewalls etc. that are worth having in an internet facing application. -If you are running on an internal intranet, you can use the -stand alone server: roundup-server, but even in this environment, -using a real web server to serve static files and other resources -will perform better. +If you are running on an internal intranet, you can use the stand +alone server: roundup-server, but even in this environment, using a +real web server or proxy (e.g. pound) to serve static files and other +resources will perform better. .. contents:: :depth: 1 @@ -1283,7 +1288,7 @@ FastCGI (Cherokee, Hiawatha, lighttpd) The Hiawatha and lighttpd web servers can run Roundup using FastCGI. Cherokee can run FastCGI but it also supports wsgi directly using a -wsgi server like uWSGI, Gnuicorn etc. +wsgi server like Waitress, Gnuicorn etc. To run Roundup using FastCGI, the flup_ package can be used under Python 2 and Python 3. We don't have a detailed config for this, but @@ -1296,6 +1301,81 @@ configuration files and instructions. https://web.archive.org/web/20241010170738/https://flask.palletsprojects.com/en/2.0.x/deploying/fastcgi/ .. _flup: https://pypi.org/project/flup/ +SCGI (althttpd, Cherokee, lighttpd) +----------------------------------- + +The `althttpd (written by the author of SQLite) +`_ web server is a minimal server that +can run Roundup using SCGI or CGI. + +To run Roundup using SCGI, the flup_ package provides a translator +between SCGI and WSGI. + +The configuration below assumes the web server is running on one host +and the roundup scgi server is running on another host. If they are +both running on the same computer, change ``0.0.0.0`` to ``127.0.0.1`` +and ``hostname`` to ``localhost`` or ``127.0.0.1`` to prevent direct +connection to the roundup scgi server from external hosts. + +The following ``roundup-scgi.py`` can be run using Python to start the +server: + +.. code:: python + + #!/usr/bin/env python + # Obtain the WSGI request dispatcher + from roundup.cgi.wsgi_handler import RequestDispatcher + from flup.server.scgi import WSGIServer + + # Set the path to tracker home. + tracker_home = '/path/to/tracker/home' + + try: + application = RequestDispatcher(tracker_home) + except Exception as e: + print(e) + sys.exit(1) + + ret = WSGIServer(application, + # the tuple: + # hostname/ip address as a string (0.0.0.0 bind + # all ip address) + # port as an integer + bindAddress=("0.0.0.0", 8197), + # Unlike config.ini, the scriptName should + # not end with a /. + scriptName="/roundup.scgi").run() + sys.exit(ret and 42 or 0) + +which is started using ``python roundup-scgi.py``. Note this scgi +configuration serves only one tracker at port 8197. So you run one +scgi server process for each of your trackers. This is different from +cgi, roundup-server or some wsgi deployments where you can access +different trackers through the same entry point. + +Now you have to configure althttpd so it connects to the scgi +server. To do this, althttpd requires a file with a ``.scgi`` +extension. Create the file ``roundup.scgi`` and put it in the root of +your althttpd directory. It should contain: + +.. code:: + + SCGI hostname 8197 + +where hostname is a valid name for the host running the SCGI +server. You can also put in other directives including a fallback web +page if the SCGI server is down, or a command to run to restart the +SCGI server. See the `althttpd.c file +`_ on +the main web site for details. If you have already have althttpd or +althttpsd installed you can just use the ``--help`` argument. + +Assuming you run: +``althttpd --root /var/www/htdocs -port 443 --cert certs.pem`` and you +installed ``/var/www/htdocs/roundup.scgi``, you will be able to access +your tracker at: ``https://web_hostname/roundup.scgi/`` which will +also be the value of your ``web`` setting in the tracker's config.ini. + WSGI Variations --------------- @@ -1499,23 +1579,6 @@ including putting it behind a proxy, IPV6 support etc. .. _`See the Waitress docs`: https://docs.pylonsproject.org/projects/waitress/en/stable/ -.. index:: pair: web interface; uWSGI - single: wsgi; uWSGI - -uWSGI Installation -~~~~~~~~~~~~~~~~~~ - -For a basic roundup install using uWSGI behind a front end server, -install uwsgi and the python3 (or python) plugin. Then run:: - - uwsgi --http-socket 127.0.0.1:8917 \ - --plugin python3 --mount=/tracker=wsgi.py \ - --manage-script-name --callable app - -using the same wsgi.py as was used for Gunicorn. If you get path not -found errors, check the mount option. The /tracker entry must match -the path used for the [tracker] web value in the tracker's config.ini. - Configure an Email Interface ============================ @@ -2375,32 +2438,29 @@ Make sure you read the instructions under `UNIX environment steps`_. Problems? Testing your Python... ================================ -.. note:: - The ``run_tests.py`` script is not packaged in Roundup's source - distribution anymore. You should install: - - * pytest, - * requests, and - * mock - - using your distributions package manger or using pip/pip2/pip3 to - install pytest etc. for your Python version. See the - `administration guide`_ for details. - - Remember to have a database user 'rounduptest' prepared (with - password 'rounduptest'). This user - must have at least the rights to create and drop databases. - Documentation: details on `adding MySQL users`_, - for PostgreSQL you want to call the ``createuser`` command with the - ``-d`` option to allow database creation. - -This can only be done if you `install the source`_ distribution -(steps 1-3) or from a `mercurial checkout -<../code.html#get-sources>`_. It will not work if you used `pip -install` as the test suite is not installed. Once you've unpacked -roundup's source, if you have pytest installed, run ``python -m -pytest test`` in the Roundup source directory and make sure there -are no errors. If there are errors, please let us know! +This can only be done if you `install the source`_ distribution (steps +1-3) or from a `mercurial checkout <../code.html#get-sources>`_. It +will not work if you used `pip install` as the test suite is not +installed. Once you've unpacked roundup's source, you need to install +the testing requirements. You probably want to do this in an activated +virtual environment. This can be done with:: + + python -m pip install -r test/requirements.txt + +or you can install all the packages listed in requirements.txt using +your distribution's package manager. + +If you are testing postgresql or mysql/mariadb you must have a +database user 'rounduptest' (with password 'rounduptest'). This user +must have at least the rights to create and drop databases. +Documentation: details on `adding MySQL users`_, for PostgreSQL you +want to call the ``createuser`` command with the ``-d`` option to +allow database creation. The test suite will skip tests where the +database driver software is missing. + +Then run ``python -m pytest test`` in the Roundup source directory and +make sure there are no errors. If there are errors, please let us +know! Note that redis tests uses database 15 of the redis server running on localhost.The tests verify that the database is empty before the redis @@ -2436,6 +2496,7 @@ the test. .. _`adding MySQL users`: https://dev.mysql.com/doc/refman/8.0/en/creating-accounts.html .. _apache: https://httpd.apache.org/ +.. _beautifulsoup4: https://pypi.org/project/beautifulsoup4/ .. _brotli: https://pypi.org/project/Brotli/ .. _`developer's guide`: developers.html .. _defusedxml: https://pypi.org/project/defusedxml/ @@ -2443,12 +2504,14 @@ the test. .. _flup: https://pypi.org/project/flup/ .. _gpg: https://www.gnupg.org/software/gpgme/index.html .. _jinja2: https://palletsprojects.com/projects/jinja/ +.. _justhtml: https://pypi.org/project/justhtml/ .. _markdown: https://python-markdown.github.io/ .. _markdown2: https://github.com/trentm/python-markdown2 .. _mistune: https://pypi.org/project/mistune/ .. _mod_python: https://github.com/grisha/mod_python .. _mod_wsgi: https://pypi.org/project/mod-wsgi/ .. _MySQLdb: https://pypi.org/project/mysqlclient/ +.. _nanoid: https://pypi.org/project/nanoid/ .. _Olson tz database: https://www.iana.org/time-zones .. _polib: https://polib.readthedocs.io .. _Psycopg2: https://www.psycopg.org/ diff --git a/doc/pydoc.txt b/doc/pydoc.txt index ef7bf849b..36df7250f 100644 --- a/doc/pydoc.txt +++ b/doc/pydoc.txt @@ -1,10 +1,14 @@ -================ -Pydocs from code -================ +================================ +Embedded documentation from code +================================ .. contents:: :local: +The following are embedded documentation selected from the Roundup +code base. You can see the same information using the ``help`` +function after importing the modules. + Client class ============ @@ -40,3 +44,11 @@ Templating Utils class .. autoclass:: roundup.cgi.templating::TemplatingUtils :members: + +Logcontext Module +================= +.. _logcontext_pydoc: + +.. automodule:: roundup.logcontext + :members: + :exclude-members: SimpleSentinel diff --git a/doc/reference.txt b/doc/reference.txt index 9713ae283..3dea2518a 100644 --- a/doc/reference.txt +++ b/doc/reference.txt @@ -1307,7 +1307,7 @@ is added to the db object. As a result, the ``hasattr`` call shown above will return True and the Reauth exception is not raised. (Note that the value of the ``reauth_done`` attribute is True, so ``getattr(db, "reauth_done", False)`` will return True when reauth is -done and the defaul value of False if the attribute is missing. If the +done and the default value of False if the attribute is missing. If the default is not set, `getattr` raises an ``AttributeError`` which might be useful for flow control.) @@ -1321,6 +1321,12 @@ user to submit each sensitive property separately. For example:: 'at the same time is not allowed. Please ' 'submit two changes.') + if db.tx_Source not in ("web"): + # the user is using rest, xmlrpc, command line, + # email (unlikely) which don't support interactive + # verification + return + if 'password' in newvalues and not hasattr(db, 'reauth_done'): raise Reauth() @@ -1362,10 +1368,8 @@ from this directory, at which point it calls ``init(instance)`` from each file supplying itself as a first argument. Note that at this point web interface is not loaded, but -extensions still can register actions for it in the tracker -instance. This may be fixed in Roundup 1.6 by introducing -``init_web(client)`` callback or a more flexible extension point -mechanism. +extensions can register actions for it in the tracker +instance. * ``instance.registerUtil`` is used for adding `templating utilities`_ (see `adding a time log to your issues @@ -1378,8 +1382,9 @@ mechanism. * ``instance.registerAction`` is used to add more actions to the instance and to web interface. See `Defining new web actions`_ - for details. Generic action can be added by inheriting from - ``action.Action`` instead of ``cgi.action.Action``. + for details. Generic action (used by xmlrpc or rest interfaces) can + be added by inheriting from ``action.Action`` instead of + ``cgi.action.Action``. .. _interfaces.py: .. _modifying the core of Roundup: @@ -1815,15 +1820,15 @@ The ``addPermission`` method takes a four optional parameters: ``issue`` class and the ``user`` class include a reference to an ``organization`` class. Users are permitted to view only those issues that are associated with their respective organizations. A - check function or this could look like:: + check function for this could look like:: def view_issue(db, userid, itemid): user = db.user.getnode(userid) if not user.organisation: return False issue = db.issue.getnode(itemid) - if user.organisation == issue.organisation: - return True + return user.organisation == issue.organisation + The corresponding ``filter`` function:: @@ -2226,15 +2231,48 @@ for each action are: **search** Determine whether the user has permission to view this class. +.. _`nonceless CSRF`: + Protecting users from web application attacks --------------------------------------------- -There is a class of attacks known as Cross Site Request Forgeries -(CSRF). Malicious code running in the browser can making a -request to Roundup while you are logged into Roundup. The -malicious code piggy backs on your existing Roundup session to -make changes without your knowledge. Roundup 1.6 has support for -defending against this by analyzing the +There is a type of attack known as Cross Site Request Forgeries +(CSRF). Malicious code running in the browser can send a request +to Roundup while you are logged in. The malicious code takes +advantage of your active Roundup session to make changes without +your knowledge. + +Roundup 2.6 added support for tokenless (nonceless) protection. +This is based on `Cross-Site Request Forgery by Filippo Valsorda +`_. Currently you must manually +enable it. At some point in the future, it will be the default +CSRF protection method. + +You can enable it for each tracker using ``config.ini``. In the +``[web]`` section of ``config.ini`` setting +``use_tokenless_csrf_protection`` to ``yes`` enables it. Since +this is a replacement for the prior anti-CSRF protections, it +turns off the older nonce and header-based CSRF settings. + +The Origin header is checked against the value of the +``allowed_api_origins`` option. You can use it to allow access to +Roundup from other web sites. For example your homepage at +www.example.com displays the 10 most recently updated issues from +Roundup running at issues.example.com. To allow this, you would +set the ``allowed_api_origins`` to ``https://www.example.com``. + +If your users have older browsers (pre 2023) you may need to +continue using the older token/nonce based CSRF protection method. +See Valsorda's page for details. + +With this mode enabled, the ``utils.anti_csrf_nonce()`` function +always returns ``"0"``. It does not generate a nonce nor store it to +the otks database which should improve response times. + +Token/nonce based CSRF protection +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Roundup 1.6 has support for defending against this by analyzing the * Referer, * Origin, and diff --git a/doc/rest.txt b/doc/rest.txt index b9163e0a7..afde5005f 100644 --- a/doc/rest.txt +++ b/doc/rest.txt @@ -945,12 +945,13 @@ with ``Content-Type: application/json`` and a (4x larger) json encoded representation of the binary data. If you want it returned with a ``Content-Type: image/png`` header, -you can use ``image/png`` or ``*/*`` in the Accept header. +you can use ``image/png``, ``image/*``, or ``*/*`` in the Accept header. For message files, you can use ``https://.../demo/rest/data/msg/23/binary_content`` with ``Accept: application/octet-stream; q=0.5, application/json; q=0.4, image/png; -q=0.495, text/*``. It will return the plain text of the message. +q=0.495, text/*``. It will return the plain text (text/plain mime +type) of the message. Most message files are not stored with a mime type. Getting ``https://.../demo/rest/data/msg/23/type`` returns:: @@ -972,10 +973,16 @@ Messages are meant to be human readable, so the mime type ``text/*`` can be used to access any text style mime type (``text/plain``, ``text/x-rst``, ``text/markdown``, ``text/html``, ...) or an empty mime type. If the item's type is not empty, it will be used as the -Content-Type (similar to ``*/*``). Otherwise ``text/*`` will be the -Content-Type. If your tracker supports markup languages -(e.g. markdown), you should set the mime type (e.g. ``text/markdown``) -when storing your message. +Content-Type (similar to ``*/*``). Otherwise the default mime type +``text/plain`` will be the Content-Type. The default mime type can be +changed using ``interfaces.py`` in your tracker. So you can change the +default ``text/plain`` to ``text/markdown`` using:: + + from roundup.rest import RestfulInstance + RestfulInstance.default_text_file_mimetype = "text/markdown" + +If your tracker supports markup languages (e.g. markdown), you should +set the mime type (e.g. ``text/markdown``) when storing your message. Note that the header ``X-Content-Type-Options: nosniff`` is returned with a non javascript or xml binary_content response to prevent the @@ -1877,6 +1884,8 @@ You can extend the rest api for a tracker. This describes how to add new rest end points. At some point it will also describe the rest.py structure and implementation. +.. _adding_new_rest_endpoints: + Adding new rest endpoints ------------------------- @@ -1892,7 +1901,7 @@ In that file add:: @Routing.route("/summary2") @_data_decorator - def summary2(self, input): + def summary2(self, input_payload): result = { "hello": "world" } return 200, result @@ -1909,7 +1918,7 @@ Similarly appending this to interfaces.py after summary2:: # handle more endpoints @Routing.route("/data/<:class_name>/@schema", 'GET') - def get_element_schema(self, class_name, input): + def get_element_schema(self, class_name, input_payload): result = { "schema": {} } uid = self.db.getuid () if not self.db.security.hasPermission('View', uid, class_name) : @@ -1959,7 +1968,7 @@ endpoints. Adding this as described above:: @Routing.route("/summary") @_data_decorator - def summary2(self, input): + def summary2(self, input_payload): result = { "hello": "world" } return 200, result @@ -1976,7 +1985,7 @@ In addition to overriding existing endpoints, you can move existing endpoints to new locations. Adding:: @Routing.route("/data2/<:classname>") - def get_collection2(self, classname, input): + def get_collection2(self, classname, input_payload): """ Remap existing function in rest.py to a new endpoint Existing function is decorated with: @@ -1987,7 +1996,7 @@ endpoints to new locations. Adding:: so we need to drop @_data_decorator from this function since we can't apply @_data_decorator twice. """ - return self.get_collection(classname, input) + return self.get_collection(classname, input_payload) will make the response at /rest/data2/ be the same as what is normally at /rest/data/. @@ -2024,7 +2033,7 @@ that returns a list of users with the developer role:: class RestfulInstance(object): @Routing.route("/data/@permission/Developer") - def get_role_Developer(self, input): + def get_role_Developer(self, input_payload): '''An endpoint to return a list of users with Developer role who can be assigned to an issue. @@ -2065,14 +2074,14 @@ that returns a list of users with the developer role:: # deny all other url parmeters return False - # Cleanup input.list to prevent user from probing roles + # Cleanup input_payload.list to prevent user from probing roles # or viewing things the user should not be able to view. - input.list[:] = [ fs for fs in input.list - if allowed_field(fs) ] + input_payload.list[:] = [ fs for fs in input_payload.list + if allowed_field(fs) ] # Add the role filter required to implement the permission # search - input.list.append(MiniFieldStorage("roles", "Developer")) + input_payload.list.append(MiniFieldStorage("roles", "Developer")) # change user to acquire permission to search roles self.db.setCurrentUser('admin') @@ -2080,7 +2089,7 @@ that returns a list of users with the developer role:: # Once we have cleaned up the request, pass it to # get_collection as though /rest/data/users?... has been called # to get @verbose and other args supported. - return self.get_collection('user', input) + return self.get_collection('user', input_payload) Calling this with:: @@ -2203,7 +2212,7 @@ only been tested with python3):: class RestfulInstance(object): @Routing.route("/jwt/issue", 'POST') @_data_decorator - def generate_jwt(self, input): + def generate_jwt(self, input_payload): """Create a JSON Web Token (jwt) """ import datetime @@ -2230,7 +2239,7 @@ only been tested with python3):: raise Unauthorised(denialmsg) # verify we have input data. - if not input: + if not input_payload: raise UsageError("Missing data payload. " "Verify Content-Type is sent") @@ -2250,13 +2259,13 @@ only been tested with python3):: } lifetime = 0 - if 'lifetime' in input: - if input['lifetime'].value != 'unlimited': + if 'lifetime' in input_payload: + if input_payload['lifetime'].value != 'unlimited': try: - lifetime = datetime.timedelta(seconds=int(input['lifetime'].value)) + lifetime = datetime.timedelta(seconds=int(input_payload['lifetime'].value)) except ValueError: raise UsageError("Value 'lifetime' must be 'unlimited' or an integer to specify" + - " lifetime in seconds. Got %s."%input['lifetime'].value) + " lifetime in seconds. Got %s."%input_payload['lifetime'].value) else: lifetime = datetime.timedelta(seconds=86400) # 1 day by default @@ -2264,8 +2273,8 @@ only been tested with python3):: claim['exp'] = utcnow() + lifetime newroles = [] - if 'roles' in input: - for role in [ r.lower() for r in input['roles'].value ]: + if 'roles' in input_payload: + for role in [ r.lower() for r in input_payload['roles'].value ]: if role not in rolenames: raise UsageError("Role %s is not valid."%role) if role in user_roles: @@ -2295,12 +2304,12 @@ only been tested with python3):: @Routing.route("/jwt/validate", 'GET') @_data_decorator - def validate_jwt(self,input): + def validate_jwt(self,input_payload): import jwt - if not 'jwt' in input: + if not 'jwt' in input_payload: raise UsageError("jwt key must be specified") - myjwt = input['jwt'].value + myjwt = input_payload['jwt'].value secret = self.db.config.WEB_JWT_SECRET[0] diff --git a/doc/security.txt b/doc/security.txt index 11aaaf558..678ca3b38 100644 --- a/doc/security.txt +++ b/doc/security.txt @@ -28,21 +28,36 @@ source release tarballs. CVE Announcements ----------------- + * `CVE-2026 pending `_ - :ref:`PATCH method bypasses + CSRF checks `. Fixed in release 2.6.0, directions + available for fixing issue in releases 2.0.0 - 2.5.0. + + * `CVE-2026 pending `_ - :ref:`history doesn't + use check function to determine access to properties + `. Fixed in release 2.6.0, directions + available for fixing issue in prior releases. + * `CVE-2025-53865`_ - :ref:`XSS security issue with devel or - responsive templates `. Fixed in release 2.5.0, + responsive templates `. Fixed in release 2.5.0, directions available for fixing trackers based on these templates. * `CVE-2024-39124`_ - :ref:`classhelpers (_generic.help.html) are - vulnerable to an XSS attack. ` Requires fixing + vulnerable to an XSS attack. ` Requires fixing tracker homes. + * `CVE-2024-39125`_ - :ref:`if Referer header is set to a script tag, - it will be executed. ` Fixed in release 2.4.0, + it will be executed. ` Fixed in release 2.4.0, directions available for fixing in prior versions. + * `CVE-2024-39126`_ - :ref:`PDF, XML and SVG files downloaded from an issue can contain embedded JavaScript which is - executed. ` Fixed in release 2.4.0, directions + executed. ` Fixed in release 2.4.0, directions available for fixing in prior versions. +.. _CVE-2026-csrf: + https://cve.mitre.org/cgi-bin/cvename.cgi?name=pending +.. _CVE-2026-history-prop: + https://cve.mitre.org/cgi-bin/cvename.cgi?name=pending .. _CVE-2025-53865: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-53865 .. _CVE-2024-39124: @@ -139,6 +154,7 @@ with 1.6.0 have been moved and are linked below: .. rst-class:: multicol +* `2.6.0 <../signatures/roundup-2.6.0.tar.gz.asc>`_ * `2.5.0 <../signatures/roundup-2.5.0.tar.gz.asc>`_ * `2.4.0 <../signatures/roundup-2.4.0.tar.gz.asc>`_ * `2.4.0b2 <../signatures/roundup-2.4.0b2.tar.gz.asc>`_ diff --git a/doc/tracker_config.txt b/doc/tracker_config.txt index 1d132660f..8856cb8d2 100644 --- a/doc/tracker_config.txt +++ b/doc/tracker_config.txt @@ -421,6 +421,39 @@ # Default: 600 api_failed_login_interval_in_sec = 600 + # Use a more modern CSRF protection method. If enabled, the + # other CSRF settings below are disabled and a CSRF token is + # not needed when creating your forms. + # + # Allowed values: yes, no + # Default: no + use_tokenless_csrf_protection = no + + # A comma separated list of additonal valid Origin header + # values used when enforcing the origin header. If token style CSRF + # protection is enabled, it is used only for the api URLs (/rest and + # /xmlrpc). It is not used for the standard html URL's. If tokenless + # style csrf protection is enabled, it is used for URLs. + # + # These strings must precisely match the value of the Origin header. For + # example, 'https://bar.edu' and 'https://Bar.edu' are two different + # Origin values. Note origin values consist of scheme://host without any + # path component. Thus 'https://bar.edu/' is not valid. The value '*' + # can be used to match any origin when token style CSRF is enabled. It + # must be placed first in the list if used. Note that the '*' value + # allows any web page on the internet to make anonymous requests against + # your Roundup tracker. + # + # You must configure this if you have a web application on a different + # origin that accesses your Roundup instance. + # + # (The origin from the tracker.web setting in config.ini is + # always valid and does not need to be specified.) + # A list of space separated case sensitive + # origin headers 'scheme://host'. + # Default: + allowed_api_origins = + # How do we deal with @csrf fields in posted forms. # Set this to 'required' to block the post and notify # the user if the field is missing or invalid. @@ -485,29 +518,6 @@ # Default: yes csrf_enforce_header_origin = yes - # A comma separated list of additonal valid Origin header - # values used when enforcing the header origin. They are used - # only for the api URL's (/rest and /xmlrpc). They are not - # used for the usual html URL's. These strings must match the - # value of the Origin header exactly. So 'https://bar.edu' and - # 'https://Bar.edu' are two different Origin values. Note that - # the origin value is scheme://host. There is no path - # component. So 'https://bar.edu/' would never be valid. - # The value '*' can be used to match any origin. It must be - # first in the list if used. Note that this value allows - # any web page on the internet to make anonymous requests - # against your Roundup tracker. - # - # You need to set these if you have a web application on a - # different origin accessing your Roundup instance. - # - # (The origin from the tracker.web setting in config.ini is - # always valid and does not need to be specified.) - # A list of space separated case sensitive - # origin headers 'scheme://host'. - # Default: - allowed_api_origins = - # Verify that the X-Forwarded-Host http header matches # the host part of the tracker.web setting in config.ini. # Set this to 'required' to block the post and notify @@ -867,6 +877,14 @@ # Default: ERROR level = ERROR + # Format of the logging messages with all '%' signs + # doubled so they are not interpreted by the config file. + # Allowed value: Python LogRecord attribute named formats with % *sign doubled*. + # Also you can include the following attributes: + # %%(trace_id)s %%(trace_reason)s and %%(pct_char)s + # Default: %%(asctime)s %%(trace_id)s %%(levelname)s %%(message)s + format = %%(asctime)s %%(trace_id)s %%(levelname)s %%(message)s + # If set to yes, only the loggers configured in this section will # be used. Yes will disable gunicorn's --access-logfile. # @@ -1112,12 +1130,12 @@ # If an email has only text/html parts, use this module # to convert the html to text. Choose from beautifulsoup 4, - # dehtml - (internal code), or none to disable conversion. - # If 'none' is selected, email without a text/plain part - # will be returned to the user with a message. If - # beautifulsoup is selected but not installed dehtml will - # be used instead. - # Allowed values: beautifulsoup, dehtml, none + # justhtml, dehtml - (internal code), or none to disable + # conversion. If 'none' is selected, email without a text/plain + # part will be returned to the user with a message. If + # beautifulsoup or justhtml is selected but not installed + # dehtml will be used instead. + # Allowed values: beautifulsoup, justhtml, dehtml, none # Default: none convert_htmltotext = none diff --git a/doc/upgrading-history.txt b/doc/upgrading-history.txt index 20188a597..5e460a288 100644 --- a/doc/upgrading-history.txt +++ b/doc/upgrading-history.txt @@ -45,6 +45,57 @@ Contents: .. contents:: :local: +.. index:: Upgrading; 1.5.0 to 1.5.1 + +Migrating from 1.5.0 to 1.5.1 +============================= + +User data visibility +-------------------- + +For security reasons you should change the permissions on the user +class. We previously shipped a configuration that allowed users to see +too many of other users details, including hashed passwords under +certain circumstances. In schema.py in your tracker, replace the line:: + + db.security.addPermissionToRole('User', 'View', 'user') + +with:: + + p = db.security.addPermission(name='View', klass='user', + properties=('id', 'organisation', 'phone', 'realname', + 'timezone', 'username')) + db.security.addPermissionToRole('User', p) + +Note that this removes visibility of user emails, if you want emails to +be visible you can add 'address' and 'alternate_addresses' to the list +above. + +XSS protection for custom actions +--------------------------------- + +If you have defined your own cgi actions in your tracker instance +(e.g. in a custom ``extensions/spambayes.py`` file) you need to modify +all cases where client.error_message or client.ok_message are modified +directly. Instead of:: + + self.client.ok_message.append(...) + +you need to call:: + + self.client.add_ok_message(...) + +and the same for:: + + self.client.error_message.append(...) + +vs.:: + + self.client.add_error_message(...) + +The new calls escape the passed string by default and avoid XSS security +issues. + .. index:: Upgrading; 1.4.20 to 1.4.21 Migrating from 1.4.20 to 1.4.21 diff --git a/doc/upgrading.txt b/doc/upgrading.txt index 66faca566..a5ed78c82 100644 --- a/doc/upgrading.txt +++ b/doc/upgrading.txt @@ -42,13 +42,13 @@ General steps: Repeat for each tracker instance. -.. note:: - The v1.5.x releases of Roundup were the last to support +.. note:: The v1.5.x releases of Roundup were the last to support Python v2.5 and v2.6. Starting with the v1.6 releases of Roundup Python version 2.7 that is newer than 2.7.2 is required to run - Roundup. Starting with Roundup version 2.0.0 we also support Python 3 - versions newer than 3.6. Roundup version 2.5 supports Python - 3.7 and newer. + Roundup. Starting with Roundup version 2.0.0 we also support + Python 3 versions newer than 3.6. Roundup version 2.5 supports + Python 3.7 and newer. Roundup version 2.6 supports Python version + 3.10 and newer. Recent release notes have the following labels: @@ -58,6 +58,7 @@ Recent release notes have the following labels: * **optional** - new features or changes to existing features you might want to use * **info** - important possibly visible changes in how things operate +* **obsolete** - ignore these entries. They are no longer required. If you use virtual environments for your installation, you can run trackers with different versions of Roundup. So you @@ -108,6 +109,222 @@ your database. Migrating from 2.5.0 to 2.6.0 ============================= +Incomplete CSRF protection fixed (required) +-------------------------------------------- + +This release fixes cross site request forgery (CSRF) protection for +the PATCH method. You do not have to change anything if you are +running release 2.6.0 or newer. This bug was introduced in version +2.0.0 when the REST interface that implements the PATCH method was +added. + +The ``PATCH`` method is used with the rest interface and allows +partial modification of a Roundup object/document. If you have REST +turned off for your tracker, you are not vulnerable. + +This release also returns a 405 Method not allowed error for all +methods except GET, HEAD, and POST when querying the main (HTML) +interface. Previously, other methods acted like GET was specified. + +.. _CVE-2026-csrfL: + +Remediating missing PATCH CSRF protections +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are using the REST API, there are two ways to fix this issue +with releases 2.0.0 through 2.5.0: + + 1. if you are not using PATCH in your workflow, disable the PATCH + method in your tracker, + + 2. patch the cgi/client.py file to include the PATCH method in csrf + protections. + +Disable PATCH +^^^^^^^^^^^^^ + +To disable the PATCH method for your tracker add the following code to +the file ``interfaces.py`` in your tracker's home directory:: + + from roundup.cgi.client import UsageError + from roundup.cgi.client import Client + + original_handle_csrf = Client.handle_csrf + + def csrf_wrapper_deny_patch(self, api=False): + method = self.env['REQUEST_METHOD'] + if method == 'PATCH': + raise UsageError("Blocked Request: %s" % method) + return original_handle_csrf(self, api) + + Client.handle_csrf = csrf_wrapper_deny_patch + +then restart your tracker. You can test it using:: + + curl -u user:password -X PATCH \ + -H "Origin: " /rest/data/issue/1 + +and you should receive:: + + { "error": { "status": 400, "msg": "Blocked Request: PATCH"}} + +This will disable the use of PATCH in all web requests. When you +upgrade to release 2.6, remember to re-enable ``PATCH`` you can +re-enable it by deleting the code above from ``interfaces.py``. + +Apply CSRF Protections +^^^^^^^^^^^^^^^^^^^^^^ + +However, if you need to use PATCH request, you can change the +installed Roundup source and apply CSRF protections to the PATCH +command. + +Make a backup copy of the file before changing it. Find the lines in +cgi/client.py that look like:: + + # Assume: never allow changes via GET + if method not in ['POST', 'PUT', 'DELETE']: + if (self.form.list is not None) and ("@csrf" in self.form): + +Change the middle line so it looks like:: + + if method not in ['POST', 'PUT', 'DELETE', 'PATCH']: + +.. comment: end of CVE include marker + + +Correct property permission check in history display (recommended) +------------------------------------------------------------------ + +If you are upgrading to 2.6, you don't have to do anything and you can +skip this section. + +If you are running versions 1.6.0 to version 2.5 the filtering of +history/journal items does not work correctly if the property is +protected by a check function. + +.. _CVE-2026-history_propL: + +Remediating incomplete property permission check +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To fix this, you need to find the ``View`` and ``Edit`` checks in the +history method in the ``roundup/hyperdb.py`` file. Make a backup copy +of the file before making a change. (Note that the 1.6 releases only +checked for ``View`` permissions.) In the 1.6 release it looks +something like:: + + if enforceperm and not perm("View", + self.db.getuid(), + self.classname, + property=k ): + logger.debug("skipping unViewable property %s in > + k, j_repr) + del j[4][k] + continue + +Add:: + + itemid=nodeid + +to the View (and Edit check if present) so it looks like:: + + if enforceperm and not perm("View", + self.db.getuid(), + self.classname, + itemid=nodeid, + property=k ) + +In the 2.5 and newer releases this code block includes a check for +Edit permissions and when fixed looks like:: + + if enforceperm and not (perm("View", + uid, + self.classname, + itemid=nodeid, + property=key) or + perm("Edit", + uid, + self.classname, + itemid=nodeid, + property=key)): + logger.debug("skipping unaccessible property " + "%s::%s seen by user%s in %s", + self.classname, key, uid, j_repr) + del args[key] + continue + +.. comment: end of CVE include marker + +Default Logs Include Unique Request Identifier (info) +----------------------------------------------------- + +The default logging format has been changed from:: + + %(asctime)s %(levelname)s %(message)s + +to:: + + %(asctime)s %(trace_id)s %(levelname)s %(message)s + +So logs now look like:: + + 2025-08-20 03:25:00,308 f6RPbT2s70vvJ2jFb9BQNF DEBUG get user1 cached + +which in the previous format would look like:: + + 2025-08-20 03:25:00,308 DEBUG get user1 cached + +The new format includes ``trace_id`` which is a thread and process +unique identifier for a single request. So you can link together all +of the log lines and determine where a slow down or other +problem occurred. + +The logging format is now a ``config.ini`` parameter in the +``logging`` section with the name ``format``. You can change it if you +would like the old logging format without having to create a logging +configuration file. See :ref:`rounduplogging` for details. + +Make Pagination Links Keep Search Name (optional) +------------------------------------------------- + +When displaying a named search, index templates don't preserve +the name when using the pagination (Next/Prev) links. This is +fixed in the 2.6.0 templates for issues/bugs/tasks. To make the +change to your templates, look for the pagination links (look for +prev or previous case insensitive) in your tracker's html +subdirectory and change:: + + request.indexargs_url(request.classname, + {'@startwith':prev.first, '@pagesize':prev.size})" + +to read:: + + request.indexargs_url(request.classname, + dict({'@dispname': request.dispname} + if request.dispname + else {}, + **{'@startwith':prev.first, '@pagesize':prev.size}))" + +This code will be embedded in templating markup that is not shown +above. The change above is for your previous/prev link. The +change for the next pagination link is similar with:: + + {'@startwith':next.first, '@pagesize':next.size} + +replacing:: + + {'@startwith':prev.first, '@pagesize':prev.size} + +in the example. + +This moves the existing dictionary used to override the URL +arguments to the second argument inside a ``dict()`` call. It +also adds ``**`` before it. This change creates a new override +dictionary that includes an ``@dispname`` parameter if it is set +in the request. If ``@dispname`` is not set, the existing +dictionary contents are used. + Support authorized changes in your tracker (optional) ----------------------------------------------------- @@ -133,12 +350,296 @@ date, text etc.) do not need JavaScript to work. See :ref:`Confirming the User` in the reference manual for details. +Support for dictConfig Logging Configuration (optional) +------------------------------------------------------- + +Roundup's basic log configuration via config.ini has always had the +ability to use an ini style logging configuration to set levels per +log channel, control output file rotation etc. + +With Roundup 2.6 you can use a JSON like file to configure logging +using `dictConfig +`_. The +JSON file format as been enhanced to support comments that are +stripped before being processed by the logging system. + +You can read about the details in the :ref:`admin manual `. + +Fix user.item.html template producing invalid Javascript (optional) +------------------------------------------------------------------- + +The html template ``page.html`` in the classic, devel, minimal, and +responsive tracker templates define a ``user_src_input`` macro. This +macro produces invalid javascript for the ``onblur`` event when used +by ``user.item.html``. The only effect from this bug is a javascript +error reported in the user's browser when the user does not have edit +permissions on the page. It doesn't have any user visible impact. + +If you want to fix this, replace:: + + tal:attributes="onblur python:edit_ok and 'split_name(this)'; + +with:: + + tal:attributes="onblur python:'split_name(this)' if edit_ok else ''; + +in the ``html/page.html`` file in your tracker. + +Allow users without a password to log in (optional) +--------------------------------------------------- + +You can configure a tracker to allow a login without a password. +However the default html templates require the password field to +be filled in. This prevents a login with an empty password. + +If you don't want to allow a login without a password, you can +skip this section. + +This change automatically removes the required attribute if the +``config.ini`` ``login_empty_passwords`` setting is enabled +(true). The default is disabled with the value ``no``). + +This change is the default for the tracker templates in 2.6 and +newer. + +To add this to your tracker, change the ``page.html`` (for TAL +based trackers) or ``layout/navigation.html`` (for jinja2 trackers). + +For TAL trackers, replace the ``required`` parameter by finding +the following password input in the tracker's ``html/page.html`` +file:: + +
+ +and modifying it to look like:: + +
+ +The equivalent change for jinja2's +``html/layout/navigation.html`` based template starts with:: + + + +and changes to:: + + + +REST interface changes (info) +----------------------------- + +The default type of a message file (the msg class) is now +``text/plain``. This can be changed to a different mime type using +`the interfaces.py file`_. See `the rest documentation on getting file +content for details `_. + +Roundup supports a wildcard mime type. So ``text/*`` would match any +text resource. The response to this request should have a full mime +type like ``text/plain`` or ``text/csv`` etc. However Roundup used to +return ``text/*`` which makes it difficult for the client to interpret +the data. This release should do a better job of returning a proper +subtype replacing the ``*``. + +The mime type of ``application/*`` resolves to ``application/json`` by +default. Using it before resulted in an error. + +Malformed mime types assigned to files/messages could cause a crash, +now they are just ignored. + +There have been some internal refactorings and improvements in the +REST code that will make it a bit faster. + +Make File Contents Immutable for Everybody (optional) +----------------------------------------------------- + +The HTML based interface for files and messages doesn't provide a way +to change file content. However it is possible for privileged people +to modify the content via the web. In most cases, this change will not +be recorded in the audit log. It can be detected by looking at the +change time of the file. Then compare it to the change time of files +before and after it. Since files are created in order, the file +``msg50`` should have a change timestamp after ``msg49`` and before +``msg51``. + +The 2.6.0 release includes an immutable_file_contents.py +detector. If you copy the detector into your tracker's detector +directory nobody, including users with admin rights, can change +file/msg contents via Roundup. Changes to files would have to be +done by logging into the Roundup server and editing the files +locally. + +For non-admin user's the following edit permission for FileClass based +classes will prevent regular users from changing file content via +Roundup. Remove the existing ``Edit`` permission from your FileClass +based classes. Then add your classname to the loop. The permission +strips ``content`` from the list of editable properties and permits +editing of the other properties:: + + for cl in 'file', 'msg': + properties = list(x for x in + db.getclass(cl).getprops(protected=False).keys() + if x != 'content') + + file_edit_perm = db.security.addPermission( + name='Edit', klass=cl, + properties=properties, + description="User is allowed to edit all %s props except content" % cl) + + db.security.addPermissionToRole('User', file_edit_perm) + +Enable tokenless/nonceless CSRF protection (optional) +----------------------------------------------------- + +This version implements CSRF protection using `Cross-Site Request +Forgery by Filippo Valsorda `_. +This is an effective method for CSRF protection and is much +simpler as well. There are no configurable options unlike the 8 +options for the older method. + +It is off by default and must be manually enabled. You can enable +it on a per-tracker basis using ``config.ini``. In the ``[web]`` +section of ``config.ini`` set ``use_tokenless_csrf_protection`` to +``yes`` to enable it. This also disable validation using the older +nonce and header based CSRF settings. + +When enabled, calls to ``utils.anti_csrf_nonce()`` will always +return ``"0"``. As a result, you do not have to change your +templates. Performance should be better since the random nonce is +not generated nor saved to the otks database. + +Additional details can be found in the :ref:`nonceless CSRF` section of +the reference guide. + +Make Query Edit Page Queries Display Query Name (optional) +---------------------------------------------------------- + +When queries are started from the main ``Your Queries`` menu section, +the window shows the query name for TAL based trackers. Users can +pick which queries/searches appear in the main menu's ``Your Queries`` +section by clicking the ``edit`` link to go to the edit screen. The +``edit`` screen also lets users run the queries that aren't in the +main section. + +Before this update, the query name wasn't shown when running queries +from the ``edit`` screen. This update fixes that for all the included +templates. It also makes the jinja2 issue index template show the +query name. + +You can add this to your tracker. If you are not using a jinja2 based +tracker, open your tracker's ``html/query.edit.html`` file. Find and +change the line that includes:: + + {{ query.name.plain() }} + +with:: + + {{ query.name.plain() }} + +Then in the ``html/issue.index.html`` you will add:: + + {% if request.form['@dispname'] %} + - {{ request.form['@dispname'].value|u }} + {% endif %} + +to the ``head_title`` and ``page_header`` blocks so they look like:: + + {% block head_title %} + {% trans %}List of issues{% endtrans %} + {% if request.form['@dispname'] %} + - {{ request.form['@dispname'].value|u }} + {% endif %} + {% endblock %} + + {% block page_header %} + {% trans %}List of issues{% endtrans %} + {% if request.form['@dispname'] %} + - {{ request.form['@dispname'].value|u }} + {% endif %} + {% endblock %} + + +Modernizing Classic Tracker HTML (optional) +------------------------------------------- + +This update improves the classic tracker by changing the page layout +to use modern HTML and CSS instead of the old table layout from +2001. All the updates are done by changing the ``page.html`` and the +``style.css`` files. + +Among the fixes are: + +* HTML5 landmarks like header, main, search, and nav replace the + table that was used for layout. +* a meta viewport tag was added for mobile devices. +* the sidebar and main columns now use flexbox. They will stack and + turn into one column when the screen size is less than 600px. +* The sidebar will change from 6 blocks in a column to 6 blocks in a + responsive grid when the screen size is under 600px. +* Text in the nav/sidebar will have wrapped lines indented making it + easier to identify individual queries with long names. +* The other templates in your tracker should not need any changes. If + they are too wide the updated ``page.html`` enables keyboard or + touch horizontal scrolling to see all of a table or other content. +* A line now appears under a link when you hover over it. +* The header uses flexbox to arrange the left side (logo/page + description) and right side (search) components. + +The most noticable change is that the page title now lines up with the +edge of the screen instead of the edge of the main column. Other than +that your tracker should look pretty much the same as before. + +Two files were changed to provide this basic responsiveness: +``page.html`` and ``style.css``. + +Most local changes to ``page.html`` are done to add javascript. You +should be able to copy the new page.html from the classic tracker +template and put your ``script`` tags back in to benefit from this +upgrade. + +You should also copy ``style.css`` into your tracker home's html +directory and merge any local changes you made. At the top of the new +``style.css`` are directions for two adjustments. Long query names +that wrap in the sidebar will have their wrapped lines indented by +0.5em. You can control this by uncommenting and adjusting the value of +the css custom property ``--long-query-indent``. Additionally you can +change the 600px viewport breakpoint by following the directions at +the top of ``style.css``. + +Jinja Template Bootstrap Dependency Updated (optional) +------------------------------------------------------ + +A dependency for the jinja template has been updated. This is an +upgrade to the latest 4.x stable release. + +bootstrap: + Upgraded from 4.4.1 to 4.6.2 + +Copy the files: ``bootstrap.min.css`` and ``bootstrap.min.js`` from +the jinja2 ``static`` :term:`template` directory (meaning 3) to your +tracker's ``static`` directory. + +This change did not show any issues in testing, but you might want to +hold onto your original files in case of an issue. If you experience +and issue you should report it on the `roundup-users mailing list +`_. + .. index:: Upgrading; 2.4.0 to 2.5.0 Migrating from 2.4.0 to 2.5.0 ============================= -.. _CVE-2025-53865: +.. _CVE-2025-53865L: XSS security issue with devel and responsive templates (recommended) -------------------------------------------------------------------- @@ -376,6 +877,30 @@ references that use user supplied content in the url. Also its not positional @sort=1 can appear anywhere in the url. +Modify Custom Rest Endpoints (required) +--------------------------------------- + +If there is no interfaces.py file in your tracker home, you can +skip this section. + +In the course of code maintenance and cleanup, the variable +``input`` used when defining new REST endpoints was renamed to +``input_payload``. The ``input`` variable was renamed because it +was shadowing the ``input`` built-in function. + +If you defined a custom REST endpoint in interfaces.py that looks +like:: + + def summary2(self, input): + +you should change it to:: + + def summary2(self, input_payload): + +Then change any references to ``input`` inside the function to +``input_payload``. The section :ref:`adding_new_rest_endpoints` +has been updated if you need additional examples. + Deprecation Notices (required) ------------------------------ @@ -721,9 +1246,17 @@ request (tu.client.request), the translator for the current language You can find an example in :ref:`dynamic_csp`. -Directions for installing gpg (optional) +.. _gpginstall: + +Directions for installing gpg (obsolete) ---------------------------------------- +.. note:: + issue2551368 was closed in May 2026. Running ``pip install + gpg`` will install gpg 2.0.0 on all versions of Python supported by + Roundup. If you installed the test version use ``pip install -U + gpg`` to upgrade. + In this release a new version of the gpg module was needed for Ubuntu 24.04 and python 3.13. Paul Schwabauer produced a new version of the gpg module. However it is only on the test instance of pypi. If you @@ -763,7 +1296,7 @@ This will insert the bad API login rate limiting settings. Also if you have ``html_version`` set to ``xhtml``, you will get an error. -.. _CVE-2024-39124: +.. _CVE-2024-39124L: Fix for CVE-2024-39124 in help/calendar popups (recommended) ------------------------------------------------------------ @@ -934,9 +1467,9 @@ bug. Splitting the large script into two parts: allows use of ``structure`` on the script with no replaced strings should it be required for your tracker. -.. [#markdown-note] If you are using markdown formatting for your tracker's notes, - the user will see the markdown label rather than the long - (suspicious) URL. You may want to add something like:: +.. [#markdown-note] If you are using markdown formatting for your + tracker's notes, the user will see the markdown label rather than + the long (suspicious) URL. You may want to add something like:: a[href*=\@template]::after { content: ' [' attr(href) ']'; @@ -955,7 +1488,7 @@ section. These fixes are already present in 2.4.0. This section is for people who can not upgrade yet, and want to fix the issues. -.. _CVE-2024-39125: +.. _CVE-2024-39125L: Referer value not escaped CVE-2024-39125 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -983,7 +1516,7 @@ to:: This escapes the Referer value and prevents it from being executed. -.. _CVE-2024-39126: +.. _CVE-2024-39126L: Stop JavaScript execution from attached files CVE-2024-39126 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2173,7 +2706,7 @@ running:: roundup-admin -i table password,id,username Look for lines starting with ``{CRYPT}``. You can reset the user's -password using:: +password using [#history-pragma]_ :: roundup-admin -i roundup> set user16 password=somenewpassword @@ -2184,6 +2717,14 @@ prompt). This prevents the new password from showing up in the output of ps or shell history. The new password will be encrypted using the default encryption method (usually pbkdf2). +.. [#history-pragma] If your version of roundup-admin provides history + support, you should add ``-P history_features=2`` to the command + line or run ``pragma history_features=2`` at the ``roundup>`` + prompt. This will prevent the command line (and password) from being + saved to your history file (usually ``.roundup_admin_history`` in + your user's home directory. You can use ``roundup-admin -i + pragma list`` to see if pragmas are supported. + Enable performance improvement for wsgi mode (optional) ------------------------------------------------------- @@ -3575,56 +4116,6 @@ your tracker if you wish. It will create a new file in the current working directory called 'httpd.log' and will rotate the log file at 500K and keep two old copies of the file. -.. index:: Upgrading; 1.5.0 to 1.5.1 - -Migrating from 1.5.0 to 1.5.1 -============================= - -User data visibility --------------------- - -For security reasons you should change the permissions on the user -class. We previously shipped a configuration that allowed users to see -too many of other users details, including hashed passwords under -certain circumstances. In schema.py in your tracker, replace the line:: - - db.security.addPermissionToRole('User', 'View', 'user') - -with:: - - p = db.security.addPermission(name='View', klass='user', - properties=('id', 'organisation', 'phone', 'realname', - 'timezone', 'username')) - db.security.addPermissionToRole('User', p) - -Note that this removes visibility of user emails, if you want emails to -be visible you can add 'address' and 'alternate_addresses' to the list -above. - -XSS protection for custom actions ---------------------------------- - -If you have defined your own cgi actions in your tracker instance -(e.g. in a custom ``extensions/spambayes.py`` file) you need to modify -all cases where client.error_message or client.ok_message are modified -directly. Instead of:: - - self.client.ok_message.append(...) - -you need to call:: - - self.client.add_ok_message(...) - -and the same for:: - - self.client.error_message.append(...) - -vs.:: - - self.client.add_error_message(...) - -The new calls escape the passed string by default and avoid XSS security -issues. Migrating from older versions diff --git a/frontends/ZRoundup/ZRoundup.py b/frontends/ZRoundup/ZRoundup.py index b349e2469..6d90550e1 100644 --- a/frontends/ZRoundup/ZRoundup.py +++ b/frontends/ZRoundup/ZRoundup.py @@ -13,7 +13,7 @@ # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -# +# ''' ZRoundup module - exposes the roundup web interface to Zope This frontend works by providing a thin layer that sits between Zope and the @@ -26,15 +26,15 @@ advantages over regular CGI :) ''' -from roundup.anypy import urllib_ - -from Globals import InitializeClass, HTMLFile -from OFS.SimpleItem import Item +from AccessControl import ClassSecurityInfo, ModuleSecurityInfo +from Acquisition import Implicit +from Globals import HTMLFile, InitializeClass from OFS.PropertyManager import PropertyManager -from Acquisition import Explicit, Implicit +from OFS.SimpleItem import Item from Persistence import Persistent -from AccessControl import ClassSecurityInfo -from AccessControl import ModuleSecurityInfo + +from roundup.anypy import urllib_ + modulesecurity = ModuleSecurityInfo() import roundup.instance @@ -45,6 +45,8 @@ manage_addZRoundupForm = HTMLFile('dtml/manage_addZRoundupForm', globals()) modulesecurity.declareProtected('Add Z Roundups', 'manage_addZRoundup') + + def manage_addZRoundup(self, id, instance_home, REQUEST): """Add a ZRoundup product """ # validate the instance_home @@ -52,25 +54,31 @@ def manage_addZRoundup(self, id, instance_home, REQUEST): self._setObject(id, ZRoundup(id, instance_home)) return self.manage_main(self, REQUEST) + class RequestWrapper: '''Make the Zope RESPONSE look like a BaseHTTPServer ''' def __init__(self, RESPONSE): self.RESPONSE = RESPONSE self.wfile = self.RESPONSE + def send_response(self, status): self.RESPONSE.setStatus(status) + def send_header(self, header, value): self.RESPONSE.addHeader(header, value) + def end_headers(self): # not needed - the RESPONSE object handles this internally on write() pass + def start_response(self, headers, response): self.send_response(response) for key, value in headers: self.send_header(key, value) self.end_headers() + class FormItem: '''Make a Zope form item look like a cgi.py one ''' @@ -80,11 +88,13 @@ def __init__(self, value): self.filename = self.value.filename self.value = self.value.read() + class FormWrapper: '''Make a Zope form dict look like a cgi.py one ''' def __init__(self, form): self.__form = form + def __getitem__(self, item): entry = self.__form[item] if isinstance(entry, type([])): @@ -92,26 +102,30 @@ def __getitem__(self, item): else: entry = FormItem(entry) return entry + def __iter__(self): return iter(self.__form) + def getvalue(self, key, default=None): if key in self.__form: return self.__form[key] - else: - return default + return default + def has_key(self, item): return item in self.__form + def keys(self): return list(self.__form.keys()) def __repr__(self): - return ''%self.__form + return '' % self.__form + class ZRoundup(Item, PropertyManager, Implicit, Persistent): '''An instance of this class provides an interface between Zope and roundup for one roundup instance ''' - meta_type = 'Z Roundup' + meta_type = 'Z Roundup' security = ClassSecurityInfo() def __init__(self, id, instance_home): @@ -120,19 +134,20 @@ def __init__(self, id, instance_home): # define the properties that define this object _properties = ( - {'id':'id', 'type': 'string', 'mode': 'w'}, - {'id':'instance_home', 'type': 'string', 'mode': 'w'}, + {'id': 'id', 'type': 'string', 'mode': 'w'}, + {'id': 'instance_home', 'type': 'string', 'mode': 'w'}, ) property_extensible_schema__ = 0 # define the tabs for the management interface - manage_options= PropertyManager.manage_options + ( - {'label': 'View', 'action':'index_html'}, + manage_options = PropertyManager.manage_options + ( + {'label': 'View', 'action': 'index_html'}, ) + Item.manage_options icon = "misc_/ZRoundup/icon" security.declarePrivate('roundup_opendb') + def roundup_opendb(self): '''Open the roundup instance database for a transaction. ''' @@ -141,17 +156,17 @@ def roundup_opendb(self): env = self.REQUEST.environ # figure out the path components to set - url = urllib_.urlparse( self.absolute_url() ) + url = urllib_.urlparse(self.absolute_url()) path = url[2] - path_components = path.split( '/' ) + path_components = path.split('/') # special case when roundup is '/' in this virtual host, - if path == "/" : + if path == "/": env['SCRIPT_NAME'] = "/" env['TRACKER_NAME'] = '' - else : + else: # all but the last element is the path - env['SCRIPT_NAME'] = '/'.join( path_components[:-1] ) + env['SCRIPT_NAME'] = '/'.join(path_components[:-1]) # the last element is the name env['TRACKER_NAME'] = path_components[-1] @@ -161,20 +176,21 @@ def roundup_opendb(self): return client.Client(tracker, request, env, form) security.declareProtected('View', 'index_html') + def index_html(self): '''Alias index_html to roundup's index ''' # Redirect misdirected requests -- bugs 558867 , 565992 # PATH_INFO, as defined by the CGI spec, has the *real* request path orig_path = self.REQUEST.environ['PATH_INFO'] - if orig_path[-1] != '/' : - url = urllib_.urlparse( self.absolute_url() ) - url = list( url ) # make mutable - url[2] = url[2]+'/' # patch - url = urllib_.urlunparse( url ) # reassemble + if orig_path[-1] != '/': + url = urllib_.urlparse(self.absolute_url()) + url = list(url) # make mutable + url[2] = url[2] + '/' # patch + url = urllib_.urlunparse(url) # reassemble RESPONSE = self.REQUEST.RESPONSE - RESPONSE.setStatus( "MovedPermanently" ) # 301 - RESPONSE.setHeader( "Location" , url ) + RESPONSE.setStatus("MovedPermanently") # 301 + RESPONSE.setHeader("Location", url) return RESPONSE client = self.roundup_opendb() @@ -187,6 +203,7 @@ def __getitem__(self, item): ''' return PathElement(self, item).__of__(self) + class PathElement(Item, Implicit): def __init__(self, zr, path): self.zr = zr @@ -204,18 +221,19 @@ def index_html(self, REQUEST=None): client = self.zr.roundup_opendb() # fake the path that roundup should use client.path = self.path - # and call roundup to do something + # and call roundup to do something client.main() return '' except client.NotFound: raise Exception('NotFound ' + REQUEST.URL) pass - except: + except Exception: import traceback traceback.print_exc() # all other exceptions in roundup are valid raise + InitializeClass(ZRoundup) modulesecurity.apply(globals()) diff --git a/frontends/ZRoundup/__init__.py b/frontends/ZRoundup/__init__.py index 29c64d411..c56b91c12 100644 --- a/frontends/ZRoundup/__init__.py +++ b/frontends/ZRoundup/__init__.py @@ -13,10 +13,11 @@ # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -# -__version__='1.1' +# +__version__ = '1.1' import os + # figure where ZRoundup is installed here = None if 'INSTANCE_HOME' in os.environ: @@ -35,20 +36,24 @@ raise ValueError("Can't determine where ZRoundup is installed") # product initialisation -from .ZRoundup import ZRoundup, manage_addZRoundupForm, manage_addZRoundup +from .ZRoundup import ZRoundup, manage_addZRoundup, manage_addZRoundupForm + + def initialize(context): context.registerClass( ZRoundup, - meta_type = 'Z Roundup', - constructors = ( + meta_type='Z Roundup', + constructors=( manage_addZRoundupForm, manage_addZRoundup ) ) + # set up the icon from ImageFile import ImageFile + misc_ = { - 'icon': ImageFile('icons/tick_symbol.gif', path), + 'icon': ImageFile('icons/tick_symbol.gif', path), } diff --git a/frontends/roundup.cgi b/frontends/roundup.cgi index 2d106740e..7655a7cdc 100755 --- a/frontends/roundup.cgi +++ b/frontends/roundup.cgi @@ -16,13 +16,17 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -# python version check -from __future__ import print_function -from roundup import version_check -from roundup.i18n import _ +import os +import sys +import time + +# If roundup is not on your normal path, add it here. +# sys.path.append('/home/username/develop/roundup_dev') +from roundup import version_check # noqa: F401 +from roundup.anypy import http_ from roundup.anypy.html import html_escape -from roundup.anypy.strings import s2b, StringIO -import sys, time +from roundup.anypy.strings import StringIO, s2b +from roundup.i18n import _ # ## Configuration @@ -31,17 +35,17 @@ import sys, time # Configuration can also be provided through the OS environment (or via # the Apache "SetEnv" configuration directive). If the variables # documented below are set, they _override_ any configuation defaults -# given in this file. +# given in this file. # TRACKER_HOMES is a list of trackers, in the form # "NAME=DIRNAME2=DIR2...", where is the directory path -# separator (";" on Windows, ":" on Unix). +# separator (";" on Windows, ":" on Unix). -# Make sure the NAME part doesn't include any url-unsafe characters like +# Make sure the NAME part doesn't include any url-unsafe characters like # spaces, as these confuse the cookie handling in browsers like IE. # ROUNDUP_LOG is the name of the logfile; if it's empty or does not exist, -# logging is turned off (unless you changed the default below). +# logging is turned off (unless you changed the default below). # DEBUG_TO_CLIENT specifies whether debugging goes to the HTTP server (via # stderr) or to the web client (via cgitb). @@ -52,15 +56,27 @@ TRACKER_HOMES = { # 'example': '/path/to/example', } +# print timing at bottom of web page +#TIMING = "INLINE" +# print timing inside web page comments +#TIMING = "COMMENT" +# disable timing +TIMING = "" + + # Where to log debugging information to. Use an instance of DevNull if you # don't want to log anywhere. class DevNull: def write(self, info): pass + def close(self): pass + def flush(self): pass + + #LOG = open('/var/log/roundup.cgi.log', 'a') LOG = DevNull() @@ -68,14 +84,16 @@ LOG = DevNull() ## end configuration # +DEFAULT_ERROR_MESSAGE = http_.server.DEFAULT_ERROR_MESSAGE # # Set up the error handler -# +# try: import traceback + from roundup.cgi import cgitb -except: +except ImportError: print("Content-Type: text/plain\n") print(_("Failed to import cgitb!\n\n")) s = StringIO() @@ -87,7 +105,6 @@ except: # Check environment for config items # def checkconfig(): - import os global TRACKER_HOMES, LOG # see if there's an environment var. ROUNDUP_INSTANCE_HOMES is the @@ -100,13 +117,13 @@ def checkconfig(): TRACKER_HOMES = {} for home in homes.split(os.pathsep): try: - name, dir = home.split('=', 1) + name, dir_ = home.split('=', 1) except ValueError: # ignore invalid definitions continue - if name and dir: - TRACKER_HOMES[name] = dir - + if name and dir_: + TRACKER_HOMES[name] = dir_ + logname = os.environ.get('ROUNDUP_LOG', '') if logname: LOG = open(logname, 'a') @@ -123,29 +140,66 @@ class RequestWrapper: def __init__(self, wfile): self.rfile = sys.stdin self.wfile = wfile + self.headers = {} + def write(self, data): self.wfile.write(data) + def send_response(self, code): - self.write(s2b('Status: %s\r\n'%code)) + self.write(s2b('Status: %s\r\n' % code)) + def send_header(self, keyword, value): self.write(s2b("%s: %s\r\n" % (keyword, value))) + def end_headers(self): self.write(b"\r\n") + def start_response(self, headers, response): self.send_response(response) for key, value in headers: self.send_header(key, value) self.end_headers() + # # Main CGI handler # def main(out, err): - import os + import roundup.cgi.client import roundup.instance - path = os.environ.get('PATH_INFO', '/').split('/') + + if TIMING: + os.environ["CGI_SHOW_TIMING"] = TIMING + request = RequestWrapper(out) + problem_header = roundup.cgi.client.are_header_values_safe(os.environ) + if problem_header: + error_body = """ + + + + Error response + + +

Error response

+

Error code: 400

+

Message: Invalid value: %s.

+

Error code explanation: 400 - The value for the header is unacceptable.

+ + + """ % problem_header + + request.send_response(400) + request.send_header('Content-Type', 'text/html') + request.send_header('Content-Length', '%s' % len(error_body)) + request.end_headers() + out.write(s2b(error_body)) + return + request.path = os.environ.get('PATH_INFO', '/') + if not request.path: # missing trailing / + request.path = "/" + path = request.path.split('/') tracker = path[1] os.environ['TRACKER_NAME'] = tracker os.environ['PATH_INFO'] = '/'.join(path[2:]) @@ -158,7 +212,7 @@ def main(out, err): protocol = 'https' else: protocol = 'http' - absolute_url = '%s://%s%s/'%(protocol, os.environ['HTTP_HOST'], + absolute_url = '%s://%s%s/' % (protocol, os.environ['HTTP_HOST'], os.environ.get('REQUEST_URI', '')) request.send_header('Location', absolute_url) request.end_headers() @@ -166,23 +220,46 @@ def main(out, err): else: tracker_home = TRACKER_HOMES[tracker] tracker = roundup.instance.open(tracker_home) - import roundup.cgi.client - if hasattr(tracker, 'Client'): - client = tracker.Client(tracker, request, os.environ) - else: - client = roundup.cgi.client.Client(tracker, request, os.environ) + try: + if hasattr(tracker, 'Client'): + client = tracker.Client(tracker, request, os.environ) + else: + client = roundup.cgi.client.Client(tracker, + request, os.environ) + except ValueError as e: + code = 400 + message = str(e) + explain = "The value for the header is unacceptable" + body = DEFAULT_ERROR_MESSAGE % locals() + request.send_response(code) + request.send_header('Content-Type', 'text/html') + request.send_header('Content-Length', '%s' % len(body)) + request.end_headers() + out.write(s2b(body)) + try: client.main() except roundup.cgi.client.Unauthorised: + body = b'Unauthorised' request.send_response(403) request.send_header('Content-Type', 'text/html') + request.send_header('Content-Length', '%s' % len(body)) request.end_headers() - out.write(b'Unauthorised') + out.write(body) except roundup.cgi.client.NotFound: + body = s2b('Not found: %s' % html_escape(client.path)) request.send_response(404) request.send_header('Content-Type', 'text/html') + request.send_header('Content-Length', '%s' % len(body)) + request.end_headers() + out.write(body) + except Exception as e: + body = s2b('Error: %s' % html_escape(e)) + request.send_response(400) + request.send_header('Content-Type', 'text/html') + request.send_header('Content-Length', '%s' % len(body)) request.end_headers() - out.write(s2b('Not found: %s'%html_escape(client.path))) + out.write(body) else: from roundup.anypy import urllib_ @@ -194,12 +271,13 @@ def main(out, err): w(s2b(_('

Roundup trackers index

    \n'))) homes = sorted(TRACKER_HOMES.keys()) for tracker in homes: - w(s2b(_('
  1. %(tracker_name)s\n')%{ - 'tracker_url': os.environ['SCRIPT_NAME']+'/'+ + w(s2b(_('
  2. %(tracker_name)s\n') % { + 'tracker_url': os.environ['SCRIPT_NAME'] + '/' + urllib_.quote(tracker), 'tracker_name': html_escape(tracker)})) w(s2b(_('
'))) + # # Now do the actual CGI handling # @@ -207,7 +285,7 @@ out, err = sys.stdout, sys.stderr try: # force input/output to binary (important for file up/downloads) if sys.platform == "win32": - import os, msvcrt + import msvcrt msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) checkconfig() @@ -219,7 +297,7 @@ try: main(out_buf, err) except SystemExit: pass -except: +except Exception as e: sys.stdout, sys.stderr = out, err out.write('Content-Type: text/html\n\n') if DEBUG_TO_CLIENT: @@ -228,7 +306,7 @@ except: out.write(cgitb.breaker()) ts = time.ctime() out.write('''

%s: An error occurred. Please check - the server log for more information.

'''%ts) + the server log for more information.

''' % ts) print('EXCEPTION AT', ts, file=sys.stderr) traceback.print_exc(0, sys.stderr) diff --git a/frontends/wsgi.py b/frontends/wsgi.py index ffc0e72d6..79caf8eaa 100644 --- a/frontends/wsgi.py +++ b/frontends/wsgi.py @@ -15,8 +15,8 @@ # Enable the feature flag to speed up wsgi response by caching the # Roundup tracker instance on startup. See upgrading.txt for # more info. -feature_flags = { "cache_tracker": "" } +feature_flags = {"cache_tracker": ""} # Definition signature for app: app(environ, start_response): # If using apache mod_wsgi change app to application. -app = RequestDispatcher(tracker_home, feature_flags=feature_flags) +app = RequestDispatcher(tracker_home, feature_flags=feature_flags) diff --git a/locale/de.po b/locale/de.po index 7b94e3167..b774a23b4 100644 --- a/locale/de.po +++ b/locale/de.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2016-04-11 09:13+0200\n" "Last-Translator: Tobias Herp \n" "Language-Team: German Translators \n" @@ -30,19 +30,19 @@ msgstr "" 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:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "Die Klasse \"%(classname)s\" existiert nicht" # ../roundup/admin.py:93 :97 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "Der Parameter \"%(arg)s\" entspricht nicht dem Format Eigenschaft=Wert" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -106,7 +106,7 @@ msgstr "" "Problem: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -158,12 +158,12 @@ msgstr "" " roundup-admin help -- Hilfe zu einem Befehl anzeigen\n" " roundup-admin help all -- sämtliche Hilfen anzeigen\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Befehle:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "Befehle können abgekürzt werden, solange sie eindeutig bleiben, \n" "z.B. l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -299,25 +299,25 @@ msgstr "" "\n" "Befehlshilfe:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:336 :382 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Vorlagen:" # ../roundup/admin.py:339 :393 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Datenbanken:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -342,14 +342,14 @@ msgstr "" " geschrieben.\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -362,42 +362,42 @@ msgstr "" # ../roundup/admin.py:358 :483 :562 :612 :682 :703 :731 :802 :869 :940 :988 # :1010 :1037 :1098 :1156 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "Zu wenig Parameter übergeben" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (Passwort):" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Wiederholen):" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Bitte erneut versuchen..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "Sie müssen einen Wert für \"%(propname)s\" angeben." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -417,13 +417,13 @@ msgstr "" " gewählten Eintrags an.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, 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:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -456,7 +456,7 @@ msgstr "" " Exportverzeichnis geschrieben.\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -479,8 +479,8 @@ msgstr "" "Verwendung: exporttables [Klasse[,Klasse]] Exportverzeichnis\n" " Exportiert die Datenbank in ein Verzeichnis mit CSV-Dateien,\n" " unter Fortlassung der im Dateisystem unter $TRACKER_HOME/db/files\n" -" abgelegten Daten; um diese mitzuexportieren, verwenden Sie \"export" -"\".\n" +" abgelegten Daten; um diese mitzuexportieren, verwenden Sie " +"\"export\".\n" "\n" " Wenn Sie Klassennamen übergeben, wird der Export auf diese " "beschränkt\n" @@ -491,7 +491,7 @@ msgstr "" " Exportverzeichnis geschrieben.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -513,20 +513,20 @@ msgstr "" " " # ../roundup/admin.py:631 :669 :822 :834 :888 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "Die Klasse \"%(classname)s\" hat keine Eigenschaft \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -544,11 +544,12 @@ msgstr "" " als ID oder als Bezeichner (\"msg23\") spezifiziert werden.\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Verwendung: genconfig \n" @@ -556,7 +557,7 @@ msgstr "" " Standardwerten in die Datei .\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -564,20 +565,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -598,7 +599,7 @@ msgstr "" " " # ../roundup/admin.py:516 :531 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" @@ -606,21 +607,21 @@ msgstr "" "hier nicht ausgewertet." # ../roundup/admin.py:539 :951 :1000 :1022 -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, 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:956 +#: ../roundup/admin.py:986 #, 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:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -640,12 +641,12 @@ msgstr "" " all -- sämtlichen Hilfetext anzeigen\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Zum Thema \"%(topic)s\" existiert leider kein Hilfetext" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -668,27 +669,27 @@ msgstr "" " kann zudem wiederverwendet werden.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "verbergen" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, 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 +697,29 @@ msgstr "Eigenschaft \"%(propname)s\" bei \"%(class)s %(item_id)s\" bearbeitet" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(prop)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -729,10 +730,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -764,7 +768,7 @@ msgstr "" " verbergen).\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -774,7 +778,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -792,23 +796,23 @@ msgstr "" " Die Funktion dbinit.init() wird aufgerufen\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Administratorpasswort: " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Wiederholen: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "Tracker-Verzeichnis existiert nicht" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "Tracker-Instanz wurde nicht installiert" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -818,7 +822,7 @@ msgstr "" "Eine erneute Initialisierung löscht sämtliche Daten!\n" "Wirklich löschen? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -871,12 +875,12 @@ msgstr "" " Siehe auch unter dem Hilfethema \"initopts\".\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "Das angegebene Tracker-Verzeichnis \"%(parent)s\" existiert nicht" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -887,22 +891,22 @@ msgstr "" "installiert zu sein! Eine erneute Installation löscht sämtliche Daten!\n" "Wirklich löschen? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Vorlagensatz auswählen [classic]:" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Datenbank auswählen [anydbm]" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Fehler in der Konfiguration: \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, fuzzy, python-format msgid "" "\n" @@ -914,11 +918,11 @@ msgstr "" " Sie sollten nun die Konfigurationsdatei des Trackers bearbeiten:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... passen sie zumindest folgende Optionen an:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -944,7 +948,7 @@ msgstr "" " Anschließend MÜSSEN Sie \"roundup-admin initialise\" ausführen.\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -975,17 +979,17 @@ msgstr "" "aufgelistet.\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "Sie haben zuviele Argumente übergeben" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 #, fuzzy msgid "" "Usage: migrate\n" @@ -1028,17 +1032,17 @@ msgstr "" " es nicht nötig ist; also gewöhnen Sie es sich einfach an.\n" " " -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, fuzzy, python-format msgid "No migration action required. At schema version %s." msgstr "Keine Migration notwendig" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1048,10 +1052,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1076,11 +1080,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Ungültiges Format" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1098,25 +1102,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1145,49 +1149,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Benutzername unbekannt" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "E-Mail-Adresse unbekannt" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1211,17 +1284,17 @@ msgstr "" " normalerweise automatisch.\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "Der Eintrag \"%(designator)s\" existiert nicht" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "Der Eintrag \"%(class)s%(id)s\" existiert nicht" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1240,7 +1313,7 @@ msgstr "" " für die Benutzer wieder sichtbar.\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1262,7 +1335,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1281,7 +1354,7 @@ msgstr "" " verworfen.\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1294,48 +1367,48 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Die Rolle \"%(role)s\" existiert nicht " -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, 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:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Rolle \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr "%(description)s (%(name)s einzig für \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1343,17 +1416,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, 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:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1390,7 +1463,7 @@ msgstr "" "(\"1,2,3\").\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1404,17 +1477,18 @@ msgstr "" " Zeigt sämtliche Eigenschaften der Klasse auf.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (Schlüsseleigenschaft)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1425,22 +1499,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1477,17 +1551,17 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" entspricht nicht dem Format Eigenschaft:Breite" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1497,7 +1571,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1513,34 +1587,34 @@ msgstr "" " " # ../roundup/cgi/actions.py:546 :556 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Fehler: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, 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:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "Zur Abkürzung \"%(command)s\" passen mehrere Befehle: %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Tracker-Verzeichnis: " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, 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:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1549,15 +1623,25 @@ msgstr "" "Roundup %s ist bereit.\n" "Schreiben Sie \"help\", um zur Hilfe zu gelangen." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Bemerkung: Befehlsverlauf/-bearbeitung möglicherweise nicht verfügbar" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "beenden..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Es gibt noch ungespeicherte Änderungen. Änderungen speichern (y/N)?" @@ -1568,11 +1652,11 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "Konnte den Datenbanktyp nicht ermitteln" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, fuzzy, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " @@ -1581,30 +1665,30 @@ msgstr "" "Konnte die Datenbank nicht öffnen - das erforderliche Modul '%s' ist nicht " "verfügbar" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, python-format msgid "Couldn't open database - the required module '%s' is not available" msgstr "" "Konnte die Datenbank nicht öffnen - das erforderliche Modul '%s' ist nicht " "verfügbar" -#: ../roundup/backends/back_anydbm.py:873 -#: ../roundup/backends/back_anydbm.py:886 -#: ../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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "Datenbank nur zum Lesen geöffnet" @@ -1625,7 +1709,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1681,57 +1765,52 @@ msgstr "Eigenschaft %s: %r ist keine Zahl" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Zeichensatz nicht erkannt: %(url)s" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1758,15 +1837,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "Ungültige Anforderung" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "" @@ -1789,14 +1868,14 @@ msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s wurde gelöscht" # ../roundup/cgi/actions.py:174 :202 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Sie haben keine Berechtigung, Abfragen zu bearbeiten." # ../roundup/cgi/actions.py:180 :209 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Sie haben keine Berechtigung, Abfragen zu speichern." @@ -1805,50 +1884,56 @@ msgstr "Sie haben keine Berechtigung, Abfragen zu speichern." msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Ungültige Anforderung" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Ungültiger Benutzername" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "" "Sie sind nicht berechtigt, Einträge der Klasse \"%(class)s\" zu erstellen" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "" "Sie sind nicht berechtigt, Einträge der Klasse \"%(class)s\" zu bearbeiten" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Die Einträge wurden aktualisiert" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, 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:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "Der Eintrag \"%(class)s%(id)s\" wurde erstellt" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View dessen Änderungen in einem " "neuen Fenster." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Fehler bei der Bearbeitung: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:546 :556 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Fehler: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1873,12 +1966,12 @@ msgstr "" "(Ein Fehler in Mozilla kann diese Meldung hervorrufen, bitte prüfen Sie Ihr " "E-Mail-Konto)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Passwort zurücksetzen" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1887,29 +1980,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, 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:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Benutzername unbekannt" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "E-Mail-Adresse unbekannt" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 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:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Passwort bestätigen" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1923,31 +2016,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "Eine E-Mail wurde an %s versandt" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Sie sind nun registriert. Willkommen!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1963,12 +2056,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1978,49 +2071,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "Bei der Registrierung dürfen keine Rollen angegeben werden" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Sie wurden vom System abgemeldet" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "Benutzername notwendig" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Ungültiger Benutzername" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Sie sind nicht berechtigt, sich anzumelden" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, 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" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Passwort zurücksetzen" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

Templating Error

\n" @@ -2031,28 +2134,28 @@ msgstr "" "

%(exc_type)s: %(exc_value)s

\n" "

Es folgen Informationen zum Fehler:

" -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
  • \"%(name)s\" (%(info)s)
  • " msgstr "
  • \"%(name)s\" (%(info)s)
  • " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
  • Looking for \"%(name)s\", current path:
      %(path)s
  • " msgstr "" "
  • Suche nach \"%(name)s\", aktuelles Verzeichnis:
      %(path)s
  • " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
  • In %s
  • " msgstr "
  • In %s
  • " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Ein Problem ist in der Vorlage \"%s\" aufgetreten." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2071,17 +2174,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Vollständiger Traceback:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

    A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2091,24 +2194,24 @@ msgstr "" "Sie die Aufrufe, welche zu dem Fehler führten. Der letzte (innerste) Aufruf " "erscheint dabei zuoberst. Der Fehler hat folgende Attribute: " -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<file ist None - Wahrscheinlich in einem eval oder einem " "exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "in %s" # ../roundup/cgi/cgitb.py:145 :151 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "nicht definiert" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

    An error has occurred

    \n" @@ -2122,165 +2225,161 @@ msgstr "" "Admistratoren wurden benachrichtigt.

    \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "Gast-Benutzer sind nicht berechtigt, das Web-Interface zu benutzen." -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Formular-Fehler: " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Zeichensatz nicht erkannt: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "Gast-Benutzer sind nicht berechtigt, das Web-Interface zu benutzen." -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Ungültiger Benutzername %s" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Ungültiger Benutzername %s" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, fuzzy, python-format msgid "Invalid HOST %s" msgstr "Ungültige Anforderung %s" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Sie sind nicht berechtigt, diese Seite anzuzeigen." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, 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: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 "" -"%(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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2346,72 +2445,72 @@ msgstr[1] "" "Die Eigenschaften \"%(property)s\" müssen für die Klasse \"%(class)s\" " "angegeben werden" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "" "Sie sind nicht berechtigt, die Aktion \"%(action)s\" auf Einträge der " "Klasse \"%(class)s\" anzuwenden" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(Liste)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "Eintrag speichern" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[verborgen]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Neuer Eintrag - Noch kein Verlauf" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Speichern" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "Die gewählte Eigenschaft existiert nicht mehr" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "Die verlinkte Klasse \"%(classname)s\" existiert nicht mehr" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:905 :926 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "Der verknüpfte Eintrag existiert nicht mehr" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (kein Wert)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Dieses Ereignis kann nicht im Verlauf angezeigt werden!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Bitte beachten:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Verlauf" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Datum" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Benutzer" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Aktion" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Argumente" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "Kopie von %(class)s %(id)s" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "Nein" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Ja" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2467,29 +2566,34 @@ msgstr "" "Der voreingestellte Wert einer DateHTML-Eigenschaft muss entweder ein\n" "DateHTML-Objekt sein oder ein Datum repräsentieren." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2510,24 +2614,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Ungültige Anforderung" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Ungültige Anforderung" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2536,11 +2644,11 @@ msgstr "" "Kein gültiges Datum: %r \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "oder \"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "Konnte Körnigkeit nicht ermitteln" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2549,7 +2657,7 @@ msgstr "" "%r ist keine Datums- oder Zeitangabe (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", " "\"HH:MM:SS\" oder \"yyyy-mm-dd.HH:MM:SS.SSS\")" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2558,163 +2666,163 @@ msgstr "" "Keine gültige Intervall-Angabe: \"%s\" [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:" "SS] [Datum]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" "Keine gültige Intervall-Angabe: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s Jahr" msgstr[1] "%(number)s Jahren" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s Monat" msgstr[1] "%(number)s Monaten" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s Woche" msgstr[1] "%(number)s Wochen" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s Tag" msgstr[1] "%(number)s Tagen" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "morgen" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "gestern" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s Stunde" msgstr[1] "%(number)s Stunden" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "einer Stunde" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 1/2 Stunden" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4 Stunde" msgstr[1] "1 %(number)s/4 Stunden" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "in Kürze" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "soeben" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1 Minute" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s Minute" msgstr[1] "%(number)s Minuten" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "1/2 Stunde" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4 Stunde" msgstr[1] "%(number)s/4 Stunden" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "vor %s" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "in %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Eigenschaft %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, 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:184 +#: ../roundup/hyperdb.py:186 #, 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:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "Eigenschaft %s: %r ist keine Zahl" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "Eigenschaft %s: %r ist keine Zahl" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "\"%s\" ist kein gültiger Bezeichner" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "Keine Eigenschaft: %s" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, 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:2095 +#: ../roundup/hyperdb.py:2098 #, fuzzy, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "%r ist keine Eigenschaft von %s" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2723,23 +2831,22 @@ msgstr "" "WARNUNG: Das Verzeichnis '%s'\n" "\tenthält Vorlagen im alten Format, die ignoriert werden." -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "Nachricht signiert mit unbekanntem Schlüssel: %s" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "Nachricht signiert mit abgelaufenem Schlüssel: %s" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "Nachricht signiert mit zurückgezogenem Schlüssel: %s" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "Ungültige PGP-Signatur festgestellt." @@ -2808,8 +2915,8 @@ msgid "" "Subject was: \"%(subject)s\"\n" msgstr "" "\n" -"Der von Ihnen in der Betreffzeile angegebene Klassenname (\"%(classname)s" -"\")existiert in der Datenbank nicht.\n" +"Der von Ihnen in der Betreffzeile angegebene Klassenname " +"(\"%(classname)s\")existiert in der Datenbank nicht.\n" "Gültige Klassen sind: %(validname)s\n" "Die Betreffzeile war: \"%(subject)s\"\n" @@ -3005,8 +3112,7 @@ msgstr "" "Es gab ein Problem mit Ihrer Nachricht:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -3019,7 +3125,7 @@ msgstr "" "Sie sich an %(mailadmin)s und bitten Sie um Korrektur der\n" "fehlerhaften Eigenschaften: %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -3032,11 +3138,11 @@ msgstr "" "Sie sich an %(mailadmin)s und bitten Sie um Korrektur der\n" "fehlerhaften Klasse: %(classname)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "entspricht nicht der Form [arg=wert,wert,...;arg=wert,wert,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -3044,7 +3150,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -3052,207 +3158,208 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Ungültiger Benutzername %s" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Ungültiger Benutzername %s" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "Dateien" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "Kommentare" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "Interessenten" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "ersetzt durch" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "Titel" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "zugewiesen" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "Schlagwort" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "Priorität" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "Status" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "Aktivität" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "Akteur" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "Erstellungsdatum" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "Ersteller" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "Neue Nachricht von %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s merkte an:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "Änderung von %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, 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:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3279,7 +3386,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "Verzeichnis für Tracker-Demo eingeben [%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3288,37 +3395,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Verwendung: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "Keine Tracker-Vorlage gefunden im Verzeichnis %s" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Sie haben nicht genügend Angaben zur E-Mail-Quelle gemacht" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Fehler: %s-Optionen ungültig" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3354,7 +3461,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

    Roundup trackers index

      \n" @@ -3362,63 +3469,63 @@ msgstr "" "Roundup Tracker-Liste\n" "

      Roundup Tracker-Liste

        \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(type)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "" "WARNUNG: die Option \"-g\" wird ignoriert, da Sie nicht Administrator sind" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "Die Gruppe kann nicht gewechselt werden - das Modul grp fehlt" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "Die Gruppe %(group)s existiert nicht" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "" "Dieser Prozess kann nicht unter dem Administrator-Konto (\"root\") laufen!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" "WARNUNG: die Option \"-u\" wird ignoriert, da Sie nicht Administrator sind" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "Der Benutzer kann nicht gewechselt werden - das Modul pwd fehlt" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "Der Benutzer %(user)s existiert nicht" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3434,7 +3541,7 @@ msgstr "" " Zudem müssen Sie die Logfile-Option aktivieren.\n" " \"roundup-server -c help\" zeigt eine weitere Hilfe zum Thema." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3450,7 +3557,7 @@ msgstr "" " die Prozess-ID in die Datei PIDDatei.\n" " Die Option -l muss dann auch angegeben werden." -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3576,25 +3683,25 @@ msgstr "" " URLs Probleme bereiten könnten. Am besten verwenden Sie nur Buchstaben, \n" " Zahlen und \"-_\".\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "Instanzen müssen als Tracker-Name=Tracker-Verzeichnis angegeben werden" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Konfiguration in der Datei %s gespeichert" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Der Roundup-Server wurde unter %(HOST)s:%(PORT)s gestartet" @@ -3749,13 +3856,13 @@ msgstr "<< zurück" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3766,13 +3873,13 @@ msgstr "${start}..${end} von ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3889,6 +3996,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Dateiliste - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Speichern" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4100,53 +4244,53 @@ msgstr "Ersteller" msgid "Assigned To" msgstr "Zugewiesen" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Als CSV-Datei herunterladen" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Sortieren:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- nichts -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Absteigend:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Gruppieren:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Aktualisieren" @@ -4203,7 +4347,7 @@ msgid "Assigned To" msgstr "Zugewiesen" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4239,20 +4383,21 @@ msgstr "kopieren" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
        Note:  highlighted  fields are required.
        " +"
        Note:  highlighted  fields are required.
        " msgstr "" -" " -"
        Achtung:  Fett markierte  Felder sind immer auszufüllen.
        " +"
        Achtung:  Fett markierte  Felder sind immer " +"auszufüllen.
        " #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy msgid "" "Created on ${creation} by ${creator}, last changed ${activity} by ${actor}." msgstr "" -"Erstellt am ${creation} durch ${creator}, geändert am " -"${activity} durch ${actor}." +"Erstellt am ${creation} durch ${creator}, geändert am " +"${activity} durch ${actor}." #: ../share/roundup/templates/classic/html/issue.item.html:149 #: ../share/roundup/templates/classic/html/msg.item.html:61 @@ -4596,8 +4741,8 @@ msgid "Query name**:" msgstr "Speichern unter**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4728,18 +4873,22 @@ msgstr "Empfänger" msgid "Content" msgstr "Inhalt" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Abfragen (bearbeiten)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Aufgaben" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4751,7 +4900,7 @@ msgstr "Aufgaben" msgid "Create New" msgstr "neuer Eintrag" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4760,163 +4909,163 @@ msgstr "neuer Eintrag" msgid "Show Unassigned" msgstr "nicht zugewiesen" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "alle anzeigen" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Aufgabe anzeigen:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "bearbeiten" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Administration" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Klassenliste" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Benutzerliste" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Benutzer hinzufügen" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "anmelden" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "dauerhaft anmelden?" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "registrieren" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Passwort vergessen?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Hallo, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Ihre Aufgaben" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Ihr Konto" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "abmelden" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Hilfe" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup-Handbuch" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "diese Nachricht löschen" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "egal" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "kein Wert" @@ -5593,11 +5742,11 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" -"Erstellt am ${creation} durch ${creator}, geändert am " -"${activity} durch ${actor}." +"Erstellt am ${creation} durch ${creator}, geändert am " +"${activity} durch ${actor}." #: ../share/roundup/templates/devel/html/bug.item.html:226 #: ../share/roundup/templates/devel/html/file.index.html:10 @@ -5835,22 +5984,22 @@ msgstr "" msgid "User" msgstr "Benutzer hinzufügen" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "mir zugewiesen" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Abfragen (bearbeiten)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Vorhandene Schlagwörter" @@ -6017,27 +6166,27 @@ msgid "Please log in or register." msgstr "Bitte anmelden oder registrieren" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} von ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6080,6 +6229,14 @@ msgstr "Aufgabe anzeigen" msgid "Password" msgstr "Passwort" +#, 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 "" +#~ "%(starttag)sCache benutzt: %(cache_hits)d, verfehlt: %(cache_misses)d. " +#~ "Einträge laden: %(get_items)fs; filtern: %(filtering)fs.%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/en.po b/locale/en.po index dbc009788..833519127 100644 --- a/locale/en.po +++ b/locale/en.po @@ -9,9 +9,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-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 @@ msgstr "" msgid "You may not retire the admin or anonymous user" msgstr "" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "" -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" "\n" msgstr "" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -134,17 +134,17 @@ msgid "" " roundup-admin help all -- all available help\n" msgstr "" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 msgid "Commands: " msgstr "" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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:281 +#: ../roundup/admin.py:310 msgid "" "\n" "All commands (except help) require a tracker specifier. This is just\n" @@ -212,23 +212,23 @@ msgid "" "Command help:\n" msgstr "" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "" -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "" -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -242,54 +242,54 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr "" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "" -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "" -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 msgid "" "Usage: display designator[,designator]*\n" " Show the property values for the given node(s).\n" @@ -302,13 +302,13 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 msgid "" "Usage: export [[-]class[,class]] export_dir\n" " Export the database and file content.\n" @@ -327,7 +327,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" " Export only the database to files, no file content.\n" @@ -347,7 +347,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 msgid "" "Usage: filter classname propname=value ...\n" " Find the nodes of the given class with a given property value.\n" @@ -360,19 +360,19 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, python-format msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s." msgstr "" -#: ../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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -383,14 +383,15 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -398,20 +399,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 msgid "" "Usage: get property designator[,designator]*\n" " Get the given property of one or more designator(s).\n" @@ -424,23 +425,23 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -452,12 +453,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 msgid "" "Usage: history designator [skipquiet] [raw]\n" " Show the history entries of a designator.\n" @@ -472,26 +473,26 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 msgid "removed" msgstr "" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "" @@ -499,29 +500,29 @@ msgstr "" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, python-format msgid "%(prop)s was %(value)s" msgstr "" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 msgid "" "Usage: import import_dir\n" " Import a database and file contents from the directory.\n" @@ -531,10 +532,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -545,7 +549,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -555,7 +559,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -566,30 +570,30 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr "" -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 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:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -615,12 +619,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -628,20 +632,20 @@ msgid "" "Erase it? Y/N: " msgstr "" -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 msgid "Select template" msgstr "" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 msgid "Select backend" msgstr "" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -650,11 +654,11 @@ msgid "" " %(config_file)s" msgstr "" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr "" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -671,7 +675,7 @@ msgid "" "---------------------------------------------------------------------------\n" msgstr "" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -687,17 +691,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -720,17 +724,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 msgid "" "Usage: pack period | date\n" " Remove journal entries older than the date/period.\n" @@ -739,10 +743,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -750,11 +754,11 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -772,25 +776,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -819,49 +823,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, python-format +msgid "Unknown readline parameter %s" +msgstr "" + +#: ../roundup/admin.py:1943 msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" " Re-generate a tracker's search indexes.\n" @@ -878,17 +951,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 msgid "" "Usage: restore designator[,designator]*\n" " Restore the retired node specified by designator.\n" @@ -900,7 +973,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 msgid "" "Usage: retire designator[,designator]*\n" " Retire the node specified by designator.\n" @@ -914,7 +987,7 @@ msgid "" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -926,7 +999,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -939,46 +1012,46 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, python-format msgid "No such Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, python-format msgid "Role \"%(name)s\":\n" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n" msgstr "" -#: ../roundup/admin.py:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -986,17 +1059,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr "" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, python-format msgid " %(description)s (%(name)s)\n" msgstr "" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 msgid "" "Usage: set items property=value [property=value ...]\n" " Set the given properties of one or more items(s).\n" @@ -1017,7 +1090,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1026,17 +1099,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, python-format msgid "%(key)s: %(value)s\n" msgstr "" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1047,38 +1120,38 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " msgstr "" -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1088,7 +1161,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1098,49 +1171,58 @@ msgid "" " " msgstr "" -#: ../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 +#: ../roundup/admin.py:2358 #, python-format -msgid "Error: %s" +msgid "" +"\n" +"Error: %s" msgstr "" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" "Type \"help\" for help." msgstr "" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." msgstr "" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +msgid "Command history and line editing not available" +msgstr "" + +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "" -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "" @@ -1151,39 +1233,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1204,7 +1286,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1260,57 +1342,52 @@ msgstr "" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, python-format msgid "Unrecognized scheme in %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1335,15 +1412,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" msgstr "" #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266 -#: ../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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "" @@ -1363,13 +1440,13 @@ msgstr "" msgid "%(classname)s %(itemid)s has been restored" msgstr "" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "" -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "" @@ -1378,70 +1455,83 @@ msgstr "" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 msgid "Invalid number: " msgstr "" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 msgid "Invalid integer: " msgstr "" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr "" -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View their changes in a new window." msgstr "" -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "" -#: ../roundup/cgi/actions.py:936 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../roundup/cgi/actions.py:953 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:977 +#: ../roundup/cgi/actions.py:994 #, python-format msgid "Password reset for %s" msgstr "" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1450,29 +1540,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, python-format msgid "Confirm reset of password for %s" msgstr "" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1486,31 +1576,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, python-format msgid "Email sent to %s." msgstr "" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1526,12 +1616,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1541,49 +1631,58 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, python-format msgid "You do not have permission to view %(class)s" msgstr "" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +msgid "Password incorrect." +msgstr "" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

        Templating Error

        \n" @@ -1591,27 +1690,27 @@ msgid "" "

        Debugging information follows

        " msgstr "" -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
      1. \"%(name)s\" (%(info)s)
      2. " msgstr "" -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
      3. Looking for \"%(name)s\", current path:
          %(path)s
      4. " msgstr "" -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
      5. In %s
      6. " msgstr "" -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "" -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1623,38 +1722,38 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

        A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " "call first. The exception attributes are:" msgstr "" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "" -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

        An error has occurred

        \n" @@ -1663,162 +1762,160 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 msgid "Client is not allowed to use Rest Interface." msgstr "" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, python-format msgid "Invalid Referer: %s" msgstr "" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, python-format msgid "Invalid Origin %s" msgstr "" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -1876,141 +1973,146 @@ msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "" msgstr[1] "" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, python-format msgid "" "This event %s is not handled by the history display!" msgstr "" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." msgstr "" -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2031,225 +2133,228 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 msgid "Valid languages: " msgstr "" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 msgid "Expected languages: " msgstr "" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec])" msgstr "" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, python-format msgid "property %(property)s: %(errormsg)s" msgstr "" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr "" -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" "\tcontains old-style template - ignored" msgstr "" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2436,8 +2541,7 @@ msgid "" " %(message)s\n" msgstr "" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2446,7 +2550,7 @@ msgid "" " %(errors)s\n" msgstr "" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, python-format msgid "" "\n" @@ -2455,11 +2559,11 @@ msgid "" " %(classname)s\n" msgstr "" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2467,7 +2571,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2475,205 +2579,206 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, python-format msgid "Invalid value for --style: %s" msgstr "" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, python-format msgid "Invalid attribute %s" msgstr "" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -2695,7 +2800,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -2704,36 +2809,36 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 msgid "" "\n" "Error: not enough source specification information" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " @@ -2766,64 +2871,64 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

        Roundup trackers index

          \n" msgstr "" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, python-format msgid "Error: %(type)s: %(value)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr "" -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr "" -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, python-format msgid "" "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -2833,7 +2938,7 @@ msgid "" " specifics." msgstr "" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 msgid "" " -u runs the Roundup web server as this UID\n" " -g runs the Roundup web server as this GID\n" @@ -2843,7 +2948,7 @@ msgid "" " -D run the server in the foreground even when -d is used." msgstr "" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, python-format msgid "" "\n" @@ -2916,24 +3021,24 @@ msgid "" " any url-unsafe characters like spaces, as these confuse IE.\n" msgstr "" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "" -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "" @@ -3081,13 +3186,13 @@ msgstr "" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3098,13 +3203,13 @@ msgstr "" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3210,6 +3315,41 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +msgid "Authorize - ${tracker}" +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +msgid "Authorize Change" +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3421,53 +3561,53 @@ msgstr "" msgid "Assigned To" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "" @@ -3524,7 +3664,7 @@ msgid "Assigned To" msgstr "" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3560,8 +3700,9 @@ msgstr "" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
          Note:  highlighted  fields are required.
          " +"
          Note:  highlighted  fields are required.
          " msgstr "" #: ../share/roundup/templates/classic/html/issue.item.html:145 @@ -3911,8 +4052,8 @@ msgid "Query name**:" msgstr "" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4038,18 +4179,22 @@ msgstr "" msgid "Content" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4061,7 +4206,7 @@ msgstr "" msgid "Create New" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4070,163 +4215,163 @@ msgstr "" msgid "Show Unassigned" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "" @@ -4866,8 +5011,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/bug.item.html:310 #: ../share/roundup/templates/responsive/html/task.item.html:277 msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" #: ../share/roundup/templates/devel/html/bug.item.html:226 @@ -5082,20 +5227,20 @@ msgstr "" msgid "User" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 msgid "Bugs assigned to you" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 msgid "Edit Keywords" msgstr "" @@ -5245,26 +5390,26 @@ msgid "Please log in or register." msgstr "" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 msgid "${start}..${end} out of ${total}" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/locale/es.po b/locale/es.po index 90b283994..0da65c537 100644 --- a/locale/es.po +++ b/locale/es.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 10:45+0100\n" "Last-Translator: Ramiro Morales \n" "Language-Team: Spanish Translators \n" @@ -28,19 +28,19 @@ msgstr "" 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:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:85 :955 :1004 :1026 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "la clase \"%(classname)s\" no existe" # ../roundup/admin.py:95 :99 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "el argumento \"%(arg)s\" no es de la forma nombrepropiedad=valor" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -105,7 +105,7 @@ msgstr "" "Problema: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -164,12 +164,12 @@ msgstr "" " roundup-admin help -- ayuda especfica a un comando\n" " roundup-admin help all -- toda la ayuda disponible\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Comandos:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "Los comandos pueden ser abreviados siempre y cuando la abreviacin\n" "coincida con slo un comando, ej. l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -324,25 +324,25 @@ msgstr "" "\n" "Ayuda sobre comandos:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:338 :387 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Plantillas:" # ../roundup/admin.py:341 :398 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Motor de almacenamiento" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -367,14 +367,14 @@ msgstr "" " son automticamente escritos si resultan exitosos.\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -388,42 +388,42 @@ msgstr "" # ../roundup/admin.py:360 :442 :503 :582 :632 :688 :709 :737 :808 :875 :946 # :994 :1016 :1043 :1106 :1173 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "No se provey una cantidad suficiente de argumentos" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (Contrasea): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Nuevamente): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Lo lamento, intente nuevamente..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "debe proveer la propiedad \"%(propname)s\"." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -443,13 +443,13 @@ msgstr "" "especificado.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -481,7 +481,7 @@ msgstr "" " directorio de destino especificado (dir_exportacin).\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -514,7 +514,7 @@ msgstr "" " directorio de destino especificado.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -539,20 +539,20 @@ msgstr "" " " # ../roundup/admin.py:675 :828 :840 :894 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s no posee la propiedad \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -573,11 +573,12 @@ msgstr "" " enlazado o su valor clave.\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Uso: genconfig \n" @@ -586,7 +587,7 @@ msgstr "" " con valores por defecto en el fichero .\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -594,20 +595,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -628,7 +629,7 @@ msgstr "" " " # ../roundup/admin.py:536 :551 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" @@ -636,18 +637,18 @@ msgstr "" "no puede usarse." # ../roundup/admin.py:559 :957 :1006 :1028 -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "no existe nodo de clase %(classname)s llamado \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "no existe propiedad de clase %(classname)s llamado \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -667,12 +668,12 @@ msgstr "" " all -- toda la ayuda disponible\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Lo siento, no hay ayuda para \"%(topic)s\"" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -695,27 +696,27 @@ msgstr "" " reusado.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "eliminar" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, 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 +724,29 @@ msgstr "Edici #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -756,10 +757,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -792,7 +796,7 @@ msgstr "" " tediosamente, retirar toda los datos viejos.)\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -802,7 +806,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -821,23 +825,23 @@ msgstr "" " Ejecuta la funcin de inicializacin dbinit.init() del tracker\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Contrasea de administracin: " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Confirmar: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "El directorio base de la instancia no existe" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "La instancia no ha sido instalada" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -847,7 +851,7 @@ msgstr "" "Si la reinicializa, perder toda la informacin!\n" "Eliminar la misma? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -903,14 +907,14 @@ msgstr "" " Vea tambin initopts help.\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, 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:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -921,22 +925,22 @@ msgstr "" "Si Ud. lo reinstala, perder toda la informacin relacionada al mismo!\n" "Elimino la misma? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Seleccione la plantilla [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Selecccione el motor de almacenamiento [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Error en opciones de configuracin: \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -949,11 +953,11 @@ msgstr "" " Ud. debe ahora editar el fichero de configuracin del tracker:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... como mnimo, debe configurar las siguientes opciones:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -981,7 +985,7 @@ msgstr "" " completado los pasos arriba descriptos.\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -1011,17 +1015,17 @@ msgstr "" "clase.\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "Demasiados argumentos" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -1044,17 +1048,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1064,10 +1068,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1092,11 +1096,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Formato invlido" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1114,25 +1118,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1161,49 +1165,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Usuario desconocido" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Direccin de e-mail desconocida" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1227,17 +1300,17 @@ msgstr "" " Es un comando que por lo general se ejecuta automticamente.\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "no existe un tem llamado \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "no existe un tem llamado \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1256,7 +1329,7 @@ msgstr "" " para los usuarios.\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1278,7 +1351,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1300,7 +1373,7 @@ msgstr "" " no introducira cambios en la base de datos.\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1313,49 +1386,49 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "No existe un Rol llamado \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, 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:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Rol \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s para \"%(klass)s\" solamente)" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1363,17 +1436,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, 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:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1408,7 +1481,7 @@ msgstr "" " asociados como nmeros separados por comas (\"1,2,3\").\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1422,17 +1495,18 @@ msgstr "" " Visualiza las propiedades para una cierta clase.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (propiedad de clave)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1443,22 +1517,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1496,17 +1570,17 @@ msgstr "" " caracteres.\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" no es de la forma nombre:longitud" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1516,7 +1590,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1533,36 +1607,36 @@ msgstr "" " " # ../roundup/cgi/actions.py:579 :590 :761 :780 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Error: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, 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:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "Coinciden mas de un comando \"%(command)s\": %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Ingrese directorio base del tracker: " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "Error: No se pudo abrir el tracker: %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1571,15 +1645,25 @@ msgstr "" "Roundup %s listo para comandos.\n" "Tipee \"help\" para ayuda." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Nota: historia y edicin de comandos no disponible" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "salir..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Hay cambios sin guardar. Debo guardar los mismos (y/N)? " @@ -1590,39 +1674,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1643,7 +1727,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1701,57 +1785,52 @@ msgstr "" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Conjunto de caracteres desconocido: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1777,16 +1856,16 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr "Formato invlido" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "Ud. no posee los permisos necesarios para crear %(class)s" @@ -1807,14 +1886,14 @@ msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s ha sido retirado" # ../roundup/cgi/actions.py:163 :191 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Ud. no posee los permisos necesarios para editar consultas" # ../roundup/cgi/actions.py:169 :197 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Ud. no posee los permisos necesarios para grabar consultas" @@ -1823,49 +1902,55 @@ msgstr "Ud. no posee los permisos necesarios para grabar consultas" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Formato invlido" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Ud. no posee los permisos necesarios para crear %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Ud. no posee los permisos necesarios para editar %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Items editados exitosamente" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, 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:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s creado" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View cambios que dicha persona ha " "realizado en una ventana aparte." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Error de edicin: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:579 :590 :761 :780 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Error: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1890,12 +1983,12 @@ msgstr "" "(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:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Solicitud de generacin de nueva contrasea" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1904,29 +1997,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, 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:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Usuario desconocido" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Direccin de e-mail desconocida" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 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:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Confirmar contrasea" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1940,31 +2033,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "Se ha enviado un mensaje de e-mail a %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Ud. se ha registrado exitosamente, bienvenido!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1980,12 +2073,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1995,50 +2088,60 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 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:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Ha salido del sistema exitosamente" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "Se requiere el ingreso de un nombre de usuario" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Ud. no tiene permiso para ingresar al sistema" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "Ud. no posee los permisos necesarios para editar %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Solicitud de generacin de nueva contrasea" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

          Templating Error

          \n" @@ -2049,27 +2152,27 @@ msgstr "" "

          %(exc_type)s: %(exc_value)s

          \n" "

          Informacin de depuracin:

          " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
        1. \"%(name)s\" (%(info)s)
        2. " msgstr "
        3. \"%(name)s\" (%(info)s)
        4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
        5. Looking for \"%(name)s\", current path:
            %(path)s
        6. " msgstr "
        7. Buscando \"%(name)s\", ruta actual:
            %(path)s
        8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
        9. In %s
        10. " msgstr "
        11. En %s
        12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Ha ocurrido un problema en su template \"%s\"." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2088,17 +2191,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Traza completa" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

          A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2108,23 +2211,23 @@ msgstr "" "de llamadas a funciones que llevaron al error, con la llamada mas reciente " "(la mas anidada) ubicada primera. Los atributos de la excepcin son:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<file es None - probablemente dentro de eval or exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "en %s" # ../roundup/cgi/cgitb.py:172 :178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "indefinido/a" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

          An error has occurred

          \n" @@ -2139,167 +2242,163 @@ msgstr "" "p>\n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "Los usuarios anonimos no tienen permitido usar esta interfaz Web" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Error de formulario" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Conjunto de caracteres desconocido: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "Los usuarios anonimos no tienen permitido usar esta interfaz Web" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Ud. no tiene permitido ver este fichero" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "%(starttag)sTiempo transcurrido: %(seconds)fs%(endtag)s\n" -#: ../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 "" -"%(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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2322,8 +2421,8 @@ msgid "" "The form action claims to require property \"%(property)s\" which doesn't " "exist" msgstr "" -"La accion de formulario especifica que requiere la propiedad \"%(property)s" -"\" la cual no existe" +"La accion de formulario especifica que requiere la propiedad " +"\"%(property)s\" la cual no existe" #: ../roundup/cgi/form_parser.py:347 #, python-format @@ -2369,72 +2468,72 @@ msgstr[1] "" "Las propiedades %(property)s de la clase %(class)s son obligatorias y no se " "han provisto" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "Ud. no tiene permitido %(action)s items de la clase %(class)s" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(lista)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[oculto]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Nuevo nodo - sin historia" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Enviar modificaciones" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "La propiedad indicada ya no existe" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "La clase relacionada %(classname)s ya no existe" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:903 :924 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "El nodo relacionado ya no existe" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (sin valor)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Este evento no es soportado por la visualizacin de historia!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Nota:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Historia" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Fecha" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Usuario" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Accin" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Args" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "Copia de %(class)s %(id)s" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "No" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Si" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2490,27 +2589,32 @@ msgstr "" "el valor por defecto para DateHTMLProperty debe ser un DateHTMLProperty o " "una cadena que represente una fecha." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2531,24 +2635,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Formato invlido" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Formato invlido" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2557,11 +2665,11 @@ msgstr "" "No es una especificacin de fecha: \"aaaa-mm-dd\", \"mm-dd\", \"HH:MM\", " "\"HH:MM:SS\" o \"aaaa-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2570,7 +2678,7 @@ msgstr "" "%r no es una especificacin de fecha / hora \"aaaa-mm-dd\", \"mm-dd\", \"HH:" "MM\", \"HH:MM:SS\" o \"aaaa-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2579,170 +2687,170 @@ msgstr "" "No es una especificacin de intervalo de tiempo: [+-] [#a] [#m] [#s] [#d] " "[[[H]H:MM]:SS] [especific. fecha]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" "No es una especificacin de intervalo de tiempo: [+-] [#a] [#m] [#s] [#d] " "[[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s ao" msgstr[1] "%(number)s aos" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s mes" msgstr[1] "%(number)s meses" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s semana" msgstr[1] "%(number)s semanas" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s da" msgstr[1] "%(number)s das" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "maana" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "ayer" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s hora" msgstr[1] "%(number)s horas" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "una hora" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 hora y 1/2" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4 de hora" msgstr[1] "1 %(number)s/4 de hora" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "en un momento" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "ahora" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1 minuto" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s minuto" msgstr[1] "%(number)s minutos" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "media hora" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4 de hora" msgstr[1] "%(number)s/4s de hora" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "hace %s" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "en %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Error: %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, 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:460 +#: ../roundup/hyperdb.py:461 #, 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:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2751,23 +2859,22 @@ msgstr "" "ATENCIN: El directorio '%s'\n" "\tcontiene una plantilla con el viejo formato - se ignorar" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -3026,8 +3133,7 @@ msgstr "" "Ha habido un problema con el mensaje que env:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -3041,7 +3147,7 @@ msgstr "" "incorrectas:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -3055,11 +3161,11 @@ msgstr "" "incorrecta:\n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "no es de la forma [arg=valor,valor,...;arg=valor,valor,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -3067,7 +3173,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -3075,70 +3181,70 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " @@ -3146,136 +3252,137 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:891 :895 -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "nombre de usuario contrasea invlidos" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "ficheros" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "mensajes" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "interesados" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "reemplazado por" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "ttulo" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "asignadoa" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "Palabra clave" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "prioridad" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "estado" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "actividad" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "ltimoactor" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "creacin" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "creador" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "Nuevo aporte de %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s agreg el comentario:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "Modificacin de %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, 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:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3303,7 +3410,7 @@ msgid "Enter directory path to create demo tracker [%s]: " msgstr "" "Ingrese la ruta al directorio en el que se crear el tracker demo [%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3312,45 +3419,45 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Uso: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "No se encontraron templates de trackers en el directorio %s" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Error: no hay informacin de especificacin de origen suficiente" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Error: especification pop no vlida" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " "\"imap\", \"imaps\", \"imaps_cram\", or \"imaps_oauth\"" msgstr "" -"Error: EL origen debe ser \"mailbox\", \"pop\", \"apop\", \"imap\" o \"imaps" -"\"" +"Error: EL origen debe ser \"mailbox\", \"pop\", \"apop\", \"imap\" o " +"\"imaps\"" #: ../roundup/scripts/roundup_server.py:113 msgid "WARNING: generating temporary SSL certificate" @@ -3378,7 +3485,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

          Roundup trackers index

            \n" @@ -3386,59 +3493,59 @@ msgstr "" "ndice de trackers Roundup\n" "

            ndice de trackers Roundup

              \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "ATENCIN: ignorando argumento \"-g\" , Ud. no es root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "No puede cambiar grupos - el mdulo grp no est presente" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "El grupo %(group)s no existe" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "No puede ejecutarse como root!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "ATENCIN: ignorando argumento \"-u\", Ud. no es root" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "No puedo cambiar usuarios - no existe el mdulo pwd" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "El usuario %(user)s no existe" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3460,7 +3567,7 @@ msgstr "" "para\n" " Servicios Web." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3477,7 +3584,7 @@ msgstr "" " 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:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3616,26 +3723,26 @@ msgstr "" " caracteres tales como espacios, dado que los mismos confunden a Internet " "Explorer.\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "Las Instancias debe ser de la forma nombre=directorio base" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Configuracin guardada en %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "servidor Roundup iniciado en %(HOST)s:%(PORT)s" @@ -3789,13 +3896,13 @@ msgstr "<< anterior" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3806,13 +3913,13 @@ msgstr "${start}..${end} de un total de ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3928,6 +4035,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Lista de ficheros - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Enviar modificaciones" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4139,53 +4283,53 @@ msgstr "Creador" msgid "Assigned To" msgstr "Asignado a" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Descargar como CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Ordenar por:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- nada -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Descendente:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Agrupar por:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Revisualizar" @@ -4242,7 +4386,7 @@ msgid "Assigned To" msgstr "Asignado a" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4278,11 +4422,13 @@ msgstr "Hacer una copia" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
              Note:  highlighted  fields are required.
              " +"
              Note:  highlighted  fields are required.
              " msgstr "" -"
              Nota: Los campos  resaltados  son obligatorios.
              " +"" #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy @@ -4634,8 +4780,8 @@ msgid "Query name**:" msgstr "Nombre de la consulta**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4769,18 +4915,22 @@ msgstr "Destinatarios" msgid "Content" msgstr "Contenido" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Sus consultas (editar)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Issues" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4792,7 +4942,7 @@ msgstr "Issues" msgid "Create New" msgstr "Crear" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4801,163 +4951,163 @@ msgstr "Crear" msgid "Show Unassigned" msgstr "Mostrar no asignados" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Mostrar todos" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Mostrar issue:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Editar existentes" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Administracin" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Lista de clases" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Lista de usuarios" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Agregar usuario" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Ingresar" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Recordarme?" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "Registrarse" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Olvid su contrasea?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Hola, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Sus Issues" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Sus datos personales" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "Salir" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Ayuda" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Doc. de Roundup" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "quitar este mensaje" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "cualquier(a)" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "sin valor" @@ -5632,8 +5782,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "Creado el ${creation} por ${creator}, ltima modificacin el " "${activity} por ${actor}." @@ -5878,22 +6028,22 @@ msgstr "" msgid "User" msgstr "Agregar usuario" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "asignado a m" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Sus consultas (editar)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Palabras clave existentes" @@ -6061,27 +6211,27 @@ msgid "Please log in or register." msgstr "Por favor ingrese al sistema o regstrese en el mismo." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} de un total de ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6126,6 +6276,15 @@ msgstr "Mostrar issue:" msgid "Password" msgstr "Contrasea para Login" +#, 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 "" +#~ "%(starttag)sAciertos Cache: %(cache_hits)d, no aciertos %(cache_misses)d. " +#~ "Cargando items: %(get_items)f secs. Filtrado: %(filtering)f secs." +#~ "%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/fr.po b/locale/fr.po index 69d6d98a8..b3d43fb96 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -8,9 +8,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:19+0100\n" "Last-Translator: Stephane Raimbault \n" "Language-Team: GNOME French Team \n" @@ -31,19 +31,19 @@ msgstr "" msgid "You may not retire the admin or anonymous user" msgstr "Vous ne pouvez pas abandonner les utilisateurs admin ou anonyme" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 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:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, 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:189 +#: ../roundup/admin.py:206 #, 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:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -110,7 +110,7 @@ msgstr "" "Problme: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -169,12 +169,12 @@ msgstr "" " roundup-admin help -- l'aide sur une commande\n" " roundup-admin help all -- toute l'aide disponible\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Commandes:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "o l'abrviation ne correspond qu' une seule commande,\n" "par ex.: l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -323,27 +323,27 @@ msgstr "" "\n" "Aide sur les commandes:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, 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:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 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:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Moteurs de stockage:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -368,14 +368,14 @@ msgstr "" " automatiquement valides si elles russissent.\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -392,42 +392,42 @@ msgstr "" # :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: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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "Pas suffisamment d'arguments fournis" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (mot de passe): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s ( nouveau): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Dsol, essayez nouveau..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "vous devez renseigner la proprit %(propname)s." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -447,13 +447,13 @@ msgstr "" " des noeuds indiqus.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -483,7 +483,7 @@ msgstr "" " format aux valeurs spares par des doubles-points.\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -514,7 +514,7 @@ msgstr "" " format aux valeurs spares par des doubles-points.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -538,21 +538,21 @@ msgstr "" # ../roundup/admin.py:699 :852 :864 :918 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s n'a pas de proprit %(propname)s" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -571,11 +571,12 @@ msgstr "" " noeud li, ou sa valeur de cl.\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Utilisation: genconfig \n" @@ -583,7 +584,7 @@ msgstr "" " (au format ini) avec des valeurs par dfaut dans\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -591,20 +592,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -626,7 +627,7 @@ msgstr "" # ../roundup/admin.py:558 :573 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" @@ -635,19 +636,19 @@ msgstr "" # ../roundup/admin.py:581 :981 :1030 :1052 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054 -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, 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:956 +#: ../roundup/admin.py:986 #, 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:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -667,12 +668,12 @@ msgstr "" " all -- toute l'aide disponible\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Dsol, aucune aide n'est disponible au sujet de %(topic)s" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -695,27 +696,27 @@ msgstr "" " valeur de cl peut tre r-utilise.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "supprimer" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, 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 +724,29 @@ msgstr "%(class)s %(id)s %(properties)s modifi #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -756,10 +757,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -792,7 +796,7 @@ msgstr "" " plus pniblement, abandonnez toutes les anciennes donnes).\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -802,7 +806,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -821,23 +825,23 @@ msgstr "" " Excute la fonction d'initialisation dbinit.init() du pisteur.\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Mot de passe administrateur: " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Confirmez: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "Le rpertoire racine de l'instance n'existe pas" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "L'instance n'a pas t installe" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -847,7 +851,7 @@ msgstr "" "Si vous la rinitialisez, vous perdrez toutes les donnes!\n" "Supprimez la base de donnes (Y/N)? " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 #, fuzzy msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" @@ -902,12 +906,12 @@ msgstr "" " Consultez galement l'aide sur initopts.\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, 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:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -919,22 +923,22 @@ msgstr "" "Si vous le rinstallez, vous perdrez toutes les donnes!\n" "Supprimer le pisteur (Y/N)? " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Slection du modle [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Slection du moteur de stockage [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Erreur dans les paramtres de la configuration: %s" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -947,11 +951,11 @@ msgstr "" " Vous devez maintenant modifier le fichier de configuration du pisteur:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ou au minimum, vous devez dfinir les options suivantes:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -983,7 +987,7 @@ msgstr "" " que vous avez ralis les tapes prcdentes.\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -1013,17 +1017,17 @@ msgstr "" " proprit pour chaque instance de cette classe.\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "Trop d'arguments fournis" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -1046,17 +1050,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1066,10 +1070,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1097,11 +1101,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Format non valide" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1119,25 +1123,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1166,49 +1170,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Nom d'utilisateur inconnu" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Adresse lectronique inconnue" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1232,17 +1305,17 @@ msgstr "" " Cette opration est normalement effectuer automatiquement.\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "pas d'lment %(designator)s" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "pas d'lment %(designator)s" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1262,7 +1335,7 @@ msgstr "" " utilisateurs.\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1284,7 +1357,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1307,7 +1380,7 @@ msgstr "" " base de donnes.\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1320,48 +1393,48 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Ce rle %(role)s n'existe pas" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, 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:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Rle %(name)s:" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s pour %(klass)s uniquement)" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1369,17 +1442,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, 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:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1414,7 +1487,7 @@ msgstr "" " ce lien sont indiqus comme des nombres spars par des\n" " virgules (par ex. 1,2,3)." -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1428,17 +1501,18 @@ msgstr "" " Cette commande numre les proprits de la classe nomme.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (proprit cl)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1449,22 +1523,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1500,17 +1574,17 @@ msgstr "" " donnera une colonne Name large de 4 caractres.\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "%(spec)s ne correspond pas au format nom:largeur" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1520,7 +1594,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1537,34 +1611,34 @@ msgstr "" # ../roundup/cgi/actions.py:596 :607 :778 :797 # ../roundup/cgi/actions.py:596:607 :778:797 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Erreur: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, 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:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "Plusieurs commandes correspondent %(command)s: %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Saisissez le rpertoire racine du pisteur: " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "Erreur: impossible d'ouvrir le pisteur, %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1573,15 +1647,25 @@ msgstr "" "Roundup %s est prt pour la saisie.\n" "Saisissez help pour l'aide." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Note: l'historique et l'dition des commandes n'est pas disponible" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "sortie..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Des changements n'ont pas t enregistrs, les valider (y/N)?" @@ -1592,39 +1676,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1645,7 +1729,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1703,57 +1787,52 @@ msgstr "" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Jeu de caractres non reconnu: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1781,16 +1860,16 @@ msgstr "" "requis)" #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266 -#: ../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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr "Format non valide" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "Vous n'avez pas la permission de crer de %(class)s" @@ -1812,15 +1891,15 @@ msgstr "%(classname)s %(itemid)s a # ../roundup/cgi/actions.py:174 :202 # ../roundup/cgi/actions.py:174:202 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Vous n'avez pas la permission de modifier des requtes" # ../roundup/cgi/actions.py:180 :209 # ../roundup/cgi/actions.py:180:209 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Vous n'avez pas la permission d'enregistrer des requtes" @@ -1829,50 +1908,56 @@ msgstr "Vous n'avez pas la permission d'enregistrer des requ msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Format non valide" # ../roundup/cgi/actions.py:930 :934 # ../roundup/cgi/actions.py:930:934 -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Tentative de connexion non valide" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Vous n'avez pas la permission de crer de %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Vous n'avez pas la permission de modifier %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Les lments ont t modifis avec succs" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, 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:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s cr" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View ses " "modifications dans une nouvelle fentre." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Erreur de modification: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:596 :607 :778 :797 +# ../roundup/cgi/actions.py:596:607 :778:797 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Erreur: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1897,12 +1991,12 @@ msgstr "" "Un bug dans Mozilla peut provoquer une apparition errone de ce message, " "vrifiez votre courriel." -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Demande de réinitialisation de mot de passe" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1911,29 +2005,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "Mot de passe rinitialis et courriel envoy %s" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Nom d'utilisateur inconnu" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Adresse lectronique inconnue" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 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:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Confirmation du mot de passe" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1947,31 +2041,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "Courriel envoy %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Vous tes dsormais inscrit, bienvenue!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1987,12 +2081,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -2002,51 +2096,61 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "Impossible de renseigner les rles l'inscription." -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Vous tes dconnect" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "Nom d'utilisateur requis" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, 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:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Tentative de connexion non valide" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Vous n'avez la permission de vous connecter" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "Vous n'avez pas la permission de modifier %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Demande de réinitialisation de mot de passe" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

              Templating Error

              \n" @@ -2057,27 +2161,27 @@ msgstr "" "

              %(exc_type)s: %(exc_value)s

              \n" "

              Les informations de dboguage suivent

              " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
            1. \"%(name)s\" (%(info)s)
            2. " msgstr "
            3. %(name)s (%(info)s)
            4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
            5. Looking for \"%(name)s\", current path:
                %(path)s
            6. " msgstr "
            7. Recherche de %(name)s, chemin actuel:
                %(path)s
            8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
            9. In %s
            10. " msgstr "
            11. Dans %s
            12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Un problme est apparu dans votre modle %s." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2096,17 +2200,17 @@ msgstr "" " %(locals)s\n" "
              Nota: Los campos  resaltados  son obligatorios.
              \n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Historique complet:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

              A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2116,25 +2220,25 @@ msgstr "" "suite d'appels de fonction menant l'erreur, avec l'appel le plus rcent " "(le plus imbriqu) d'abord. Les attributs de l'exception sont:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<file est None - probablement dans un eval ou un " "exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "dans %s" # ../roundup/cgi/cgitb.py:172 :178 # ../roundup/cgi/cgitb.py:172:178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "indfini" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

              An error has occurred

              \n" @@ -2148,172 +2252,167 @@ msgstr "" "Les administrateurs du pisteur ont t notifis du problme.

              \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "" "Les utilisateurs anonymes ne sont pas autoriss utiliser l'interface Web" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Erreur de formulaire: " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Jeu de caractres non reconnu: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "" "Les utilisateurs anonymes ne sont pas autoriss utiliser l'interface Web" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" +msgstr "" + +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" # ../roundup/cgi/actions.py:930 :934 # ../roundup/cgi/actions.py:930:934 -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Tentative de connexion non valide" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" # ../roundup/cgi/actions.py:930 :934 # ../roundup/cgi/actions.py:930:934 -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Tentative de connexion non valide" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Vous n'tes pas autoris voir ce fichier" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "%(starttag)sTemps coul: %(seconds)fs%(endtag)s\n" -#: ../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 "" -"%(starttag)sAccs au cache: %(cache_hits)d, manqus %(cache_misses)d. " -"Chargement d'lments: %(get_items)f secondes. Filtrage: %(filtering)f " -"secondes.%(endtag)s\n" - -#: ../roundup/cgi/client.py:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2382,16 +2481,16 @@ msgstr[0] "La propri msgstr[1] "" "Les proprits requises %(property)s de %(class)s n'ont pas t fournies" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "Vous ne pouvez pas %(action)s des lments de classe %(class)s" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(liste)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "Soumettre un nouvelle entre" @@ -2400,58 +2499,58 @@ msgstr "Soumettre un nouvelle entr # ../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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[masqu]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Nouveau n~ud - pas d'historique" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Soumettre les changements" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "La proprit indique n'existe plus" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "La classe lie %(classname)s n'existe plus" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:940 :964 # ../roundup/cgi/templating.py:940:964 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "Le noeud li n'existe plus" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (pas de valeur)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Cet vnement n'est pas gr par l'affichage de l'historique." -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Note:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Historique" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Date" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Utilisateur" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Action" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Arguments" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "Copie de %(class)s %(id)s" @@ -2492,20 +2591,20 @@ msgstr "Copie de %(class)s %(id)s" # ../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:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 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:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Oui" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2513,27 +2612,32 @@ msgstr "" "la valeur par dfaut pour DateHTMLProperty doit tre soit DateHTMLProperty " "soit une reprsentation textuelle de la date." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2554,24 +2658,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Format non valide" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Format non valide" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2580,11 +2688,11 @@ msgstr "" "Ceci n'est pas une reprsentation de date: aaaa-mm-jj, mm-jj, HH:" "MM, HH:MM:SS or aaaa-mm-jj.HH:MM:SS.SSS" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2593,7 +2701,7 @@ msgstr "" "%r n'est pas une reprsentation de date ou d'heure aaaa-mm-jj, mm-" "jj, HH:MM, HH:MM:SS or aaaa-mm-jj.HH:MM:SS.SSS" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2602,170 +2710,170 @@ msgstr "" "Ceci n'est pas une reprsentation d'intervalle: [+-] [#a] [#m] [#s] [#j] " "[[[H]H:MM]:SS] [reprsentation de date]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" "Ceci n'est pas une reprsentation d'intervalle: [+-] [#a] [#m] [#s] [#j] " "[[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s anne" msgstr[1] "%(number)s annes" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s mois" msgstr[1] "%(number)s mois" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s semaine" msgstr[1] "%(number)s semaines" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s jour" msgstr[1] "%(number)s jours" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "demain" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "hier" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s heure" msgstr[1] "%(number)s heures" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "une heure" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 heure et demie" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 heure et quart" msgstr[1] "1 heure %(number)s/4" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "dans un instant" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr " l'instant" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "une minute" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s minute" msgstr[1] "%(number)s minutes" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "une demi-heure" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "un quart d'heure" msgstr[1] "%(number)s/4 d'heures" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "Il y a %s" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "dans %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Erreur: %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, 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:460 +#: ../roundup/hyperdb.py:461 #, 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:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2774,23 +2882,22 @@ msgstr "" "ATTENTION: le rpertoire '%s'\n" "\tcontient des modles obsoltes - ignor" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -3050,8 +3157,7 @@ msgstr "" "Un problme a eu lieu l'envoi de votre message:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -3065,7 +3171,7 @@ msgstr "" "corrigs:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -3079,11 +3185,11 @@ msgstr "" "indique comme: \n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "pas de la forme [arg=value,value,...;arg=value,value,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -3091,7 +3197,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -3099,71 +3205,71 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" # ../roundup/cgi/actions.py:930 :934 # ../roundup/cgi/actions.py:930:934 -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Tentative de connexion non valide" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " @@ -3172,137 +3278,138 @@ msgstr "" # ../roundup/cgi/actions.py:930 :934 # ../roundup/cgi/actions.py:930:934 -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Tentative de connexion non valide" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "fichiers" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "messages" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "curieux" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "remplaant" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "titre" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "affect_" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 #, fuzzy msgid "keyword" msgstr "Mot-clé" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "priorit" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "tat" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "activit" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "acteur" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "cration" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "crateur" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "Nouvel envoi de %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s a ajout le commentaire:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, fuzzy, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "Nouvel envoi de %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3326,7 +3433,7 @@ msgstr "" "Saisissez le chemin du rpertoire o crer le pisteur de dmonstration " "[%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3335,23 +3442,23 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Utilisation: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "Aucun modle de pisteur dans le rpertoire %s" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" @@ -3359,14 +3466,14 @@ msgid "" msgstr "" "Erreur: pas suffisament d'informations dans la spcification de la source" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Erreur: la spcification pop n'est pas valide" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3402,7 +3509,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

              Roundup trackers index

                \n" @@ -3410,64 +3517,64 @@ msgstr "" "Index des pisteurs Roundup\n" "

                Index des pisteurs Roundup

                  \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 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:620 +#: ../roundup/scripts/roundup_server.py:644 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:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "Le groupe %(group)s n'existe pas" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "Impossible d'excuter en tant que superutilisateur (\"root\")" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 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:650 +#: ../roundup/scripts/roundup_server.py:674 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:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "L'utilisateur %(user)s n'existe pas" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3486,7 +3593,7 @@ msgstr "" " La commande roundup-server -c help donne les\n" " spcificits du service Windows." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3507,7 +3614,7 @@ msgstr "" "PID\n" " L'option -l option *doit* tre spcifie si -d est utilis." -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3634,26 +3741,26 @@ msgstr "" " 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:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "Les instances doivent tre nom=base-du-pisteur" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Configuration sauvegarde dans %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Le serveur Roundup est dmarr sur %(HOST)s:%(PORT)s" @@ -3806,13 +3913,13 @@ msgstr "<< précédents" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3823,13 +3930,13 @@ msgstr "${start}..${end} sur ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3948,6 +4055,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Liste des fichiers - ${tracker}s" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Soumettre les changements" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4159,53 +4303,53 @@ msgstr "Créateur" msgid "Assigned To" msgstr "Affecté à" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Télécharger comme CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Trier par:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- rien -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Descendant:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Regrouper par:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Actualiser" @@ -4262,7 +4406,7 @@ msgid "Assigned To" msgstr "Affecté à" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4298,12 +4442,13 @@ msgstr "Réaliser une copie" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                  Note:  highlighted  fields are required.
                  " +"
                  Note:  highlighted  fields are required.
                  " msgstr "" -"" +"
                  Note: Les champs  mis en évidence  sont requis.
                  Note: Les champs  mis en évidence  sont requis.
                  " #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy @@ -4656,8 +4801,8 @@ msgid "Query name**:" msgstr "Nom de requte**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4791,19 +4936,23 @@ msgstr "Destinataires" msgid "Content" msgstr "Contenu" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "" "Vos requêtes (modifier)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Anomalies" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4815,7 +4964,7 @@ msgstr "Anomalies" msgid "Create New" msgstr "Créer" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4824,163 +4973,163 @@ msgstr "Créer" msgid "Show Unassigned" msgstr "Afficher les non-affectes" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Tout afficher" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Voir l'anomalie:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Modifier" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Administration" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Liste des classes" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Liste des utilisateurs" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Ajouter un utilisateur" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Se connecter" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Se souvenir" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "S'inscrire" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Retrouver votre identifiant" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Bienvenue, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Vos anomalies" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Vos détails" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "Se déconnecter" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Aide" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Documentation de Roundup" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "Supprimer ce message" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "aucune importance" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "pas de valeur" @@ -5660,8 +5809,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "Créé le ${creation} par ${creator}, " "modifié le ${activity} par ${actor}." @@ -5906,23 +6055,23 @@ msgstr "" msgid "User" msgstr "Ajouter un utilisateur" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "affecté à moi" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "" "Vos requêtes (modifier)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Mot-clés existants" @@ -6090,27 +6239,27 @@ msgid "Please log in or register." msgstr "Veuillez vous connecter ou vous inscrire." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} sur ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6155,6 +6304,15 @@ msgstr "Voir l'anomalie msgid "Password" msgstr "Mot de passe" +#, 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 "" +#~ "%(starttag)sAccs au cache: %(cache_hits)d, manqus %(cache_misses)d. " +#~ "Chargement d'lments: %(get_items)f secondes. Filtrage: %(filtering)f " +#~ "secondes.%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/hu.po b/locale/hu.po index 38f0919a0..acdb14406 100644 --- a/locale/hu.po +++ b/locale/hu.po @@ -6,9 +6,9 @@ # kilo aka Gabor Kmetyko , 2007. msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:19+0100\n" "Last-Translator: kilo aka Gabor Kmetyko \n" "Language-Team: Hungarian\n" @@ -28,19 +28,19 @@ msgstr "Nincs jogosultsága %(action)s műveletre a(z) %(classname)s osztályon. msgid "You may not retire the admin or anonymous user" msgstr "Az admin és anonymous felhasználókat nem lehet visszavonultatni" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:85 :981 :1030 :1052 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "nincs \"%(classname)s\" osztály" # ../roundup/admin.py:95 :99 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "A(z) \"%(arg)s\" argumentum nem név=érték alakú" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" "\n" msgstr "Probléma: %(message)s\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -158,12 +158,12 @@ msgstr "" " roundup-admin help -- parancs-specifikus segítség\n" " roundup-admin help all -- minden elérhető segítség\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Parancsok:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "A parancsok rövidíthetők mindaddig, amíg csak egy parancsra illenek, pl. l " "== li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 msgid "" "\n" "All commands (except help) require a tracker specifier. This is just\n" @@ -239,25 +239,25 @@ msgid "" "Command help:\n" msgstr "" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:340 :396 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Sablonok:" # ../roundup/admin.py:343 :407 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Adatbázis hátterek:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -271,56 +271,56 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" # ../roundup/admin.py:369 :466 :527 :606 :656 :714 :735 :763 :834 :901 :972 # :1020 :1042 :1069 :1136 :1207 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "Nincs megadva elég argumentum" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (Jelszó): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Ismét): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Sajnálom, próbálja újra..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "meg kell adni a(z) \"%(propname)s\" tulajdonságot." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -340,13 +340,13 @@ msgstr "" " csomópont értékét.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 msgid "" "Usage: export [[-]class[,class]] export_dir\n" " Export the database and file content.\n" @@ -365,7 +365,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" " Export only the database to files, no file content.\n" @@ -385,7 +385,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 msgid "" "Usage: filter classname propname=value ...\n" " Find the nodes of the given class with a given property value.\n" @@ -399,20 +399,20 @@ msgid "" msgstr "" # ../roundup/admin.py:701 :854 :866 :920 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s-nek nincs \"%(propname)s\" tulajdonsága" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -423,11 +423,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Használat: genconfig \n" @@ -436,7 +437,7 @@ msgstr "" " a fájlba.\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -444,20 +445,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -478,7 +479,7 @@ msgstr "" " " # ../roundup/admin.py:560 :575 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" @@ -486,18 +487,18 @@ msgstr "" "alkalmazható." # ../roundup/admin.py:583 :983 :1032 :1054 -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "nincs \"%(propname)s\" %(classname)s tulajdonság" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -517,12 +518,12 @@ msgstr "" " all -- minden elérhető segítség\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Elnézést, \"%(topic)s\" témához nincs súgó" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -544,27 +545,27 @@ msgstr "" " csomópont értékét.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "Törlés" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve" @@ -572,29 +573,29 @@ msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 msgid "" "Usage: import import_dir\n" " Import a database and file contents from the directory.\n" @@ -604,10 +605,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -618,7 +622,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -628,7 +632,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -646,23 +650,23 @@ msgstr "" " Végrehajtja az adatbázist inicializáló dbinit.init() rutint\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Adminisztrátori jelszó: " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Megerősítés " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "A példány könyvtára nem létezik" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "A példány nem lett installálva" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -672,7 +676,7 @@ msgstr "" "Újrainicializálás esetén minden adat elvész!\n" "Törli? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -698,12 +702,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, 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:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -715,22 +719,22 @@ msgstr "" "Ha újra installálod, minden adat elveszik!\n" "Töröljem? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Sablon választása [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Adatbázis háttér választása [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Hiba a konfigurációs beállításokban: \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -743,11 +747,11 @@ msgstr "" " Most kell szerkesztened a konfigurációs fájlt:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... legalább a következő opciókat kell beállítani:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -764,7 +768,7 @@ msgid "" "---------------------------------------------------------------------------\n" msgstr "" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -780,17 +784,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "Túl sok argumentum került megadásra" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -813,17 +817,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 msgid "" "Usage: pack period | date\n" " Remove journal entries older than the date/period.\n" @@ -832,10 +836,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -843,11 +847,11 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Hibás formátum" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -865,25 +869,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -912,49 +916,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Ismeretlen felhasználónév" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Ismeretlen e-mail cím" + +#: ../roundup/admin.py:1943 msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" " Re-generate a tracker's search indexes.\n" @@ -971,17 +1044,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "nincs ilyen elem: \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "nincs ilyen elem: \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 msgid "" "Usage: restore designator[,designator]*\n" " Restore the retired node specified by designator.\n" @@ -993,7 +1066,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 msgid "" "Usage: retire designator[,designator]*\n" " Retire the node specified by designator.\n" @@ -1007,7 +1080,7 @@ msgid "" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1019,7 +1092,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1032,47 +1105,47 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Nincs ilyen szerepkör: \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, 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:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "\"%(name)s\" szerepkör:" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy, python-format msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1080,17 +1153,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, fuzzy, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 msgid "" "Usage: set items property=value [property=value ...]\n" " Set the given properties of one or more items(s).\n" @@ -1111,7 +1184,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1125,17 +1198,17 @@ msgstr "" " Listázza az adott osztály tulajdonságait.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (kulcs tulajdonság)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1146,38 +1219,38 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " msgstr "" -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" nem név:hossz formátumú" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1187,7 +1260,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1204,37 +1277,37 @@ msgstr "" " " # ../roundup/cgi/actions.py:596 :607 :778 :797 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Hiba: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, 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:2259 +#: ../roundup/admin.py:2402 #, 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:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Adja meg a hibakövető könyvtárát: " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "Hiba: Hibakövető megnyitása sikertelen: %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1243,15 +1316,25 @@ msgstr "" "A Roundup %s fogadókész.\n" "Segítségért gépeljen \"help\"-et." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Megjegyzés: a parancsok története és szerkesztése nem elérhető" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "kilépés..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Vannak nem mentett változtatások. Elmenti őket (y/N)? " @@ -1262,18 +1345,18 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, python-format msgid "Couldn't open database - the required module '%s' is not available" msgstr "" @@ -1282,23 +1365,23 @@ msgstr "" # ../roundup/backends/back_metakit.py:567:834 # ../roundup/backends/rdbms_common.py:1320:1549 :1267:1285 :1331:1901 # :1755:1775 :1828:2436 :866:1601 -#: ../roundup/backends/back_anydbm.py:873 -#: ../roundup/backends/back_anydbm.py:886 -#: ../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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1319,7 +1402,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1375,57 +1458,52 @@ msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Ismeretlen karakterkészlet: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1450,16 +1528,16 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr "Hibás formátum" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "Nincs jogosultsága létrehozni %(class)s-t" @@ -1480,14 +1558,14 @@ msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s visszavonásra került" # ../roundup/cgi/actions.py:174 :202 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Nincs jogosultsága a lekérdezések szerkesztéséhez" # ../roundup/cgi/actions.py:180 :209 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Nincs jogosultsága a lekérdezések tárolásához" @@ -1496,49 +1574,55 @@ msgstr "Nincs jogosultsága a lekérdezések tárolásához" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Hibás formátum" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Hibás bejelentkezés" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Nincs jogosultsága létrehozni %(class)s-t" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Nincs jogosultsága szerkeszteni %(class)s-t" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Az elemek sikeresen szerkesztve" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s létrehozva" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View változtatásait egy új " "ablakban." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Szerkesztési hiba: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:596 :607 :778 :797 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Hiba: %s" + +#: ../roundup/cgi/actions.py:953 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:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Jelszó törlés kérése" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1574,29 +1666,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, 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:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Ismeretlen felhasználónév" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Ismeretlen e-mail cím" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "Meg kell adni egy felhasználónevet vagy címet" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Jelszó megerősítése" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1610,31 +1702,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "E-mail elküldve %s-nek" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Regisztrálás sikeres, isten hozott!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1650,12 +1742,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1665,50 +1757,60 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 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:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Kijelentkezett" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "A felhasználónév szükséges" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Hibás bejelentkezés" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Nincs jogosultsága bejelentkezni" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "Nincs jogosultsága szerkeszteni %(class)s-t" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Jelszó törlés kérése" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                  Templating Error

                  \n" @@ -1719,27 +1821,27 @@ msgstr "" "

                  %(exc_type)s: %(exc_value)s

                  \n" "

                  Debug információk alább

                  " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                1. \"%(name)s\" (%(info)s)
                2. " msgstr "
                3. \"%(name)s\" (%(info)s)
                4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                5. Looking for \"%(name)s\", current path:
                    %(path)s
                6. " msgstr "
                7. \"%(name)s\" keresése, aktuális elérési út:
                    %(path)s
                8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                9. In %s
                10. " msgstr "
                11. %s-ban
                12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Probléma merült fel a(z) \"%s\" sablonnal." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1751,17 +1853,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Teljes visszakövetés:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                  A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -1771,24 +1873,24 @@ msgstr "" "megtekinthető a hibához vezető függvényhívások sora, a legutóbbi (legbelső) " "hívás látható legelőször. A kivétel tulajdonságai:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<A fájl None értékű - feltehetőleg eval vagy exec " "utasításon belül>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "%s-ban" # ../roundup/cgi/cgitb.py:172 :178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "nem definiált" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                  An error has occurred

                  \n" @@ -1802,167 +1904,163 @@ msgstr "" "A hibakövető karbantartói értesítést kaptak a problémáról.

                  \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "Anonim felhasználók nem használhatják a webes felületet" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Űrlap hiba: " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Ismeretlen karakterkészlet: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "Anonim felhasználók nem használhatják a webes felületet" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Hibás bejelentkezés" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Hibás bejelentkezés" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Nem nézheti meg ezt a fájlt." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "%(starttag)sEltelt idő: %(seconds)fs%(endtag)s\n" -#: ../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 "" -"%(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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2027,74 +2125,74 @@ msgstr[0] "Nincs megadva a(z) %(class)s kötelező %(property)s tulajdonsága" msgstr[1] "" "Nincsenek megadva a(z) %(class)s kötelező %(property)s tulajdonságai" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "" "Nincs jogosultsága a(z) %(class)s osztály elemein %(action)s műveletet " "végrehajtani" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(lista)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[rejtett]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Új bejegyzés - nincs történet" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Változások mentése" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "A jelzett tulajdonság már nem létezik" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, 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:1290 ../roundup/cgi/templating.py:1320 -#: ../roundup/cgi/templating.py:2526 ../roundup/cgi/templating.py:2829 -#: ../roundup/cgi/templating.py:1290:1320 :2526:2829 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:940 :964 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "A csatolt bejegyzés már nem létezik" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (nincs érték)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Az előzmények képernyő nem kezeli ezt az eseményt!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Megjegyzés:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Előzmények" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Dátum" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Szerző" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Művelet" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Tulajdonságok" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, 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:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "Nem" # ../roundup/cgi/templating.py:1006 :1404 :1423 :1428 -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Igen" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2151,27 +2249,32 @@ msgstr "" "a DateHTMLProperty alapértéke DateHTMLProperty vagy szöveges dátumleírás " "típusú kell legyen." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2192,24 +2295,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Hibás formátum" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Hibás formátum" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2218,11 +2325,11 @@ msgstr "" "Nem dátum specifikáció: \"éééé-hh-nn\", \"hh-nn\", \"ÓÓ:PP\", \"ÓÓ:PP:SS\" " "vagy \"éééé-hh-nn.ÓÓ:PP:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2231,7 +2338,7 @@ msgstr "" "%r nem dátum / idő specifikáció \"éééé-hh-nn\", \"hh-nn\", \"ÓÓ:PP\", \"ÓÓ:" "PP:SS\" vagy \"éééé-hh-nn.ÓÓ:PP:SS.SSS\"" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2240,163 +2347,163 @@ msgstr "" "Nem időköz specifikáció: [+-] [#é] [#h] [#w] [#n] [[[Ó]Ó:PP]:SS] [dátum " "típus]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "Nem időköz specifikáció: [+-] [#é] [#h] [#w] [#n] [[[Ó]Ó:PP]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s éve" msgstr[1] "%(number)s éve" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s hónapja" msgstr[1] "%(number)s hónapja" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s hete" msgstr[1] "%(number)s hete" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s napja" msgstr[1] "%(number)s napja" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "holnap" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "tegnap" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s órája" msgstr[1] "%(number)s órája" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "egy órája" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 1/2 órája" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4 órája" msgstr[1] "1 %(number)s/4 órája" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "egy pillanat" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "épp most" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1 perce" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s perce" msgstr[1] "%(number)s perce" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "1/2 órája" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4 órája" msgstr[1] "%(number)s/4 órája" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "%s-ban" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Hiba: %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, 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:460 +#: ../roundup/hyperdb.py:461 #, 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:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" # ../roundup/hyperdb.py:949:957 -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2406,23 +2513,22 @@ msgstr "" "\trégi típusú sablont tartalmaz - ignorálva" # ../roundup/mailgw.py:199:211 -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2651,8 +2757,7 @@ msgstr "" "Probléma volt az Ön által küldött üzenettel:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2665,7 +2770,7 @@ msgstr "" "%(mailadmin)s-nal és javíttassa ki a hibás tulajdonságokat:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -2678,11 +2783,11 @@ msgstr "" "%(mailadmin)s-nal és javíttassa ki a hibásan megadott osztályt:\n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "nem [arg=érték,érték,...;arg=érték,érték,...] formátumú" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2690,7 +2795,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2698,70 +2803,70 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Hibás bejelentkezés" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " @@ -2769,137 +2874,138 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:930 :934 -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Hibás bejelentkezés" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "fájlok" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "üzenetek" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "kíváncsi" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "helyettes" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "cím" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "kiosztva" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 #, fuzzy msgid "keyword" msgstr "Téma" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "prioritás" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "állapot" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "művelet" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "végezte" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "létrehozás" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "létrehozó" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, 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:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s ezt a megjegyzést írta:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, 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:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -2921,7 +3027,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "Adja meg az elérési utat a bemutató tracker [%s] létrehozásához: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -2930,45 +3036,45 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Használat: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "Nem található tracker sablon a(z) %s könyvtárban" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Hiba: nincs elég forrás specifikációs információ" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Hiba: a pop specifikáció nem érvényes" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " "\"imap\", \"imaps\", \"imaps_cram\", or \"imaps_oauth\"" msgstr "" -"Hiba: A forrás a következők egyike kell legyen: \"mailbox\", \"pop\", \"apop" -"\", \"imap\" vagy \"imaps\"" +"Hiba: A forrás a következők egyike kell legyen: \"mailbox\", \"pop\", " +"\"apop\", \"imap\" vagy \"imaps\"" #: ../roundup/scripts/roundup_server.py:113 msgid "WARNING: generating temporary SSL certificate" @@ -2996,7 +3102,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                  Roundup trackers index

                    \n" @@ -3004,58 +3110,58 @@ msgstr "" "Roundup hibakövetők listája\n" "

                    Roundup hibakövetők listája

                      \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 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:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "Nem lehet csoportot váltani - nincs meg a grp modul" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "%(group)s csoport nem létezik" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "Nem futhat root-ként!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 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:650 +#: ../roundup/scripts/roundup_server.py:674 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:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "A(z) %(user)s felhasználó nem létezik" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3065,7 +3171,7 @@ msgid "" " specifics." msgstr "" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 msgid "" " -u runs the Roundup web server as this UID\n" " -g runs the Roundup web server as this GID\n" @@ -3075,7 +3181,7 @@ msgid "" " -D run the server in the foreground even when -d is used." msgstr "" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, python-format msgid "" "\n" @@ -3148,25 +3254,25 @@ msgid "" " any url-unsafe characters like spaces, as these confuse IE.\n" msgstr "" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "A példányoknak név=home formában kell lenniük" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Beállítások elmentve ide: %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Roundup server elindítva a(z) %(HOST)s:%(PORT)s gépen" @@ -3318,13 +3424,13 @@ msgstr "<< előző" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3335,13 +3441,13 @@ msgstr "${start}..${end}, összesen ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3447,6 +3553,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Fájlok listája - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Változások mentése" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3658,53 +3801,53 @@ msgstr "Létrehozó" msgid "Assigned To" msgstr "Kiosztva" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Letöltés CSV-ként" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Rendezés:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- semmi -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Csökkenő:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Csoportosítás:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Megjelenítés újra" @@ -3761,7 +3904,7 @@ msgid "Assigned To" msgstr "Kiosztva" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3797,11 +3940,13 @@ msgstr "Másolat készítése" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                      Note:  highlighted  fields are required.
                      " +"
                      Note:  highlighted  fields are required.
                      " msgstr "" -"
                      Megjegyzés:  a kiemelt  mezők szükségesek.
                      " +"" #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy @@ -4154,8 +4299,8 @@ msgid "Query name**:" msgstr "Lekérdezés neve**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4287,18 +4432,22 @@ msgstr "Címzettek" msgid "Content" msgstr "Tartalom" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Lekérdezések (szerk.)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Ügyek" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4310,7 +4459,7 @@ msgstr "Ügyek" msgid "Create New" msgstr "Új létrehozása" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4319,163 +4468,163 @@ msgstr "Új létrehozása" msgid "Show Unassigned" msgstr "Gazdátlanok mutatása" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Mutasd mind" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Ügy mutatása:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Meglévők szerkesztése" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Adminisztráció" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Osztályok listája" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Felhasználók listája" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Felhasználó hozzáadása" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Bejelentkezés" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Emlékezzen?" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "Regisztráció" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Elveszett a jelszava?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Helló, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Saját ügyek" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Saját adatok" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "Kijelentkezés" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Segítség" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup dokumentáció" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "üzenet törlése" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "mindegy" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "nincs érték" @@ -5137,8 +5286,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "${creation} létrehozta ${creator}, utoljára ${actor} " "módosította ${activity}-kor." @@ -5382,22 +5531,22 @@ msgstr "" msgid "User" msgstr "Felhasználó hozzáadása" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "nekem adva" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Lekérdezések (szerk.)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Létező témák" @@ -5564,27 +5713,27 @@ msgid "Please log in or register." msgstr "Jelentkezzen be vagy regisztráljon." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end}, összesen ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -5629,6 +5778,14 @@ msgstr "Ügy mutatása:" msgid "Password" msgstr "Bejelentkezési jelszó" +#, 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 "" +#~ "%(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" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/it.po b/locale/it.po index b8c2f9e61..b8cdc0261 100644 --- a/locale/it.po +++ b/locale/it.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:20+0100\n" "Last-Translator: Marco Ghidinelli \n" "Language-Team: italian \n" @@ -27,19 +27,19 @@ msgstr "Non hai i permessi per %(action)s la classe %(classname)s." msgid "You may not retire the admin or anonymous user" msgstr "Non è possibile ritirare l'utente amministratore o l'utente anonimo" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, 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:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "argomento \"%(arg)s\" non nel formato nome=valore" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -104,7 +104,7 @@ msgstr "" "Problema: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -135,12 +135,12 @@ msgid "" " roundup-admin help all -- all available help\n" msgstr "" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Comandi:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "I comandi possono essere abbreviati finchè l'abbreviazione rimane univoca\n" "es: l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 msgid "" "\n" "All commands (except help) require a tracker specifier. This is just\n" @@ -216,25 +216,25 @@ msgid "" "Command help:\n" msgstr "" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Modelli predefiniti:" # ../roundup/admin.py:343 ../roundup/admin.py:407 ../roundup/admin.py:343:407 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Back ends:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -248,56 +248,56 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" # ../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: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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "Non sono stati forniti abbastanza argomenti" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s·(Password):·" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Ripeti password): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Mi dispiace, riprova..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "deve essere fornita la proprietà \"%(propname)s\"." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 msgid "" "Usage: display designator[,designator]*\n" " Show the property values for the given node(s).\n" @@ -310,13 +310,13 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s:·%(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 msgid "" "Usage: export [[-]class[,class]] export_dir\n" " Export the database and file content.\n" @@ -335,7 +335,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" " Export only the database to files, no file content.\n" @@ -355,7 +355,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 msgid "" "Usage: filter classname propname=value ...\n" " Find the nodes of the given class with a given property value.\n" @@ -369,20 +369,20 @@ msgid "" msgstr "" # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "la classe %(classname)s non ha la proprietà \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -393,14 +393,15 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -408,20 +409,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 msgid "" "Usage: get property designator[,designator]*\n" " Get the given property of one or more designator(s).\n" @@ -435,24 +436,24 @@ msgid "" msgstr "" # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, 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:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -464,12 +465,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Nessun aiuto per \"%(topic)s\"" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 msgid "" "Usage: history designator [skipquiet] [raw]\n" " Show the history entries of a designator.\n" @@ -484,27 +485,27 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "rimuovi" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s modificata correttamente" @@ -512,29 +513,29 @@ msgstr "%(class)s %(id)s %(properties)s modificata correttamente" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s:·%(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 msgid "" "Usage: import import_dir\n" " Import a database and file contents from the directory.\n" @@ -544,10 +545,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -558,7 +562,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -568,7 +572,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -579,30 +583,30 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Password dell'amministratore" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Conferma: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "La home dell'istanza non esiste" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "L'istanza non è stata installata" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 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:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -628,12 +632,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, 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:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -644,22 +648,22 @@ msgstr "" "Se verrà reinstallata, tutti i dati precedentemente salvati andranno persi\n" "Cancellare la directory specificata? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Seleziona il modello predefinito [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Seleziona il backend [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Erorre nei settaggi di configurazione: \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -668,11 +672,11 @@ msgid "" " %(config_file)s" msgstr "" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... devono essere configurate almeno le seguenti opzioni:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -689,7 +693,7 @@ msgid "" "---------------------------------------------------------------------------\n" msgstr "" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -705,17 +709,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -738,17 +742,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 msgid "" "Usage: pack period | date\n" " Remove journal entries older than the date/period.\n" @@ -757,10 +761,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -768,11 +772,11 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -790,25 +794,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -837,49 +841,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Nome Utente sconosciuto" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Indirizzo di email sconosciuto" + +#: ../roundup/admin.py:1943 msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" " Re-generate a tracker's search indexes.\n" @@ -896,18 +969,18 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "" # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052 -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "classe \"%(classname)s\" mancante" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 msgid "" "Usage: restore designator[,designator]*\n" " Restore the retired node specified by designator.\n" @@ -919,7 +992,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 msgid "" "Usage: retire designator[,designator]*\n" " Retire the node specified by designator.\n" @@ -933,7 +1006,7 @@ msgid "" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -945,7 +1018,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -958,46 +1031,46 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Non è presente il ruolo \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, 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:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Ruolo \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n" msgstr "" -#: ../roundup/admin.py:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1005,17 +1078,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr "" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, python-format msgid " %(description)s (%(name)s)\n" msgstr "" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 msgid "" "Usage: set items property=value [property=value ...]\n" " Set the given properties of one or more items(s).\n" @@ -1036,7 +1109,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1045,17 +1118,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s %(value)s (chiave)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s:·%(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1066,38 +1139,38 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " msgstr "" -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1107,7 +1180,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1118,49 +1191,58 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:597:608 :779:798 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Errore: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" "Type \"help\" for help." msgstr "" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +msgid "Command history and line editing not available" msgstr "" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "" -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "" @@ -1171,39 +1253,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1224,7 +1306,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1281,57 +1363,52 @@ msgstr "" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Codice di carattere sconosciuto: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1356,15 +1433,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "Non hai il permesso per creare %(class)s" @@ -1385,14 +1462,14 @@ msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s è stato ritirato" # ../roundup/cgi/actions.py:174:202 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Non hai il permesso di modificare delle query" # ../roundup/cgi/actions.py:180:209 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Non hai il permesso di archiviare delle query" @@ -1401,50 +1478,56 @@ msgstr "Non hai il permesso di archiviare delle query" msgid "You already own a query named '%s'. Please choose another name." msgstr "" +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + # ../roundup/cgi/actions.py:931:935 -#: ../roundup/cgi/actions.py:440 +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Login invalida" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Login invalida" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Non hai il permesso per creare %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Non hai i permessi per modificare i %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Item modificato correttamente" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s modificata correttamente" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s creata" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View le sue " "modifiche in una nuova finestra." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Errore di modifica: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:597:608 :779:798 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Errore: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1469,12 +1560,12 @@ msgstr "" "(un bug di Mozilla può causare la erronea presenza di questo messaggio, (per " "favore controlla la tua email)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Richiesta nuova password" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1483,29 +1574,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "Password modificata e mandata in email a %s" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Nome Utente sconosciuto" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Indirizzo di email sconosciuto" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "È necessario specificare un Nome Utente o un indirizzo email" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Conferma Password" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1519,31 +1610,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "Email inviata a %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Ora sei un utente registrato, benvenuto!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1559,12 +1650,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1574,50 +1665,60 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "Non è permesso fornire ruoli in fase di registrazione." -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Disconnesso" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "È richiesto il Nome Utente" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Login invalida" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Non hai il permesso per eseguire la login" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "Non hai i permessi per modificare i %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Richiesta nuova password" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                      Templating Error

                      \n" @@ -1628,28 +1729,28 @@ msgstr "" "

                      %(exc_type)s: %(exc_value)s

                      \n" "

                      Debugging information follows

                      " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                    1. \"%(name)s\" (%(info)s)
                    2. " msgstr "
                    3. \"%(name)s\" (%(info)s)
                    4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                    5. Looking for \"%(name)s\", current path:
                        %(path)s
                    6. " msgstr "" "
                    7. Sto cercando \"%(name)s\", percorso corrente:
                        %(path)s
                    8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                    9. In %s
                    10. " msgstr "
                    11. In %s
                    12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "È occorso un problema nel tuo template \"%s\"." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1668,17 +1769,17 @@ msgstr "" " %(locals)s\n" "
                      Megjegyzés:  a kiemelt  mezők szükségesek.
                      \n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Traceback completo:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                      A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -1688,22 +1789,22 @@ msgstr "" "la sequenza di chiamate di sistema che hanno condotto a questo errore, con " "la più recente (la più interna) prima. Le eccezioni sono:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "in %s" # ../roundup/cgi/cgitb.py:172:178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "indefinito" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                      An error has occurred

                      \n" @@ -1717,167 +1818,165 @@ msgstr "" "La notifica del problema è stata notificata al manutentore del tracker.

                      \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "" "Gli utenti anonimi non hanno il permesso di utilizzare l'interfaccia web" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Errore nella Form: " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Codice di carattere sconosciuto: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "" "Gli utenti anonimi non hanno il permesso di utilizzare l'interfaccia web" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" +msgstr "" + +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Login invalida" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Login invalida" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Non si dispone dei permessi per visualizzare questo file." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "%(starttag)sTempo trascorso: %(seconds)fs%(endtag)s\n" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -1944,72 +2043,72 @@ msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "La proprietà %(class)s %(property)s non è stata fornita" msgstr[1] "Le proprietà %(class)s %(property)s non sono state fornite" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "Non si dispone dei permessi per %(action)s item della classe %(class)s" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(elenco)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[nascosto]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Nuovo nodo - nessuno storico" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Inserisci Modifiche" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "La caratteristica indicata non esiste" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "La classe collegata %(classname)s non esiste più" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:973:997 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "Il Nodo collegato non esiste più" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (nessun valore)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Questo evento non è gestito dal visualizzatore dello storico!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Note:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Storico" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Data" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Utente" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Azione" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Argomenti" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, 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:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "No" # ../roundup/cgi/templating.py:1488 ../roundup/cgi/templating.py:1039:1464 # :1483:1488 -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Sì" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2069,27 +2168,32 @@ msgstr "" "Il valore predefinito per DateHTMLProperty deve essere DateHTMLProperty " "oppure una stringa rappresentante una data." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2110,7 +2214,7 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " @@ -2118,18 +2222,22 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Login invalida" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Login invalida" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2138,11 +2246,11 @@ msgstr "" "Non specifica una data: \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" o " "\"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2151,7 +2259,7 @@ msgstr "" "%r non specifica una data / momento \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", " "\"HH:MM:SS\" o \"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2160,165 +2268,165 @@ msgstr "" "Non specifica un intervallo: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "Non specifica un intervallo: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s anno" msgstr[1] "%(number)s anni" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s mese" msgstr[1] "%(number)s mesi" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s settimana" msgstr[1] "%(number)s settimane" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s giorno" msgstr[1] "%(number)s giorni" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "domani" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "ieri" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s ora" msgstr[1] "%(number)s ore" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "un'ora" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "un'ora e mezza" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "%(number)s quarto d'ora" msgstr[1] "%(number)s quarti d'ora" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "in un momento" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "proprio ora" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "un minuto" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s minuto" msgstr[1] "%(number)s minuti" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "mezzora" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s ora" msgstr[1] "%(number)s ore" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s fa" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "in %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Errore: %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, 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:460 +#: ../roundup/hyperdb.py:461 #, 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:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2327,23 +2435,22 @@ msgstr "" "ATTENZIONE: La directory '%s'\n" "\tcontene un template old-style - ignorato" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2593,8 +2700,7 @@ msgstr "" "Si è verificato un problema con il messaggio che hai inviato:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2607,7 +2713,7 @@ msgstr "" "%(mailadmin)s e segnala che la proprietà scorretta:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -2620,11 +2726,11 @@ msgstr "" "%(mailadmin)s e segnala che la classe specificata come:\n" " %(current_class)s è scorretta.\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "Non nel formato [arg=valore,valore,...;arg=valore,valore,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2632,7 +2738,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2640,70 +2746,70 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Login invalida" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " @@ -2711,117 +2817,118 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:931:935 -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Login invalida" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "file" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "messaggi" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "ficcanaso" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "soprassiede" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "titolo" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "assegnato a" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 #, fuzzy msgid "keyword" msgstr "Parola chiave" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "priorità" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "stato" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "attività" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "attore" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "creazione" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "creatore" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" @@ -2829,7 +2936,7 @@ msgstr "" "%(authname)s%(authaddr)s.\n" "Il testo della nuova richiesta è il seguente:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" @@ -2837,7 +2944,7 @@ msgstr "" "%(authname)s%(authaddr)s.\n" "Il testo del messaggio è il seguente:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, fuzzy, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" @@ -2845,12 +2952,12 @@ msgstr "" "%(authname)s%(authaddr)s.\n" "Il testo della nuova richiesta è il seguente:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -2872,7 +2979,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -2881,37 +2988,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Errore: insufficienti informazioni sul sorgente" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Errore: il pop server specificato non è valido." -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -2947,7 +3054,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                      Roundup trackers index

                        \n" @@ -2955,60 +3062,60 @@ msgstr "" "indice dei ticket Roundup\n" "

                        indice dei ticket Roundup

                          \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s:·%(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "ATTENZIONE: ignoro il parametro \"-g\", non sei root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "Non è possibile cambiare gruppo - nessun modulo grp" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "Il gruppo %(group)s non esiste" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "Non può essere eseguito come root!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "Non è possibile cambiare utente - nessun modulo pwd" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "L'utente %(user)s non esiste" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3018,7 +3125,7 @@ msgid "" " specifics." msgstr "" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 msgid "" " -u runs the Roundup web server as this UID\n" " -g runs the Roundup web server as this GID\n" @@ -3028,7 +3135,7 @@ msgid "" " -D run the server in the foreground even when -d is used." msgstr "" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, python-format msgid "" "\n" @@ -3101,26 +3208,26 @@ msgid "" " any url-unsafe characters like spaces, as these confuse IE.\n" msgstr "" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "L'istanza deve essere nel formato nome=home" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Configurazione salvata in %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Il server Roundup è stato attivato su %(HOST)s:%(PORT)s" @@ -3274,13 +3381,13 @@ msgstr "« precedente" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3291,13 +3398,13 @@ msgstr "${start}..${end} di ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3403,6 +3510,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Elenco dei File - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Inserisci Modifiche" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3619,53 +3763,53 @@ msgstr "Creatore" msgid "Assigned To" msgstr "Assegnato A" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Scarica come CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Ordina per:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- niente -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Decrescente:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Raggruppa per:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Aggiorna" @@ -3722,7 +3866,7 @@ msgid "Assigned To" msgstr "Assegnato a" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3758,19 +3902,21 @@ msgstr "Crea una copia" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                          Note:  highlighted  fields are required.
                          " +"
                          Note:  highlighted  fields are required.
                          " msgstr "" -"
                          Nota: i campi  evidenziati  sono obbligatori.
                          " +"" #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy msgid "" "Created on ${creation} by ${creator}, last changed ${activity} by ${actor}." msgstr "" -"Creato il ${creation} da ${creator}, ultima modifica " -"${activity} di ${actor}." +"Creato il ${creation} da ${creator}, ultima modifica " +"${activity} di ${actor}." #: ../share/roundup/templates/classic/html/issue.item.html:149 #: ../share/roundup/templates/classic/html/msg.item.html:61 @@ -4116,8 +4262,8 @@ msgid "Query name**:" msgstr "Nome della query**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4251,18 +4397,22 @@ msgstr "Destinatario" msgid "Content" msgstr "Contenuto" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Le tue Query (modifica)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Ticket" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4274,7 +4424,7 @@ msgstr "Ticket" msgid "Create New" msgstr "Crea Nuovo" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4283,163 +4433,163 @@ msgstr "Crea Nuovo" msgid "Show Unassigned" msgstr "Mostra Non Assegnati" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Mostra Tutti" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Mostra ticket:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Modifica" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Amministrazione" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Elenco Classi" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Elenco Utenti" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Aggiungi Utente" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Login" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Ricorda la mia login" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "Registra" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Dimenticato la tua Login?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Ciao, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "I Tuoi Ticket" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "I Tuoi Dettagli" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Aiuto" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Documentazione su Roundup" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "non visualizzare questo messaggio" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "non importa" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "nessun valore" @@ -5098,11 +5248,11 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" -"Creato il ${creation} da ${creator}, ultima modifica " -"${activity} di ${actor}." +"Creato il ${creation} da ${creator}, ultima modifica " +"${activity} di ${actor}." #: ../share/roundup/templates/devel/html/bug.item.html:226 #: ../share/roundup/templates/devel/html/file.index.html:10 @@ -5344,22 +5494,22 @@ msgstr "" msgid "User" msgstr "Aggiungi Utente" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "assegnato a me" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Le tue Query (modifica)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Parole Chiave Inserite" @@ -5528,27 +5678,27 @@ msgid "Please log in or register." msgstr "Per favore esegui la login o la registrazione." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} di ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index 4bf7f1dcd..b7fb11af7 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:20+0100\n" "Last-Translator: Yasushi Iwata \n" "Language-Team: Yasushi Iwata \n" @@ -27,19 +27,19 @@ msgstr "%(classname)s の %(action)s を実行する権限がありません。" msgid "You may not retire the admin or anonymous user" msgstr "ユーザー admin と anonymous を無効にすることはできません" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "" -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" "\n" msgstr "" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -131,17 +131,17 @@ msgid "" " roundup-admin help all -- all available help\n" msgstr "" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 msgid "Commands: " msgstr "" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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:281 +#: ../roundup/admin.py:310 msgid "" "\n" "All commands (except help) require a tracker specifier. This is just\n" @@ -209,23 +209,23 @@ msgid "" "Command help:\n" msgstr "" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "" -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "" -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -239,54 +239,54 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr "" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "" -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "" -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 msgid "" "Usage: display designator[,designator]*\n" " Show the property values for the given node(s).\n" @@ -299,13 +299,13 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 msgid "" "Usage: export [[-]class[,class]] export_dir\n" " Export the database and file content.\n" @@ -324,7 +324,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" " Export only the database to files, no file content.\n" @@ -344,7 +344,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 msgid "" "Usage: filter classname propname=value ...\n" " Find the nodes of the given class with a given property value.\n" @@ -357,19 +357,19 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, python-format msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s." msgstr "" -#: ../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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -380,14 +380,15 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -395,20 +396,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 msgid "" "Usage: get property designator[,designator]*\n" " Get the given property of one or more designator(s).\n" @@ -421,23 +422,23 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -449,12 +450,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 msgid "" "Usage: history designator [skipquiet] [raw]\n" " Show the history entries of a designator.\n" @@ -469,27 +470,27 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "削除" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s 更新完了" @@ -497,29 +498,29 @@ msgstr "%(class)s %(id)s %(properties)s 更新完了" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, python-format msgid "%(prop)s was %(value)s" msgstr "" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 msgid "" "Usage: import import_dir\n" " Import a database and file contents from the directory.\n" @@ -529,10 +530,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -543,7 +547,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -553,7 +557,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -564,30 +568,30 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr "" -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 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:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -613,12 +617,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -626,20 +630,20 @@ msgid "" "Erase it? Y/N: " msgstr "" -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 msgid "Select template" msgstr "" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 msgid "Select backend" msgstr "" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -648,11 +652,11 @@ msgid "" " %(config_file)s" msgstr "" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr "" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -669,7 +673,7 @@ msgid "" "---------------------------------------------------------------------------\n" msgstr "" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -685,17 +689,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -718,17 +722,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 msgid "" "Usage: pack period | date\n" " Remove journal entries older than the date/period.\n" @@ -737,10 +741,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -748,11 +752,11 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -770,25 +774,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -817,49 +821,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "登録されていないユーザー名です" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "登録されていないメールアドレスです" + +#: ../roundup/admin.py:1943 msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" " Re-generate a tracker's search indexes.\n" @@ -876,17 +949,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "%(class)s %(id)s のコピー" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 msgid "" "Usage: restore designator[,designator]*\n" " Restore the retired node specified by designator.\n" @@ -898,7 +971,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 msgid "" "Usage: retire designator[,designator]*\n" " Retire the node specified by designator.\n" @@ -912,7 +985,7 @@ msgid "" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -924,7 +997,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -937,46 +1010,46 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, python-format msgid "No such Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, python-format msgid "Role \"%(name)s\":\n" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n" msgstr "" -#: ../roundup/admin.py:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -984,17 +1057,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr "" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, python-format msgid " %(description)s (%(name)s)\n" msgstr "" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 msgid "" "Usage: set items property=value [property=value ...]\n" " Set the given properties of one or more items(s).\n" @@ -1015,7 +1088,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1024,17 +1097,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, python-format msgid "%(key)s: %(value)s\n" msgstr "" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1045,38 +1118,38 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " msgstr "" -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1086,7 +1159,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1096,49 +1169,58 @@ msgid "" " " msgstr "" -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "エラー: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" "Type \"help\" for help." msgstr "" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." msgstr "" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2542 +msgid "Command history and line editing not available" +msgstr "" + +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "" -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "" @@ -1149,39 +1231,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1202,7 +1284,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1258,57 +1340,52 @@ msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にあ msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, python-format msgid "Unrecognized scheme in %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1333,15 +1410,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "不正なリクエスト" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "%(class)s を無効にする権限がありません" @@ -1361,13 +1438,13 @@ msgstr "%(class)s を無効にする権限がありません" msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s を無効にしました" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "クエリーを編集する権限がありません" -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "クエリーを保存する権限がありません" @@ -1376,74 +1453,88 @@ msgstr "クエリーを保存する権限がありません" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "不正なリクエスト" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "不正なリクエスト" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "%(class)sを登録する権限がありません" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr "" -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "%(class)sを編集する権限がありません" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "アイテムの編集完了" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s 更新完了" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s 登録完了" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View their changes in a new window." msgstr "" -"編集エラー: 他のユーザーが %(klass)s (%(props)s) を変更しました。. 変更内容の確認(別ウィンドウで開く)" +"編集エラー: 他のユーザーが %(klass)s (%(props)s) を変更しました。. 変更内容の確認(別ウィンドウで開" +"く)" -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "更新エラー: %s" -#: ../roundup/cgi/actions.py:936 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "エラー: %s" + +#: ../roundup/cgi/actions.py:953 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:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "パスワード再設定" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1452,29 +1543,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "登録されていないユーザー名です" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "登録されていないメールアドレスです" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "ユーザー名またはメールアドレスを入力してください" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "パスワード(確認)" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1488,31 +1579,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "%sへメールを送信しました" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "ユーザー登録完了!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1528,12 +1619,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1543,49 +1634,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "登録時のロール割り当ては許可されていません。" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "ログアウト完了" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "ユーザー名は入力必須です" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, python-format msgid "You do not have permission to view %(class)s" msgstr "%(class)s を表示する権限がありません" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "パスワード再設定" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                          Templating Error

                          \n" @@ -1593,27 +1694,27 @@ msgid "" "

                          Debugging information follows

                          " msgstr "" -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                        1. \"%(name)s\" (%(info)s)
                        2. " msgstr "" -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                        3. Looking for \"%(name)s\", current path:
                            %(path)s
                        4. " msgstr "" -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                        5. In %s
                        6. " msgstr "" -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "" -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1625,17 +1726,17 @@ msgid "" "
                          Nota: i campi  evidenziati  sono obbligatori.
                          \n" msgstr "" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                          A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -1644,21 +1745,21 @@ msgstr "" "

                          Python スクリプトの実行中にエラーが発生しました。エラー発生時の関数呼び出" "しシークエンスを新しいものから順にに表示します。例外の属性は次の通り:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "" -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "未定義" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                          An error has occurred

                          \n" @@ -1667,163 +1768,161 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "クエリー編集の権限がありません。" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" +msgstr "" + +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "不正なリクエスト" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "不正なリクエスト" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, fuzzy, python-format msgid "Invalid HOST %s" msgstr "不正なリクエスト" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -1885,115 +1984,115 @@ msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "%(class)s の入力必須属性 %(property)s が入力されていません" msgstr[1] "%(class)s の入力必須属性 %(property)s が入力されていません" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "クラス %(class)s のアイテムを %(action)s する権限がありません" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(一覧)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "新規登録" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "更新" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "指定されたプロパティは存在しません" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "リンク先のクラス %(classname)s は存在しません" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "リンク先のノードは存在しません" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!" msgstr "このイベントは履歴の中に表示されません!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "備考:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "履歴" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "日時" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "ユーザー" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "アクション" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "引数" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "%(class)s %(id)s のコピー" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2001,27 +2100,32 @@ msgstr "" "DateHTMLProperty のデフォルト値は DateHTMLProperty もしくは日付の文字列表現で" "なくてはなりません。" -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr "存在しない値の %(attr)s 検索が実行されました" -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, fuzzy, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr "存在しない値の %(attr)s 検索が実行されました" -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2042,227 +2146,230 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "不正なリクエスト" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "不正なリクエスト" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec])" msgstr "" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s年" msgstr[1] "%(number)s年" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)sヶ月" msgstr[1] "%(number)sヶ月" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s週" msgstr[1] "%(number)s週" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s日" msgstr[1] "%(number)s日" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "明日" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "昨日" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s時間" msgstr[1] "%(number)s時間" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "1時間" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 1/2時間" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4時間" msgstr[1] "1 %(number)s/4時間" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "少し" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "たった今" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1分" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s分" msgstr[1] "%(number)s分" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "1/2時間" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4時間" msgstr[1] "%(number)s/4時間" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s前" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "%s以内" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, python-format msgid "property %(property)s: %(errormsg)s" msgstr "" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません" -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" "\tcontains old-style template - ignored" msgstr "" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2450,8 +2557,7 @@ msgid "" " %(message)s\n" msgstr "" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2460,7 +2566,7 @@ msgid "" " %(errors)s\n" msgstr "" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, python-format msgid "" "\n" @@ -2469,11 +2575,11 @@ msgid "" " %(classname)s\n" msgstr "" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2481,7 +2587,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2489,205 +2595,206 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "不正なリクエスト" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "不正なリクエスト" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "ファイル" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "メッセージ" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "通知先" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "関連課題" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "タイトル" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "担当者" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "キーワード" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "優先度" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "状態" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "最終更新" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "更新者" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "登録日時" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "登録者" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -2709,7 +2816,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -2718,36 +2825,36 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 msgid "" "\n" "Error: not enough source specification information" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " @@ -2780,64 +2887,64 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                          Roundup trackers index

                            \n" msgstr "" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, python-format msgid "Error: %(type)s: %(value)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr "" -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr "" -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, python-format msgid "" "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -2847,7 +2954,7 @@ msgid "" " specifics." msgstr "" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 msgid "" " -u runs the Roundup web server as this UID\n" " -g runs the Roundup web server as this GID\n" @@ -2857,7 +2964,7 @@ msgid "" " -D run the server in the foreground even when -d is used." msgstr "" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, python-format msgid "" "\n" @@ -2930,24 +3037,24 @@ msgid "" " any url-unsafe characters like spaces, as these confuse IE.\n" msgstr "" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "" -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "" @@ -3101,13 +3208,13 @@ msgstr "<< 前へ" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3118,13 +3225,13 @@ msgstr "${total} 件中 ${start}..${end} 件目" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3219,11 +3326,11 @@ msgstr "" "

                            このフォームを使って ${classname} クラスの内容を編集で" "きます。カンマ、改行、ダブルクォート(\")の入力には注意してください。カンマや" "改行を値として入力する場合はダブルクォート(\")で囲む必要があります。またダブ" -"ルクォート自体を入力したいときは二重にしてクォートします(\"\")。

                            マルチリンクプロパティの場合は個々の値をコロンで(\":\")区切りま" -"す(... ,\"one:two:three\", ...)。

                            クエリーを削除す" -"るにはその行を削除します。追加する場合は、idカラムに番号を設定した行を末尾に" -"追加します。

                            " +"ルクォート自体を入力したいときは二重にしてクォートします(\"\")。

                            マルチリンクプロパティの場合は個々の値をコロンで(\":\")区" +"切ります(... ,\"one:two:three\", ...)。

                            クエリーを" +"削除するにはその行を削除します。追加する場合は、idカラムに番号を設定した行を" +"末尾に追加します。

                            " #: ../share/roundup/templates/classic/html/_generic.index.html:53 #: ../share/roundup/templates/devel/html/_generic.index.html:50 @@ -3239,6 +3346,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "ファイル一覧 - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "更新" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3451,53 +3595,53 @@ msgstr "登録者" msgid "Assigned To" msgstr "担当者" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "CSV形式でダウンロード" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "並べ替え:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- 無指定 -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "降順表示" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "グループ化:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "再表示" @@ -3554,7 +3698,7 @@ msgid "Assigned To" msgstr "担当" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3590,8 +3734,9 @@ msgstr "コピー作成" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                            Note:  highlighted  fields are required.
                            " +"
                            Note:  highlighted  fields are required.
                            " msgstr "" "
                            Note:  強調" "表示 されている項目は入力必須です。
                            " @@ -3943,8 +4088,8 @@ msgid "Query name**:" msgstr "クエリー名**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4076,18 +4221,22 @@ msgstr "通知先" msgid "Content" msgstr "内容" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "クエリー (編集)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "課題" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4099,7 +4248,7 @@ msgstr "課題" msgid "Create New" msgstr "新規登録" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4108,163 +4257,163 @@ msgstr "新規登録" msgid "Show Unassigned" msgstr "未割り当ての課題を表示" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "すべて表示" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "課題ID指定:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "登録済みキーワードの編集" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "管理" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "クラス一覧" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "ユーザー一覧" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "ユーザー登録" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "ログイン" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "次回から入力を省略" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "ユーザー登録" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "パスワードを忘れた?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "ログイン中: ${user} " -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "自分の課題" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "個人設定" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "ログアウト" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "ヘルプ" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundupドキュメント" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "このメッセージをクリア" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "指定しない" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "" @@ -4778,11 +4927,11 @@ msgstr "" "

                            このフォームを使って ${classname} クラスの内容を編集で" "きます。カンマ、改行、ダブルクォート(\")の入力には注意してください。カンマや" "改行を値として入力する場合はダブルクォート(\")で囲む必要があります。またダブ" -"ルクォート自体を入力したいときは二重にしてクォートします(\"\")。

                            マルチリンクプロパティの場合は個々の値をコロンで(\":\")区切りま" -"す(... ,\"one:two:three\", ...)。

                            クエリーを削除す" -"るにはその行を削除します。追加する場合は、idカラムに番号を設定した行を末尾に" -"追加します。

                            " +"ルクォート自体を入力したいときは二重にしてクォートします(\"\")。

                            マルチリンクプロパティの場合は個々の値をコロンで(\":\")区" +"切ります(... ,\"one:two:three\", ...)。

                            クエリーを" +"削除するにはその行を削除します。追加する場合は、idカラムに番号を設定した行を" +"末尾に追加します。

                            " #: ../share/roundup/templates/devel/html/bug.index.html:3 #: ../share/roundup/templates/devel/html/bug.index.html:9 @@ -4934,8 +5083,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "登録 ${creation} by ${creator} 最終更新 ${activity} by ${actor}." #: ../share/roundup/templates/devel/html/bug.item.html:226 @@ -5176,22 +5325,22 @@ msgstr "" msgid "User" msgstr "ユーザー登録" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "自分が担当しているもの" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "クエリー (編集)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "登録済みのキーワード" @@ -5357,27 +5506,27 @@ msgid "Please log in or register." msgstr "ログインまたはユーザー登録をしてください。" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${total} 件中 ${start}..${end} 件目" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/locale/lt.po b/locale/lt.po index 42fbee1f3..3589c4f78 100644 --- a/locale/lt.po +++ b/locale/lt.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:21+0100\n" "Last-Translator: Nerijus Baliunas \n" "Language-Team: \n" @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" -"%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2;\n" #: ../roundup/actions.py:49 #, fuzzy, python-format @@ -28,19 +28,19 @@ msgstr "Jūs neturite leidimo %(action)s %(classname)s klasę." msgid "You may not retire the admin or anonymous user" msgstr "Negalite deaktyvuoti administratoriaus ar anoniminio vartotojo" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:85 :962 :1011 :1033 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "nėra klasės \"%(classname)s\"" # ../roundup/admin.py:95 :99 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "argumentas \"%(arg)s\" nėra parinktis=reikšmė formato" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -105,7 +105,7 @@ msgstr "" "Problema: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -158,12 +158,12 @@ msgstr "" " roundup-admin help -- specifinė pagalba komandoms\n" " roundup-admin help all -- visa įmanoma pagalba\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Komandos:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "Komandos gali būti sutrumpintos, tačiau sutrumpinimas turi atitikti tik\n" "vieną komandą, pvz. l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -306,25 +306,25 @@ msgstr "" "\n" "Komandų pagalba:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:338 :387 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Šablonai:" # ../roundup/admin.py:341 :398 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Duomenų saugyklos:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -349,14 +349,14 @@ msgstr "" " išsaugomos, jei jos įvykdomos sėkmingai.\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -370,42 +370,42 @@ msgstr "" # ../roundup/admin.py:360 :447 :508 :587 :637 :695 :716 :744 :815 :882 :953 # :1001 :1023 :1050 :1117 :1184 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "Paduota nepakankamai argumentų" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (Slaptažodis): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Pakartoti): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Bandykite dar kartą..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "turite pateikti parinktį \"%(propname)s\"." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -424,13 +424,13 @@ msgstr "" " Ši komanda išvardina parinktis ir jų reikšmes duotam elementui.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -462,7 +462,7 @@ msgstr "" " direktorijoje.\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -496,7 +496,7 @@ msgstr "" " direktorijoje.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -519,20 +519,20 @@ msgstr "" " " # ../roundup/admin.py:682 :835 :847 :901 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s neturi parinkties \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -551,11 +551,12 @@ msgstr "" " arba jo raktinė reikšmė.\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Naudojimas: genconfig \n" @@ -563,7 +564,7 @@ msgstr "" " įprastomis reikšmėmis faile .\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -571,20 +572,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -604,7 +605,7 @@ msgstr "" " " # ../roundup/admin.py:541 :556 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" @@ -612,18 +613,18 @@ msgstr "" "-d netinkamas." # ../roundup/admin.py:564 :964 :1013 :1035 -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "nėra tokio %(classname)s parinkties \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -643,12 +644,12 @@ msgstr "" " all -- visa įmanoma pagalba\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Atsiprašome, pagalbos temai \"%(topic)s\" nėra" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -671,27 +672,27 @@ msgstr "" " kartą.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "pašalinti" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, 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 +700,29 @@ msgstr "%(class)s %(id)s %(properties)s pakeitimai išsaugoti" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -732,10 +733,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -768,7 +772,7 @@ msgstr "" " veiksmas).\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -778,7 +782,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -796,23 +800,23 @@ msgstr "" " Vykdyti tracker'io inicializacijos funkciją dbinit.init()\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Administratoriaus slaptažodis: " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Patvirtinkite: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "Namų direktorija neegzistuoja" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "Egzempliorius nebuvo įdiegtas" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -822,7 +826,7 @@ msgstr "" "Jei jūs ją inicializuosite dar kartą, prarasite visus duomenis!\n" "Ištrinti duomenų bazę? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -870,12 +874,12 @@ msgstr "" " Taip pat pažiūrėkite initopts pagalbą.\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "Namų direktorijos tėvinė direktorija \"%(parent)s\" neegzistuoja" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -886,22 +890,22 @@ msgstr "" "Jei jūs jį perdiegsite, prarasite visus duomenis!\n" "Ištrinti jį? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Pasirinkite šabloną [klasikinis]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Pasirinkite duomenų saugyklą [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Klaida konfigūracijos nustatymuose: \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -914,11 +918,11 @@ msgstr "" " Dabar jūs turėtumėte pakeisti tracker'io konfigūracijos failą:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... mažiausiai turėtumėte nustalyti šias parinktis:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -947,7 +951,7 @@ msgstr "" " aukščiau minėtus žingsnius.\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -975,17 +979,17 @@ msgstr "" " parinkties sąrašas kiekvienam klasės egzemplioriui.\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "Pateikta per daug argumentų" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -1008,17 +1012,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1028,10 +1032,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1056,11 +1060,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Netinkamas formatas" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1078,25 +1082,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1125,49 +1129,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Nežinomas vartotojo vardas" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Nežinomas el. pašto adresas" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1191,17 +1264,17 @@ msgstr "" " Paprastai tai įvyksta automatiškai.\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "nėra elemento \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "nėra elemento \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1219,7 +1292,7 @@ msgstr "" " Duotas elementas vėl taps prieinamas vartotojams.\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1241,7 +1314,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1263,7 +1336,7 @@ msgstr "" " nepadarys jokių pakeitimų duomenų bazėje.\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1276,47 +1349,47 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Nėra tokios rolės \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, 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:1946 +#: ../roundup/admin.py:2083 #, fuzzy, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "Naujiems web vartotojams suteikiama rolė \"%(role)s\"" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, 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:1952 +#: ../roundup/admin.py:2089 #, 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:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Rolė \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1324,17 +1397,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, 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:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1369,7 +1442,7 @@ msgstr "" " reikšmės (t.y. \"1,2,3\").\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1383,17 +1456,18 @@ msgstr "" " Ši komanda išvardina duotos klasės parinktis.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (key property)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1404,22 +1478,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1455,17 +1529,17 @@ msgstr "" " pateiks 4 simbolių ilgio \"Name\" stulpelį.\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" ne vardas:plotis" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1475,7 +1549,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1491,36 +1565,36 @@ msgstr "" " " # ../roundup/cgi/actions.py:579 :590 :761 :780 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Klaida: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, 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:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "Kelios komandos atitinka \"%(command)s\": %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Įveskite tracker'io namų direktoriją: " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "Klaida: Negaliu atidaryti tracker'io: %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1529,15 +1603,25 @@ msgstr "" "Roundup %s pasiruošęs priimti duomenis.\n" "Norėdami iškviesti pagalbą įveskite \"help\"." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Pastaba: komandų archyvas ir redagavimas neprieinami" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "išeiti..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Yra neišsaugotų pakeitimų. Išsaugoti juos (y/N)? " @@ -1548,39 +1632,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1601,7 +1685,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1657,57 +1741,52 @@ msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Neatpažinta koduotė: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1732,16 +1811,16 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr "Netinkamas formatas" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "Neturite leidimo sukurti %(class)s" @@ -1762,14 +1841,14 @@ msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s buvo deaktyvuotas" # ../roundup/cgi/actions.py:163 :191 -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Neturite leidimo redaguoti užklausas" # ../roundup/cgi/actions.py:169 :197 -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Neturite leidimo išsaugoti užklausas" @@ -1778,49 +1857,55 @@ msgstr "Neturite leidimo išsaugoti užklausas" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Netinkamas formatas" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Neturite leidimo sukurti %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Neturite leidimo redaguoti %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Elementų pakeitimai išsaugoti" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, 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:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "sukurta %(class)s %(id)s" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View jų pakeitimus " "naujame lange." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Redagavimo klaida: %s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:579 :590 :761 :780 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Klaida: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1845,12 +1938,12 @@ msgstr "" "(šį pranešimą gali neteisingai sukelti Mozilla klaida, patikrinkite savo " "paštą.)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Slaptažodžio atstatymo užklausa" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1859,29 +1952,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, 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:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Nežinomas vartotojo vardas" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Nežinomas el. pašto adresas" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "Privalote nurodyti vartotojo vardą ar el. pašto adresą" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Patvirtinti slaptažodį" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1895,31 +1988,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "El. laiškas išsiųstas %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Jūs esate užregistruotas, sveiki prisijungę!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1935,12 +2028,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1950,50 +2043,60 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "Negalima pateikti rolių registracijos metu." -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Jūs atsijungėte" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "Reikalingas vartotojo vardas" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Neturite prisijungimo teisių" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "Neturite leidimo redaguoti %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Slaptažodžio atstatymo užklausa" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                            Templating Error

                            \n" @@ -2004,27 +2107,27 @@ msgstr "" "

                            %(exc_type)s: %(exc_value)s

                            \n" "

                            Informacija klaidų taisymui

                            " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                          1. \"%(name)s\" (%(info)s)
                          2. " msgstr "
                          3. \"%(name)s\" (%(info)s)
                          4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                          5. Looking for \"%(name)s\", current path:
                              %(path)s
                          6. " msgstr "
                          7. Ieškau \"%(name)s\", dabartinis kelias :
                              %(path)s
                          8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                          9. In %s
                          10. " msgstr "
                          11. %s viduje
                          12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Rasta klaida jūsų šablone \"%s\"." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2043,17 +2146,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Pilnas traceback:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                            A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2063,23 +2166,23 @@ msgstr "" "iškvietimų iki klaidos, kur naujausias (giliausias) iškvietimas yra pirmas. " "Klaidos atributai yra:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<failas yra None - greičiausiai viduje eval ar exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "%s viduje" # ../roundup/cgi/cgitb.py:172 :178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "neapibrėžta" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                            An error has occurred

                            \n" @@ -2093,168 +2196,163 @@ msgstr "" "Apie klaidą pranešėme tracker'io administratoriui.

                            \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Formos klaida: " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Neatpažinta koduotė: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Jūs neturite teisių žiūrėti šį failą." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, 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: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 "" -"%(starttag)sAtmintinės atitikimai: %(cache_hits)d, neatitikimai " -"%(cache_misses)d. Įkeliami elementai: %(get_items)f sek. Filtruojama: " -"%(filtering)f sek.%(endtag)s\n" - -#: ../roundup/cgi/client.py:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2318,121 +2416,121 @@ msgstr[0] "Reikalinga %(class)s parinktis %(property)s nepateikta" msgstr[1] "Reikalingos %(class)s parinktys %(property)s nepateiktos" msgstr[2] "Reikalingos %(class)s parinktys %(property)s nepateiktos" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "" "Jūs negalite atlikti komandos %(action)s su klasės %(class)s elementais" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(list)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[paslėpta]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Naujas elementas -- nėra istorijos" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Išsaugoti pakeitimus" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "Nurodytos parinkties nėra" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "Susietos klasės %(classname)s nebėra" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:930 :951 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "Susieto elemento nebėra" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (no value)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!" msgstr "Šis įvykis nėra rodomas archyve!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Pastaba:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Archyvas" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Data" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Vartotojas" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Veiksmas" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Argumentai" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, 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:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "Ne" # ../roundup/cgi/templating.py:993 :1357 :1376 :1381 -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Taip" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2440,27 +2538,32 @@ msgstr "" "standartinė DateHTMLProperty reikšmė turi būti arba DateHTMLProperty arba " "datos reprezentacija kaip simbolių eilutės." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2481,24 +2584,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Netinkamas formatas" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Netinkamas formatas" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2507,11 +2614,11 @@ msgstr "" "Ne data, nurodykite: „yyyy-mm-dd“, „mm-dd“, „HH:MM“, „HH:MM:SS“ ar „yyyy-mm-" "dd.HH:MM:SS.SSS“" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2520,7 +2627,7 @@ msgstr "" "%r ne data / datos formatas „yyyy-mm-dd“, „mm-dd“, „HH:MM“, „HH:MM:SS“ ar " "„yyyy-mm-dd.HH:MM:SS.SSS“" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2529,12 +2636,12 @@ msgstr "" "Ne intervalas, nurodyti: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [datos " "formatas]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "Ne intervalas, formatas: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" @@ -2542,7 +2649,7 @@ msgstr[0] "%(number)s metus" msgstr[1] "%(number)s metus" msgstr[2] "%(number)s metų" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" @@ -2550,7 +2657,7 @@ msgstr[0] "%(number)s mėnesį" msgstr[1] "%(number)s mėnesius" msgstr[2] "%(number)s mėnesių" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" @@ -2558,7 +2665,7 @@ msgstr[0] "%(number)s savaitę" msgstr[1] "%(number)s savaites" msgstr[2] "%(number)s savaičių" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" @@ -2566,15 +2673,15 @@ msgstr[0] "%(number)s dieną" msgstr[1] "%(number)s dienas" msgstr[2] "%(number)s dienų" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "rytoj" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "vakar" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" @@ -2582,15 +2689,15 @@ msgstr[0] "%(number)s valandą" msgstr[1] "%(number)s valandas" msgstr[2] "%(number)s valandų" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "valandą" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 1/2 valandos" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" @@ -2598,19 +2705,19 @@ msgstr[0] "1 %(number)s/4 valandos" msgstr[1] "1 %(number)s/4 valandos" msgstr[2] "1 %(number)s/4 valandos" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "už minutės" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "ką tik" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1 minutę" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" @@ -2618,11 +2725,11 @@ msgstr[0] "%(number)s minutę" msgstr[1] "%(number)s minutes" msgstr[2] "%(number)s minučių" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "1/2 valandos" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" @@ -2630,69 +2737,69 @@ msgstr[0] "%(number)s/4 valandos" msgstr[1] "%(number)s/4 valandos" msgstr[2] "%(number)s/4 valandos" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "prieš %s" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "po %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "Klaida: %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, 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:460 +#: ../roundup/hyperdb.py:461 #, 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:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2701,23 +2808,22 @@ msgstr "" "PERSPĖJIMAS: direktorijoje '%s'\n" "\tseno tipo šablonas, praleistas" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2961,8 +3067,7 @@ msgstr "" "\n" "Jūsų laiške %(message)s yra klaidų.\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2975,7 +3080,7 @@ msgstr "" "%(mailadmin)s, kad pataisytų neteisingus atributus:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -2988,11 +3093,11 @@ msgstr "" "%(mailadmin)s, kad pataisytų neteisingą klasės pavadinimą:\n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "ne tokios formos: [arg=reikšmė,reikšmė,...;arg=reikšmė,reikšmė,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -3000,7 +3105,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -3008,70 +3113,70 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " @@ -3079,137 +3184,138 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:897 :901 -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Neteisingas vartotojo vardas ar slaptažodis" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "failai" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "pranešimai" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "informuoti" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "pirmtakas" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "antraštė" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "priskirta" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 #, fuzzy msgid "keyword" msgstr "Raktinis žodis" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "prioritetas" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "statusas" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "veiksmas" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "veikėjas" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "sukūrimas" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "kūrėjas" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "Nauja pateiktis nuo %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s parašė komentarą:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, fuzzy, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "Nauja pateiktis nuo %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, fuzzy, python-format msgid "" "\n" @@ -3236,7 +3342,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "Įveskite kelią į direktoriją demo track'erio sukūrimui [%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3245,37 +3351,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Naudojimas: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "Direktorijoje %s nėra tracker'io šablonų" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Klaida: nepakankamai šaltinio specifikacijos informacijos" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Klaida: pop specifikacija netinkama" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3309,7 +3415,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                            Roundup trackers index

                              \n" @@ -3317,58 +3423,58 @@ msgstr "" "Roundup tracker'io indeksas\n" "

                              Roundup tracker'io indeksas

                                \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "PERSPĖJIMAS: \"-g\" argumentas ignoruojamas, nėra root teisių" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "Negaliu pakeisti grupių -- nėra grp modulio" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "Grupės %(group)s nėra" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "Negaliu paleisti root teisėmis!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "PERSPĖJIMAS: \"-u\" argumentas ignoruojamas, nėra root teisių" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "Negaliu pakesiti vartotojų - nėra pwd modulio" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "Vartotojo %(user)s nėra" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3385,7 +3491,7 @@ msgstr "" " Įvedę \"roundup-server -c help\" pamatysite Windows Services\n" " specifiką." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3401,7 +3507,7 @@ msgstr "" " nurodytą PIDfaile. Parinktis -l *privalo* būti nurodyta\n" " jei naudojama -d." -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3527,25 +3633,25 @@ msgstr "" " nesupras.\n" "\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "Egzempliorius turi būti nurodomas taip: vardas=namų_direktorija" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Konfigūracija išsaugota %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Roundup serveris paleistas ant %(HOST)s:%(PORT)s" @@ -3698,13 +3804,13 @@ msgstr "<< pirmesnis" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3715,13 +3821,13 @@ msgstr "${start}..${end} iš ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3817,9 +3923,9 @@ msgstr "" "naudodami šią formą. Su kableliais, naujomis eilutėmis ir dvigubomis " "kabutėmis (\") turi būti elgiamasi atsargiai. Jūs galite naudoti kablelius " "ir naujas eilutes užkomentuodami reikšmes dvigubomis kabutėmis (\"). " -"Dvigubos kabutės turi būti užkomentuotos dvigubinant (\"\").

                                Daugiasąsajėse parinktyse reikšmės atskirtos dvitaškiu (\":" -"\") (... ,\"one:two:three\", ...)

                                Įrašai " +"Dvigubos kabutės turi būti užkomentuotos dvigubinant (\"\").

                                Daugiasąsajėse parinktyse reikšmės atskirtos dvitaškiu " +"(\":\") (... ,\"one:two:three\", ...)

                                Įrašai " "ištrinami ištrinant jų eilutę. Nauji įrašai pridedami prijungiant juos prie " "lentelės - įrašykite X id stulpelyje.

                                " @@ -3837,6 +3943,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Failų sąrašas - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Išsaugoti pakeitimus" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4048,53 +4191,53 @@ msgstr "Sukūrėjas" msgid "Assigned To" msgstr "Priskirta" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Parsisiųsti kaip CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Išrūšiuoti pagal:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- nieko -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Mažėjančia tvarka:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Grupuoti pagal:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Perpaišyti vaizdą" @@ -4151,7 +4294,7 @@ msgid "Assigned To" msgstr "Priskirta" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4187,19 +4330,21 @@ msgstr "Kopijuoti" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                Note:  highlighted  fields are required.
                                " +"
                                Note:  highlighted  fields are required.
                                " msgstr "" -"
                                Pastaba:  pažymėti  laukai yra privalomi.
                                " +" " +"
                                Pastaba:  pažymėti  laukai yra privalomi.
                                " #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy msgid "" "Created on ${creation} by ${creator}, last changed ${activity} by ${actor}." msgstr "" -"Sukurta ${creation} ${creator}, paskutinį kartą keista " -"${activity} ${actor}." +"Sukurta ${creation} ${creator}, paskutinį kartą keista " +"${activity} ${actor}." #: ../share/roundup/templates/classic/html/issue.item.html:149 #: ../share/roundup/templates/classic/html/msg.item.html:61 @@ -4544,8 +4689,8 @@ msgid "Query name**:" msgstr "Užklausos vardas**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4678,18 +4823,22 @@ msgstr "Gavėjai" msgid "Content" msgstr "Turinys" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Jūsų užklausos (redaguoti)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Kreipiniai" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4701,7 +4850,7 @@ msgstr "Kreipiniai" msgid "Create New" msgstr "Sukurti naują" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4710,163 +4859,163 @@ msgstr "Sukurti naują" msgid "Show Unassigned" msgstr "Rodyti nepriskirtus" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Rodyti visus" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Rodyti kreipinį:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Redaguoti esamus" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Administravimas" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Klasių sąrašas" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Vartotojų sąrašas" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Pridėti vartotoją" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Prisijungti" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Prisiminti mane?" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "Užsiregistruoti" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Pamiršote savo vartotojo vardą?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Sveiki, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Jūsų kreipiniai" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Smulkesnė informacija apie jus" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "Atsijungti" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Pagalba" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup dokumentacija" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "išvalyti šį pranešimą" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "nesvarbu" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "nėra reikšmės" @@ -5383,9 +5532,9 @@ msgstr "" "naudodami šią formą. Su kableliais, naujomis eilutėmis ir dvigubomis " "kabutėmis (\") turi būti elgiamasi atsargiai. Jūs galite naudoti kablelius " "ir naujas eilutes užkomentuodami reikšmes dvigubomis kabutėmis (\"). " -"Dvigubos kabutės turi būti užkomentuotos dvigubinant (\"\").

                                Daugiasąsajėse parinktyse reikšmės atskirtos dvitaškiu (\":" -"\") (... ,\"one:two:three\", ...)

                                Įrašai " +"Dvigubos kabutės turi būti užkomentuotos dvigubinant (\"\").

                                Daugiasąsajėse parinktyse reikšmės atskirtos dvitaškiu " +"(\":\") (... ,\"one:two:three\", ...)

                                Įrašai " "ištrinami ištrinant jų eilutę. Nauji įrašai pridedami prijungiant juos prie " "lentelės - įrašykite X id stulpelyje.

                                " @@ -5539,11 +5688,11 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" -"Sukurta ${creation} ${creator}, paskutinį kartą keista " -"${activity} ${actor}." +"Sukurta ${creation} ${creator}, paskutinį kartą keista " +"${activity} ${actor}." #: ../share/roundup/templates/devel/html/bug.item.html:226 #: ../share/roundup/templates/devel/html/file.index.html:10 @@ -5784,22 +5933,22 @@ msgstr "" msgid "User" msgstr "Pridėti vartotoją" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "priskirta man" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Jūsų užklausos (redaguoti)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Esami raktiniai žodžiai" @@ -5966,27 +6115,27 @@ msgid "Please log in or register." msgstr "Prisijunkite ar užsiregistruokite." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} iš ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6031,6 +6180,15 @@ msgstr "Rodyti kreipinį:" msgid "Password" msgstr "Prisijungimo slaptažodis" +#, 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 "" +#~ "%(starttag)sAtmintinės atitikimai: %(cache_hits)d, neatitikimai " +#~ "%(cache_misses)d. Įkeliami elementai: %(get_items)f sek. Filtruojama: " +#~ "%(filtering)f sek.%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/nb.po b/locale/nb.po index 93d3a9c94..a0468af3c 100644 --- a/locale/nb.po +++ b/locale/nb.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:21+0100\n" "Last-Translator: Christian Aastorp \n" "Language-Team: Norwegian Bokmal \n" @@ -30,19 +30,19 @@ msgstr "Du har ikke tillatelse til %(action)s %(classname)s klassen." msgid "You may not retire the admin or anonymous user" msgstr "Du kan ikke slette admin eller anonymous brukerne" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "ingen slik klasse \"%(classname)s\"" -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "argumentet \"%(arg)s\" ikke propname=value" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -105,7 +105,7 @@ msgstr "" "Problem: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -158,12 +158,12 @@ msgstr "" " roundup-admin help -- kommandospesifikk hjelp\n" " roundup-admin help all -- all tilgjengelig hjelp\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "Kommandoer:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "Kommandoer kan forkortes så lenge som forkortelsen bare passer med en " "kommando, feks e.g. l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -290,8 +290,8 @@ msgstr "" "\n" "For å bruke kommandoer som endrer data er en login-kombinasjon av navn og " "passord krevet.\n" -"Login-informasjonen kan enten spesifiseres som \"navn\" eller \"navn:passord" -"\".\n" +"Login-informasjonen kan enten spesifiseres som \"navn\" eller \"navn:" +"passord\".\n" " . ROUNDUP_LOGIN systemvariable\n" " . -u kommandolinje opsjonen\n" "Hvis enten navn eller passord ikke er oppgitt blir de etterspurt på " @@ -309,23 +309,23 @@ msgstr "" "\n" "Kommandohjelp:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "Maler:" -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "Back ends:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -348,14 +348,14 @@ msgstr "" " permanent, hvis de lykkes.\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -366,42 +366,42 @@ msgstr "" " på kommandolinjen ette \"create\"kommandoen.\n" " " -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "For få parametre" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (Password): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (Again): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "Beklager, prøv en gang til..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "du må oppgi \"%(propname)s\" egenskapen." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -420,13 +420,13 @@ msgstr "" " Lister egenskapene og deres verdier for oppgitt node.\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -457,7 +457,7 @@ msgstr "" "\t kolonseparerte filer som plasseres i angitt katalog.\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -490,7 +490,7 @@ msgstr "" " kolonseparerte filer som plasseres i angitt katalog.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -510,19 +510,19 @@ msgstr "" " Verdien kan enten være nodeid-en til den lenkede noden, eller dens " "nøkkelverdi.n " -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s har ingen verdi \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -539,11 +539,12 @@ msgstr "" " Verdien kan enten være nodeid-en til den lenkede noden, eller dens " "nøkkelverdi.n " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" "Bruk: genconfig \n" @@ -551,7 +552,7 @@ msgstr "" " i .\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -559,20 +560,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -593,24 +594,24 @@ msgstr "" "\t\tved angivelsene.\n" " " -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, 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:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "finnes ikke %(classname)s node \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "finnes ikke %(classname)s property \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -630,12 +631,12 @@ msgstr "" " all -- all tilgjengeli hjelp\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "Beklager, ingen hjelp for \"%(topic)s\"" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -657,27 +658,27 @@ msgstr "" " av list eller find-kommandoene, og at dens nøkkel kan gjenbrukes.\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "slette" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s endret ok" @@ -685,29 +686,29 @@ msgstr "%(class)s %(id)s %(properties)s endret ok" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, fuzzy, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "%(propname)s (%(proptype)s): " -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -718,10 +719,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -751,7 +755,7 @@ msgstr "" " (eller, mer omstendelig glem alle gamle data).\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -761,7 +765,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -779,23 +783,23 @@ msgstr "" " Kjør sporerens oppstartsfunksjon dbinit.init()\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "Admin passord:" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " Bekreft: " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "Hjemmekatalogen finnes ikke" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "Sporeren er ikke installert" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -805,7 +809,7 @@ msgstr "" "Hvis du reinitialiserer den vil alle data bli slettet.\n" "Slette den? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -852,12 +856,12 @@ msgstr "" "\t\tSe også hjelp for initops.\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "Overordnet katalog \"%(parent)s\" finnes ikke" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -868,22 +872,22 @@ msgstr "" "Du vil miste alle data hvis du reinstallerer!\n" "Slette den? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "Velg mal [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "Velg database backend [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "Feil i konfigurasjon \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -896,11 +900,11 @@ msgstr "" " Du bør redigere konfigurasjonsfilen for sporeren nå:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr "... du må spesifisere følgende opsjoner som et minimum:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -928,7 +932,7 @@ msgstr "" " disse endringene.\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -957,17 +961,17 @@ msgstr "" " for alle klasseinstanser.\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "For mange argumenter" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 #, fuzzy msgid "" "Usage: migrate\n" @@ -1014,17 +1018,17 @@ msgstr "" " la det bli en vane.\n" " " -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, fuzzy, python-format msgid "No migration action required. At schema version %s." msgstr "Ingen migrasjon krevet" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1034,10 +1038,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1048,8 +1052,8 @@ msgstr "" " Fjern journallinjer eldre enn periode som oppgitt, eller før en\n" " gitt dato.\n" " \n" -" En periode spesifiseres ved hjelp av suffiksene \"y\", \"m\", and \"d" -"\".\n" +" En periode spesifiseres ved hjelp av suffiksene \"y\", \"m\", and " +"\"d\".\n" " Suffikset \"w\" (for \"week\") betyr syv dager.\n" " \n" " \"3y\" betyr tre år\n" @@ -1062,11 +1066,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "Ugyldig format" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1084,25 +1088,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1131,49 +1135,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "Ukjent brukernavn:" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "Ukjent postadresse:" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1197,17 +1270,17 @@ msgstr "" " automatisk.\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "ingen slik enhet \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "ingen slik enhet \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1225,7 +1298,7 @@ msgstr "" "\t Oppgitte noder blir tilgjengelige for brukerne igjen.\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1246,7 +1319,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1265,7 +1338,7 @@ msgstr "" " commited. \n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1278,47 +1351,47 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "Ingen slik rolle \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, fuzzy, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "Nye web-brukere for rollene \"%(role)s\"" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, fuzzy, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "Nye web-brukere for rollen \"%(role)s\"" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, fuzzy, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "Nye epostbrukere for rollene \"%(role)s\"" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, fuzzy, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "Nye epostbrukere for rollen \"%(role)s\"" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "Rolle \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s bare for \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1326,17 +1399,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, 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:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1371,7 +1444,7 @@ msgstr "" "som\n" " en kommaseparert liste (feks \"1,2,3\")." -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1385,17 +1458,18 @@ msgstr "" " Lister egenskapene til gitt klasse.\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (key property)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1406,22 +1480,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1455,17 +1529,17 @@ msgstr "" " resulterer i en fire bokstavaer bred \"Name\" kolonne.\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" ikke navn:bredde" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1475,7 +1549,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1490,34 +1564,34 @@ msgstr "" " i .\n" " " -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "Feil: %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "Ukjent kommando \"%(command)s\" (\"help commands\" for liste)" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "Multiple kommandoer matcher \"%(command)s\": %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "Oppgi sporers plassering:" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "Feil: Kan ikke åpne sporer: %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1526,15 +1600,25 @@ msgstr "" "Roundup %s er klar til bruk.\n" "Skriv \"help\" for hjelp." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "Merk: kommandohistorikk og redigering utilgjengelig" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "exit..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "Det er ikkelagrede endringer. Lagre dem (y/N)? " @@ -1545,11 +1629,11 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "Kunne ikke identifisere databsetypen" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, fuzzy, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " @@ -1557,29 +1641,29 @@ msgid "" msgstr "" "Kunne ikke åpne databasen - den påkrevde modulen '%s' er ikke tilgjengelig" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, python-format msgid "Couldn't open database - the required module '%s' is not available" msgstr "" "Kunne ikke åpne databasen - den påkrevde modulen '%s' er ikke tilgjengelig" -#: ../roundup/backends/back_anydbm.py:873 -#: ../roundup/backends/back_anydbm.py:886 -#: ../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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "Databsen åpnet bare for lesing" @@ -1600,7 +1684,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1656,57 +1740,52 @@ msgstr "egenskap %s: %r er ikke et nummer" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "Ukjent tegnsett: %r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1731,15 +1810,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "Ugyldig forespørsel" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "Du har ikke tillatelse til å glemme %(class)s" @@ -1759,13 +1838,13 @@ msgstr "Du har ikke tillatelse til å glemme %(class)s" msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s har blitt glemt" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "Du har ikke tillatelse til å redigere spørringer." -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "Du har ikke tillatelse til å lagre spørringer" @@ -1774,48 +1853,54 @@ msgstr "Du har ikke tillatelse til å lagre spørringer" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "Ugyldig forespørsel" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "Ugylig login" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "Du har ikke tillatelse til å opprette %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format 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:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "Du har ikke tillatelse til å endre %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "Saker endret OK" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s endret ok" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s opprettet" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View deres endringer i et nytt " "vindu." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "Redigeringsfeil: %s" -#: ../roundup/cgi/actions.py:936 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "Feil: %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1840,12 +1932,12 @@ msgstr "" "(En Mozilla feil kan forårsake at denne meldingen kommer feilaktig, venligst " "sjekk eposten din)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "Passord endringsforespørse" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1854,29 +1946,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, 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:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "Ukjent brukernavn:" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "Ukjent postadresse:" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "Du må spesifisere et brukernavn eller en adresse" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "Bekreft passord" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1890,31 +1982,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "Epost sendt til %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "Du er registrert, velkommen!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1930,12 +2022,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1945,49 +2037,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "Du kan ikke oppgi roller ved registreringen." -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "Du er logget ut" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "Brukernavn nødvendig" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "Ugylig login" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "Du har ikke tillatelse til å logge inn" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, python-format msgid "You do not have permission to view %(class)s" msgstr "Du har ikke tillatelse til å se på %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "Passord endringsforespørse" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                                Templating Error

                                \n" @@ -1998,27 +2100,27 @@ msgstr "" "

                                %(exc_type)s: %(exc_value)s

                                \n" "

                                Feilsøkingsinformasjon følger

                                " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                              1. \"%(name)s\" (%(info)s)
                              2. " msgstr "
                              3. \"%(name)s\" (%(info)s)
                              4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                              5. Looking for \"%(name)s\", current path:
                                  %(path)s
                              6. " msgstr "
                              7. Søker etter \"%(name)s\", current path:
                                  %(path)s
                              8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                              9. In %s
                              10. " msgstr "
                              11. I %s
                              12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "Det oppsto et problem i din mal \"%s\"." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2037,17 +2139,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "Full traceback:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                                A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2057,22 +2159,22 @@ msgstr "" "av funksjonskall somledet til feilen, with siste kall først. " "Feilattributtene er:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "<filen er None - untagelig inne i eval or exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "i %s" -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "udefinert" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                                An error has occurred

                                \n" @@ -2081,165 +2183,161 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "Anonyme brukere får ikke benytte web-grensesnittet" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "Skjema feil:" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "Ukjent tegnsett: %r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "Anonyme brukere får ikke benytte web-grensesnittet" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "Ugylig login" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "Ugylig login" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, fuzzy, python-format msgid "Invalid HOST %s" msgstr "Ugyldig forespørsel" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "Du har ikke lov å se denne filen." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, 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: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 "" -"%(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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2300,69 +2398,69 @@ msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "Krevet %(class)s egenskap %(property)s ikke gitt." msgstr[1] "Krevet %(class)s egenskap %(property)s ikke gitt." -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "Du har ikke rettigheter til å %(action)s instanser av klasse %(class)s" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(liste)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "Legg til ny oppføring" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[skjult]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "Ny node - ingen historie" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "Lagre endringer" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "Valgt egenskap finnes ikke lenger" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "Den lenkede klassen %(classname)s finnes ikke lenger" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "Den lenkede noden finnes ikke lenger" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (ingen verdi)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!Denne hendelsen håndteres ikke av historievisningen!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "Noter:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "Historie" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "Dato" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "Bruker" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "Aksjon" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "Argumenter" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "Kopi av %(class)s %(id)s" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "Nei" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "Ja" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2418,27 +2516,32 @@ msgstr "" "standard verdi for DateHTMLProperty må være enten DateHTMLProperty eller en " "streng represantasjon av tidspunkt." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, 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:2508 +#: ../roundup/cgi/templating.py:2516 #, 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:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2459,24 +2562,28 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "Ugyldig forespørsel" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "Ugyldig forespørsel" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " @@ -2485,11 +2592,11 @@ msgstr "" "Ikke et tidspunkt: \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "Kunne ikke bestemme granularitet" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " @@ -2498,7 +2605,7 @@ msgstr "" "%r ikke et tidspunkt \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2506,162 +2613,162 @@ msgid "" msgstr "" "Ikke et tidsinterval: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date spec]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "Ikke et tidsintervall: [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s år" msgstr[1] "%(number)s år" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s måned" msgstr[1] "%(number)s måneder" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s uke" msgstr[1] "%(number)s uker" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s dag" msgstr[1] "%(number)s dager" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "i morgen" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "i går" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s time" msgstr[1] "%(number)s timer" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "per time" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 1/2 timer" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "%(number)s time" msgstr[1] "%(number)s timer" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "om et øyeblikk" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "akkurat nå" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1 minutt" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s minutt" msgstr[1] "%(number)s minutter" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "1/2 time" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s time" msgstr[1] "%(number)s timer" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s siden" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "i %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "egenskap %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, 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:184 +#: ../roundup/hyperdb.py:186 #, 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:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "egenskap %s: %r er ikke et nummer" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "egenskap %s: %r er ikke et nummer" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "\"%s\" ikke en node-benevnelse" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "Ikke et navn på egenskap: %s" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, 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:2060 +#: ../roundup/hyperdb.py:2063 #, 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:2095 +#: ../roundup/hyperdb.py:2098 #, fuzzy, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "%r er ikke en egenskap ved %s" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2670,23 +2777,22 @@ msgstr "" "ADVARSEL: katalog '%s'\n" "\tinneholder foreldet mal - ignorert" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "Melding signert med ukjent verdi: %s" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "Melding signert med utgått verdi: %s" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "Melding signert med tilbakekalt verdi: %s" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "Ugyldig PGP-signatur oppdaget." @@ -2949,8 +3055,7 @@ msgstr "" "Det var et problem med meldingen du sendte:\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2963,7 +3068,7 @@ msgstr "" "og få problemet løst. Referansen er til feil egenskaper:\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -2976,11 +3081,11 @@ msgstr "" "og få problemet løst. Referansen er til feil klasse: \n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "ikke på formen [arg=value,value,...;arg=value,value,...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2988,7 +3093,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2996,206 +3101,207 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "Ugylig login" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "Ugylig login" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "filer" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "meldinger" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "liste som informeres" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "etterfølger" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "tittel" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "tilordnet" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "nøkkelord" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "prioritet" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "status" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "aktivitet" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "aktør" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "opprettelse" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "opprettet av" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "Ny sak fra %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s la inn kommentaren:" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "Endret av %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, 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:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3222,7 +3328,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "Oppgi katalogsti for å lage demo-sporer [%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3231,45 +3337,45 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "Bruk: %(program)s " -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "Ingen sporer maler funnet i katalog %s" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "Feil: ikke tilstrekkelig kildespesifikasjon" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "Feil: %s ugyldig spesifikasjon" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " "\"imap\", \"imaps\", \"imaps_cram\", or \"imaps_oauth\"" msgstr "" -"Feil: Kilden må være enten \"mailbox\", \"pop\", \"pops\", \"apop\", \"imap" -"\" eller \"imaps\"" +"Feil: Kilden må være enten \"mailbox\", \"pop\", \"pops\", \"apop\", " +"\"imap\" eller \"imaps\"" #: ../roundup/scripts/roundup_server.py:113 msgid "WARNING: generating temporary SSL certificate" @@ -3297,7 +3403,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                                Roundup trackers index

                                  \n" @@ -3305,59 +3411,59 @@ msgstr "" "Roundup saksliste\n" "

                                  Roundup saksliste

                                    \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "ADVARSEL: ignorerer \"-g\" argument, ikke root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "Kan ikke skifte gruppe, ingen grp modul" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "Gruppe %(group)s finnes ikke" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "Kan ikke kjøre som root" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "ADVARSEL: ignorerer \"-u\" argument, ikke root" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "Kan ikke skifte bruker , ingen pwd modul" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "Bruker %(user)s finnes ikke" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, 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:899 +#: ../roundup/scripts/roundup_server.py:923 #, 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:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3374,7 +3480,7 @@ msgstr "" " Skriv \"roundup-server -c help\" for å vise Windows Services\n" " informasjon." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3390,7 +3496,7 @@ msgstr "" " serverens PID til filen indikert av PIDfile.\n" " -l optsjonen *må* brukes hvis -d brukes." -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3511,32 +3617,32 @@ msgstr "" "Hvordan bruke \"name=tracker home\":\n" " Disse argumentene setter sporerens hjemmekatalog. Navnet er måten " "sporeren identifiseres på i URL-en (det er den første delen av URL-en)\n" -" Sporerens hjemmekatalog er katalogen som ble gitt da \"roundup-admin init" -"\"\n" +" Sporerens hjemmekatalog er katalogen som ble gitt da \"roundup-admin " +"init\"\n" " ble kjørt. Du kan spesifisere så mange navn=hjem-par du ønsker på " "kommandolinjen.\n" " Pass på at de ikke inneholder url-utrygge tegn som mellomrom, for de kan " "forvirre IE.\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "Instanser må være navn=home" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "Konfigurasjon lagret til %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 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:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Roundup server startet på %(HOST)s:%(PORT)s" @@ -3690,13 +3796,13 @@ msgstr "<< forrige" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3707,13 +3813,13 @@ msgstr "${start}..${end} av ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3827,6 +3933,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "Liste over filer - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "Lagre endringer" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4038,53 +4181,53 @@ msgstr "Opprettet av" msgid "Assigned To" msgstr "Tildelt til" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "Last ned som CSV-fil" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "Sorter på:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- ingenting -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "Synkende:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "Grupper på:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "Vis igjen" @@ -4141,7 +4284,7 @@ msgid "Assigned To" msgstr "Tildelt til" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4177,11 +4320,13 @@ msgstr "Lag en kopi" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                    Note:  highlighted  fields are required.
                                    " +"
                                    Note:  highlighted  fields are required.
                                    " msgstr "" -"
                                    Obs:  uthevede  felt er krevet.
                                    " +"" #: ../share/roundup/templates/classic/html/issue.item.html:145 msgid "" @@ -4531,8 +4676,8 @@ msgid "Query name**:" msgstr "Navn på spørring**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4664,18 +4809,22 @@ msgstr "Mottagere" msgid "Content" msgstr "Innhold" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "Spørringer (rediger)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "Saker" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4687,7 +4836,7 @@ msgstr "Saker" msgid "Create New" msgstr "Lag ny" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4696,163 +4845,163 @@ msgstr "Lag ny" msgid "Show Unassigned" msgstr "Vis ikke tildelte" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "Vis alle" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "Vis sak:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "Rediger" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "Administrasjon" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "Klasseliste" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "Brukerliste" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "Legg til bruker" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "Login" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "Husker du meg?" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "Registrer" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "Mistet din login?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "Hallo, ${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "Dine saker" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "Dine detaljer" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "Logg ut" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "Hjelp" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup dok" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "klarer denne meldingen" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "valgfritt" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "ingen verdi" @@ -5521,8 +5670,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "Opprettet på ${creation} av ${creator}, sist endret ${activity} av ${actor}." @@ -5764,22 +5913,22 @@ msgstr "" msgid "User" msgstr "Legg til bruker" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "tildelt meg" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "Spørringer (rediger)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "Eksisterende nøkkelord" @@ -5945,27 +6094,27 @@ msgid "Please log in or register." msgstr "Venligst logg inn eller registrer deg." #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} av ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6010,6 +6159,15 @@ msgstr "Vis sak:" msgid "Password" msgstr "Login passord" +#, 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 "" +#~ "%(starttag)sCache treff: %(cache_hits)d, ikke-treff %(cache_misses)d. " +#~ "Laster saker: %(get_items)f secs. Filtrerer: %(filtering)f secs." +#~ "%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/roundup.pot b/locale/roundup.pot index bb29ad757..b65c73c30 100644 --- a/locale/roundup.pot +++ b/locale/roundup.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-07-11 20:04-0400\n" +"POT-Creation-Date: 2026-07-09 11:20-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,19 +27,19 @@ msgstr "" msgid "You may not retire the admin or anonymous user" msgstr "" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "" -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" "\n" msgstr "" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -131,17 +131,17 @@ msgid "" " roundup-admin help all -- all available help\n" msgstr "" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 msgid "Commands: " msgstr "" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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:281 +#: ../roundup/admin.py:310 msgid "" "\n" "All commands (except help) require a tracker specifier. This is just\n" @@ -207,21 +207,21 @@ msgid "" "Command help:\n" msgstr "" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "" -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "" -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -235,54 +235,54 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr "" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "" -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "" -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 msgid "" "Usage: display designator[,designator]*\n" " Show the property values for the given node(s).\n" @@ -295,13 +295,13 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 msgid "" "Usage: export [[-]class[,class]] export_dir\n" " Export the database and file content.\n" @@ -320,7 +320,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" " Export only the database to files, no file content.\n" @@ -340,7 +340,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 msgid "" "Usage: filter classname propname=value ...\n" " Find the nodes of the given class with a given property value.\n" @@ -353,19 +353,19 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, python-format msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s." msgstr "" -#: ../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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 ../roundup/admin.py:831:880 +#: :1575:1588 :2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -376,14 +376,15 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -391,20 +392,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 msgid "" "Usage: get property designator[,designator]*\n" " Get the given property of one or more designator(s).\n" @@ -417,23 +418,23 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, python-format msgid "property %s is not of type Multilink or Link so -d flag does not apply." msgstr "" -#: ../roundup/admin.py:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -445,12 +446,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 msgid "" "Usage: history designator [skipquiet] [raw]\n" " Show the history entries of a designator.\n" @@ -465,26 +466,26 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 msgid "removed" msgstr "" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "" @@ -492,29 +493,29 @@ msgstr "" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, python-format msgid "%(prop)s was %(value)s" msgstr "" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 msgid "" "Usage: import import_dir\n" " Import a database and file contents from the directory.\n" @@ -524,10 +525,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -538,7 +542,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -548,7 +552,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -559,30 +563,30 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr "" -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 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:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -608,12 +612,12 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -621,20 +625,20 @@ msgid "" "Erase it? Y/N: " msgstr "" -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 msgid "Select template" msgstr "" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 msgid "Select backend" msgstr "" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -643,11 +647,11 @@ msgid "" " %(config_file)s" msgstr "" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr "" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -663,7 +667,7 @@ msgid "" "---------------------------------------------------------------------------\n" msgstr "" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -679,17 +683,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -712,17 +716,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 msgid "" "Usage: pack period | date\n" " Remove journal entries older than the date/period.\n" @@ -731,10 +735,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -742,11 +746,11 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -764,25 +768,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -811,49 +815,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, python-format +msgid "Unknown readline parameter %s" +msgstr "" + +#: ../roundup/admin.py:1943 msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" " Re-generate a tracker's search indexes.\n" @@ -870,17 +943,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 msgid "" "Usage: restore designator[,designator]*\n" " Restore the retired node specified by designator.\n" @@ -892,7 +965,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 msgid "" "Usage: retire designator[,designator]*\n" " Retire the node specified by designator.\n" @@ -906,7 +979,7 @@ msgid "" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -918,7 +991,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -931,46 +1004,46 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, python-format msgid "No such Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, python-format msgid "Role \"%(name)s\":\n" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr "" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n" msgstr "" -#: ../roundup/admin.py:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -978,17 +1051,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr "" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, python-format msgid " %(description)s (%(name)s)\n" msgstr "" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 msgid "" "Usage: set items property=value [property=value ...]\n" " Set the given properties of one or more items(s).\n" @@ -1009,7 +1082,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1018,17 +1091,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, python-format msgid "%(key)s: %(value)s\n" msgstr "" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1039,38 +1112,38 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " msgstr "" -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1080,7 +1153,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1090,49 +1163,58 @@ msgid "" " " msgstr "" -#: ../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 +#: ../roundup/admin.py:2358 #, python-format -msgid "Error: %s" +msgid "" +"\n" +"Error: %s" msgstr "" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" "Type \"help\" for help." msgstr "" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." msgstr "" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +msgid "Command history and line editing not available" +msgstr "" + +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "" -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "" @@ -1142,38 +1224,38 @@ msgstr "" msgid "Class \"%s\" already defined." msgstr "" -#: ../roundup/backends/back_anydbm.py:278 ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/back_anydbm.py:278 ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445 :1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1194,7 +1276,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1250,57 +1332,52 @@ msgstr "" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, python-format msgid "Unrecognized scheme in %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" msgstr "" @@ -1324,15 +1401,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" msgstr "" #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266 -#: ../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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "" @@ -1352,13 +1429,13 @@ msgstr "" msgid "%(classname)s %(itemid)s has been restored" msgstr "" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "" -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "" @@ -1367,70 +1444,83 @@ msgstr "" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 msgid "Invalid number: " msgstr "" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 msgid "Invalid integer: " msgstr "" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr "" -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View their changes in a new window." msgstr "" -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "" -#: ../roundup/cgi/actions.py:936 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "" + +#: ../roundup/cgi/actions.py:953 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:977 +#: ../roundup/cgi/actions.py:994 #, python-format msgid "Password reset for %s" msgstr "" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1439,29 +1529,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, python-format msgid "Confirm reset of password for %s" msgstr "" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1475,31 +1565,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, python-format msgid "Email sent to %s." msgstr "" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1514,12 +1604,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1529,49 +1619,58 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, python-format msgid "You do not have permission to view %(class)s" msgstr "" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +msgid "Password incorrect." +msgstr "" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                                    Templating Error

                                    \n" @@ -1579,27 +1678,27 @@ msgid "" "

                                    Debugging information follows

                                    " msgstr "" -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                                  1. \"%(name)s\" (%(info)s)
                                  2. " msgstr "" -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                                  3. Looking for \"%(name)s\", current path:
                                      %(path)s
                                  4. " msgstr "" -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                                  5. In %s
                                  6. " msgstr "" -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "" -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1611,38 +1710,38 @@ msgid "" "
                                    Obs:  uthevede  felt er krevet.
                                    \n" msgstr "" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                                    A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) call " "first. The exception attributes are:" msgstr "" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "" -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                                    An error has occurred

                                    \n" @@ -1651,162 +1750,160 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 msgid "Client is not allowed to use Rest Interface." msgstr "" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, python-format msgid "Invalid Referer: %s" msgstr "" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, python-format msgid "Invalid Origin %s" msgstr "" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972 :1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -1864,140 +1961,145 @@ msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "" msgstr[1] "" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525 :2828 msgid "[hidden]" msgstr "" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, python-format msgid "" "This event %s is not handled by the history display!" msgstr "" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119 :2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127 :2162 msgid "No" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119 :2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127 :2156 msgid "Yes" msgstr "" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." msgstr "" -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2018,225 +2120,228 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 msgid "Valid languages: " msgstr "" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 msgid "Expected languages: " msgstr "" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec])" msgstr "" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "" msgstr[1] "" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, python-format msgid "property %(property)s: %(errormsg)s" msgstr "" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr "" -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" "\tcontains old-style template - ignored" msgstr "" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2423,8 +2528,7 @@ msgid "" " %(message)s\n" msgstr "" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2433,7 +2537,7 @@ msgid "" " %(errors)s\n" msgstr "" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, python-format msgid "" "\n" @@ -2442,11 +2546,11 @@ msgid "" " %(classname)s\n" msgstr "" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2454,7 +2558,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2462,205 +2566,206 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, python-format msgid "Invalid value for --style: %s" msgstr "" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, python-format msgid "Invalid attribute %s" msgstr "" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -2682,7 +2787,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -2691,36 +2796,36 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 msgid "" "\n" "Error: not enough source specification information" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 msgid "" "\n" "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", " @@ -2753,64 +2858,64 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                                    Roundup trackers index

                                      \n" msgstr "" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, python-format msgid "Error: %(type)s: %(value)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr "" -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr "" -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, python-format msgid "" "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s" msgstr "" -#: ../roundup/scripts/roundup_server.py:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -2820,7 +2925,7 @@ msgid "" " specifics." msgstr "" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 msgid "" " -u runs the Roundup web server as this UID\n" " -g runs the Roundup web server as this GID\n" @@ -2830,7 +2935,7 @@ msgid "" " -D run the server in the foreground even when -d is used." msgstr "" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, python-format msgid "" "\n" @@ -2902,24 +3007,24 @@ msgid "" " any url-unsafe characters like spaces, as these confuse IE.\n" msgstr "" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "" -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "" @@ -3067,13 +3172,13 @@ msgstr "" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3084,13 +3189,13 @@ msgstr "" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3175,9 +3280,9 @@ msgid "" "delicately. You may include commas and newlines by enclosing the values in " "double-quotes (\"). Double quotes themselves must be quoted by doubling " "(\"\").

                                      Multilink properties have their multiple " -"values colon (\":\") separated (... ,\"one:two:three\", ...)

                                      Remove entries by deleting their line. Add new entries by " -"appending them to the table - put an X in the id column. If you wish to " +"values colon (\":\") separated (... ,\"one:two:three\", ...)

                                      Remove entries by deleting their line. Add new entries " +"by appending them to the table - put an X in the id column. If you wish to " "restore a removed item and you know its id then just put that id in the id " "column.

                                      " msgstr "" @@ -3196,6 +3301,41 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +msgid "Authorize - ${tracker}" +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +msgid "Authorize Change" +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3407,53 +3547,53 @@ msgstr "" msgid "Assigned To" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "" @@ -3510,7 +3650,7 @@ msgid "Assigned To" msgstr "" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3546,8 +3686,9 @@ msgstr "" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                      Note:  highlighted  fields are required.
                                      " +" " +"
                                      Note:  highlighted  fields are required.
                                      " msgstr "" #: ../share/roundup/templates/classic/html/issue.item.html:145 @@ -3897,8 +4038,8 @@ msgid "Query name**:" msgstr "" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4024,18 +4165,22 @@ msgstr "" msgid "Content" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4047,7 +4192,7 @@ msgstr "" msgid "Create New" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4056,163 +4201,163 @@ msgstr "" msgid "Show Unassigned" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "" @@ -4707,9 +4852,9 @@ msgid "" "delicately. You may include commas and newlines by enclosing the values in " "double-quotes (\"). Double quotes themselves must be quoted by doubling " "(\"\").

                                      Multilink properties have their multiple " -"values colon (\":\") separated (... ,\"one:two:three\", ...)

                                      Remove entries by deleting their line. Add new entries by " -"appending them to the table - put an X in the id column.

                                      " +"values colon (\":\") separated (... ,\"one:two:three\", ...)

                                      Remove entries by deleting their line. Add new entries " +"by appending them to the table - put an X in the id column.

                                      " msgstr "" #: ../share/roundup/templates/devel/html/bug.index.html:3 @@ -4852,8 +4997,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/bug.item.html:310 #: ../share/roundup/templates/responsive/html/task.item.html:277 msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" #: ../share/roundup/templates/devel/html/bug.item.html:226 @@ -5068,20 +5213,20 @@ msgstr "" msgid "User" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 msgid "Bugs assigned to you" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 msgid "Edit Keywords" msgstr "" @@ -5231,26 +5376,26 @@ msgid "Please log in or register." msgstr "" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 msgid "${start}..${end} out of ${total}" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/locale/ru.po b/locale/ru.po index dd02c6d7e..e0471d066 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:21+0100\n" "Last-Translator: alexander smishlajev \n" "Language-Team: Russian\n" @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=koi8-r\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Poedit-Language: Russian\n" #: ../roundup/actions.py:49 @@ -29,19 +29,19 @@ msgstr " msgid "You may not retire the admin or anonymous user" msgstr " admin anonymous." -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr " \"%(classname)s\" " -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr " \"%(arg)s\" =" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -104,7 +104,7 @@ msgstr "" ": %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -156,12 +156,12 @@ msgstr "" " roundup-admin help -- \n" " roundup-admin help all -- \n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr ":" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" # . # # " "? -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -308,23 +308,23 @@ msgstr "" "\n" " :\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "" -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr ":" -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr ":" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -348,14 +348,14 @@ msgstr "" " , .\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -366,42 +366,42 @@ msgstr "" " .\n" " " -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr " " -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr " %(propname)s (): " -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr "%(propname)s ( ): " -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr " . ." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr " \"%(propname)s\" ." -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -421,13 +421,13 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s ( )" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -468,7 +468,7 @@ msgstr "" " exporttables.\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -510,7 +510,7 @@ msgstr "" " , export.\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -531,19 +531,19 @@ msgstr "" " , .\n" " " -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, fuzzy, python-format msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s." msgstr " %(classname)s \"%(propname)s\"" -#: ../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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr " %(classname)s \"%(propname)s\"" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -561,11 +561,12 @@ msgstr "" " , .\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 #, fuzzy msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" ": genconfig < >\n" @@ -573,7 +574,7 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -581,20 +582,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -615,24 +616,24 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, 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:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr " %(classname)s \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr " %(classname)s \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -652,12 +653,12 @@ msgstr "" " all -- \n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr ", \"%(topic)s\" ." -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -681,27 +682,27 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr " %(properties)s %(class)s %(id)s" @@ -709,29 +710,29 @@ msgstr " #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s ( )" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -742,10 +743,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -777,7 +781,7 @@ msgstr "" " ).\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -788,7 +792,7 @@ msgstr "" # password #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -806,23 +810,23 @@ msgstr "" " dbinit.init()\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr " : " -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " : " -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr " " -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr " " -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -832,7 +836,7 @@ msgstr "" " !\n" " ? Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" " Install a new Roundup tracker.\n" @@ -884,12 +888,12 @@ msgstr "" " . \"help initopts\".\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr " \"%(parent)s\" " -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -900,22 +904,22 @@ msgstr "" " !\n" " ? Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr " [classic]: " -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr " [anydbm]: " -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr " : \"%s\"" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, python-format msgid "" "\n" @@ -928,12 +932,12 @@ msgstr "" " :\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... , :" # -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, python-format msgid "" "\n" @@ -960,7 +964,7 @@ msgstr "" " \"roundup-admin initialise\".\n" "---------------------------------------------------------------------------\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -989,17 +993,17 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr " " -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -1022,17 +1026,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -1042,10 +1046,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -1071,11 +1075,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr " " -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1093,25 +1097,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1140,49 +1144,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr " " -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr " email" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1206,17 +1279,17 @@ msgstr "" " . .\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr " \"%(designator)s\" " -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr " \"%(designator)s\" " -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1235,7 +1308,7 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1258,7 +1331,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1279,7 +1352,7 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1292,49 +1365,49 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr " \"%(role)s\" " -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, fuzzy, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr " web \"%(role)s\"" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, fuzzy, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr " web \"%(role)s\"" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, fuzzy, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr " email \"%(role)s\"" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, fuzzy, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr " email \"%(role)s\"" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr " \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1342,17 +1415,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, fuzzy, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr " %(description)s (%(name)s \"%(klass)s\")" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s \"%(klass)s\")" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1387,7 +1460,7 @@ msgstr "" " . (, \"1,2,3\".)\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1401,17 +1474,18 @@ msgstr "" " .\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s ( )" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s ( )" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1422,22 +1496,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1471,17 +1545,17 @@ msgstr "" " \"Name\" .\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr " \"%(spec)s\" :" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1491,7 +1565,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 #, fuzzy msgid "" "Usage: updateconfig \n" @@ -1506,35 +1580,35 @@ msgstr "" " .\n" " " -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr ": %s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "" " \"%(command)s\" . (\"help commands\" )" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "\"%(command)s\" : %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr " : " -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr ": : %(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1543,15 +1617,25 @@ msgstr "" "Roundup %s .\n" " \"help\" ." -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr ": " -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr " ..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr ", . (y/N)? " @@ -1562,39 +1646,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1615,7 +1699,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1671,57 +1755,52 @@ msgstr " msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr " %r " -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1748,16 +1827,16 @@ msgstr "" "%(classname)s)" #: ../roundup/cgi/actions.py:228 ../roundup/cgi/actions.py:266 -#: ../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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr " " -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr " %(class)s" @@ -1777,13 +1856,13 @@ msgstr " msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s " -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr " " -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr " " @@ -1792,48 +1871,54 @@ msgstr " msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr " " -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr " ." -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr " %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr " %(line)s " -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr " %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr " " -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr " %(properties)s %(class)s %(id)s" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s " -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, fuzzy, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View " " ." -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr " : %s" -#: ../roundup/cgi/actions.py:936 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr ": %s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1858,12 +1950,12 @@ msgstr "" "(- Mozilla . " " , .)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr " " -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1872,29 +1964,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr " . %s ." -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr " " -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr " email" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr " email" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "( )" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1908,31 +2000,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr " %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr " . !" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1948,12 +2040,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1963,49 +2055,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr " " -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr " " -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr " " -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr " ." -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr " " -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr " %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr " " + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                                      Templating Error

                                      \n" @@ -2016,27 +2118,27 @@ msgstr "" "

                                      %(exc_type)s: %(exc_value)s

                                      \n" "

                                      :

                                      " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                                    1. \"%(name)s\" (%(info)s)
                                    2. " msgstr "" -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                                    3. Looking for \"%(name)s\", current path:
                                        %(path)s
                                    4. " msgstr "
                                    5. \"%(name)s\" :
                                        %(path)s
                                    6. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                                    7. In %s
                                    8. " msgstr "
                                    9. %s
                                    10. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr " \"%s\"." -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -2056,17 +2158,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr " :" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                                      A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -2077,23 +2179,23 @@ msgstr "" " , - - . " " :" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "" "< - eval " "exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr " %s" -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                                      An error has occurred

                                      \n" @@ -2107,166 +2209,161 @@ msgstr "" " .

                                      \n" "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr " -." -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr " : " -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr " %r " -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr " -." -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr " ." -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr " ." -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr " ." -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "%(starttag)s : %(seconds)fs%(endtag)s\n" -#: ../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 "" -"%(starttag)s : %(cache_hits)d, : " -"%(cache_misses)d. : %(get_items)f . : " -"%(filtering)f .%(endtag)s\n" - -#: ../roundup/cgi/client.py:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2330,118 +2427,118 @@ msgstr[0] " msgstr[1] " %(property)s %(class)s " msgstr[2] " %(property)s %(class)s " -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr " %(action)s %(class)s" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "()" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 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: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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr " - " -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr " ." -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr " %(classname)s " -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # :823 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr " " -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: ( )" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!" msgstr " !" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr ":" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, python-format msgid "Copy of %(class)s %(id)s" msgstr ": %(class)s %(id)s" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." @@ -2449,27 +2546,32 @@ msgstr "" " DateHTMLProperty " "DateHTMLProperty ." -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr " \"%(attr)s\" " -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, fuzzy, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr " \"%(attr)s\" " -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2490,46 +2592,50 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr " " -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr " " -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, fuzzy, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -" \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS" -"\" \"yyyy-mm-dd.HH:MM:SS.SSS\"" +" \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:" +"SS\" \"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -" /: %r. \"yyyy-mm-dd" -"\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" \"yyyy-mm-dd.HH:MM:SS.SSS\"" +" /: %r. \"yyyy-mm-" +"dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" \"yyyy-mm-dd.HH:MM:SS.SSS\"" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " @@ -2537,12 +2643,12 @@ msgid "" msgstr "" " [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] []" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr " [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" @@ -2550,7 +2656,7 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" @@ -2558,7 +2664,7 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" @@ -2566,7 +2672,7 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" @@ -2574,15 +2680,15 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" @@ -2590,16 +2696,16 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr " " # third form ain't used -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, fuzzy, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" @@ -2607,21 +2713,21 @@ msgstr[0] " msgstr[1] " %(number)s " msgstr[2] " %(number)s " -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr " " # " " " " -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "" # " 2 " "2 " -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" @@ -2629,11 +2735,11 @@ msgstr[0] "%(number)s msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, fuzzy, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" @@ -2641,69 +2747,69 @@ msgstr[0] " msgstr[1] "%(number)s " msgstr[2] "%(number)s " -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s " -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr " %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr ": %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr " \"%(propname)s\": \"%(value)s\" " -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr " \"%(propname)s\": \"%(value)s\" " -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr " \"%(propname)s\": \"%(value)s\" " -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" @@ -2712,23 +2818,22 @@ msgstr "" "! '%s'\n" "\t - " -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2981,8 +3086,7 @@ msgstr "" " :\n" " %(message)s\n" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2996,7 +3100,7 @@ msgstr "" " :\n" " %(errors)s\n" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, fuzzy, python-format msgid "" "\n" @@ -3010,13 +3114,13 @@ msgstr "" " :\n" " %(current_class)s\n" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" " [=,,...;=," ",...]" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -3024,7 +3128,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -3032,206 +3136,207 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr " ." -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr " ." -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr " " -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr " " -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr " %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "%(authname)s%(authaddr)s :" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr " %(authname)s%(authaddr)s:" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" " '%(filename)s' - %(link)s." -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3258,7 +3363,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr " [%s]: " -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3267,37 +3372,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr ": %(program)s < >" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr " %s " -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr ": " -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr ": pop-" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3333,7 +3438,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                                      Roundup trackers index

                                        \n" @@ -3341,62 +3446,62 @@ msgstr "" " Roundup\n" "

                                        Roundup

                                          \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s ( )" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "" ": \"-g\" , " " root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr " - grp" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr " %(group)s " -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr " root !" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "" ": \"-u\" , " " root" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr " - pwd" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr " %(user)s " -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr " \"%s\" , " -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr " %s, ." -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 msgid "" " -c Windows Service options.\n" " If you want to run the server as a Windows Service, you\n" @@ -3413,7 +3518,7 @@ msgstr "" " . 'roundup-server -c help'\n" " Windows." -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3429,7 +3534,7 @@ msgstr "" " . \"-d\",\n" " ** \"-l\"" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3558,25 +3663,25 @@ msgstr "" " URL (, .),\n" " IE.\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr " =" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr " %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "" ", " -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr " Roundup %(HOST)s:%(PORT)s" @@ -3730,13 +3835,13 @@ msgstr "<< #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3747,13 +3852,13 @@ msgstr "${start}..${end} #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3870,6 +3975,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr " - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -4081,53 +4223,53 @@ msgstr " msgid "Assigned To" msgstr "" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr " CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr ":" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr " :" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr ":" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "" @@ -4184,7 +4326,7 @@ msgid "Assigned To" msgstr "" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -4220,11 +4362,13 @@ msgstr " #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                          Note:  highlighted  fields are required.
                                          " +"
                                          Note:  highlighted  fields are required.
                                          " msgstr "" -"
                                            .
                                          " +" " +"
                                            .
                                          " #: ../share/roundup/templates/classic/html/issue.item.html:145 #, fuzzy @@ -4576,8 +4720,8 @@ msgid "Query name**:" msgstr " **:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4711,18 +4855,22 @@ msgstr " msgid "Content" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr " ()" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4734,7 +4882,7 @@ msgstr " msgid "Create New" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4743,163 +4891,163 @@ msgstr " msgid "Show Unassigned" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr " " -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr ":" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr " " -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr " " -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr " " -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr " ?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr ", ${user}!" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr " " -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr " Roundup" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr " " -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr " " @@ -5570,8 +5718,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" " ${creation} ${creator}, " " ${activity}, ${actor}." @@ -5816,22 +5964,22 @@ msgstr "" msgid "User" msgstr " " -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr " " -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr " ()" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr " " @@ -5999,27 +6147,27 @@ msgid "Please log in or register." msgstr ", " #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" @@ -6064,6 +6212,15 @@ msgstr " msgid "Password" msgstr "" +#, 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 "" +#~ "%(starttag)s : %(cache_hits)d, : " +#~ "%(cache_misses)d. : %(get_items)f . : " +#~ "%(filtering)f .%(endtag)s\n" + #, fuzzy #~ msgid "" #~ "Usage: security [Role name]\n" diff --git a/locale/zh_CN.po b/locale/zh_CN.po index 489381930..cc2be3334 100644 --- a/locale/zh_CN.po +++ b/locale/zh_CN.po @@ -6,9 +6,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:22+0100\n" "Last-Translator: Cheer Xiao \n" "Language-Team: Chinese Simplified \n" @@ -30,19 +30,19 @@ msgstr "你 %(action)s %(classname)s 类型的权限。" msgid "You may not retire the admin or anonymous user" msgstr "你不能撤除管理员或匿名用户" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:84 :943 :992 :1014 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "无此类别 \"%(classname)s\"" # ../roundup/admin.py:94 :98 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "参数 \"%(arg)s\" 不是 propname=value 的形式" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -107,7 +107,7 @@ msgstr "" "问题: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -157,12 +157,12 @@ msgstr "" " roundup-admin help -- 命令详解帮助\n" " roundup-admin help all -- 所有可用的帮助\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "命令:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "命令可以被缩写,只要缩写只有一个命令可以匹配上,\n" "如:l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -295,25 +295,25 @@ msgstr "" "\n" "使用帮助:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "%s:" # ../roundup/admin.py:337 :387 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "模板:" # ../roundup/admin.py:340 :398 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "后端:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -334,14 +334,14 @@ msgstr "" " 在命令行中的 One-off 命令如果成功会被自动提交。\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -354,42 +354,42 @@ msgstr "" # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982 # :1004 :1031 :1093 :1159 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "未提供足够的参数" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (密码):" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (再次):" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "抱歉,再试一次..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "你必须提供 \"%(propname)s\" 属性。" -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -408,13 +408,13 @@ msgstr "" " 将显示给出结点的属性和相应的值。\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -442,7 +442,7 @@ msgstr "" " 放在指定的目标目录中。\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -471,7 +471,7 @@ msgstr "" " 放在指定的目标目录中。\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -493,20 +493,20 @@ msgstr "" " " # ../roundup/admin.py:663 :816 :828 :882 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s 没有 \"%(propname)s\" 属性" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -524,14 +524,15 @@ msgstr "" " 或者是结点的键值。\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -539,20 +540,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -572,24 +573,24 @@ msgstr "" " " # ../roundup/admin.py:527 :542 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, 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:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "没有这样的 %(classname)s 属性 \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -609,12 +610,12 @@ msgstr "" " all -- 所有可用的帮助\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "抱歉,没有“%(topic)s”的帮助信息" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -636,27 +637,27 @@ msgstr "" " 它的键值可以被重用。\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "删除" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s 编辑成功" @@ -664,29 +665,29 @@ msgstr "%(class)s %(id)s %(properties)s 编辑成功" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -697,10 +698,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -728,7 +732,7 @@ msgstr "" " 旧数据。)\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -738,7 +742,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -756,23 +760,23 @@ msgstr "" " 执行tracker的初始化函数 dbinit.init()\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "管理员密码:" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " 确认:" -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "实例目录不存在" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "实例还没有安装" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -782,7 +786,7 @@ msgstr "" "如果你重新初始化它,所有的数据将会丢失!\n" "删除它吗?Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 #, fuzzy msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" @@ -822,12 +826,12 @@ msgstr "" " 请查看初始化参数帮助。\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "实例目录的父目录 \"%(parent)s\" 不存在" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -838,22 +842,22 @@ msgstr "" "如果你重新安装,所有的数据将会丢失!\n" "删除它吗?Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "选择模板 [classic]:" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "选择后端 [anydbm]:" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, python-format msgid "Error in configuration settings: \"%s\"" msgstr "配置设定有错: “%s”" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, fuzzy, python-format msgid "" "\n" @@ -865,11 +869,11 @@ msgstr "" " 现在你应该修改tracker的配置文件:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... 至少,你必须设置以下选项:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, fuzzy, python-format msgid "" "\n" @@ -893,7 +897,7 @@ msgstr "" " %(database_init_file)s\n" " ... 查看关于客户化的文档来了解更多的信息。\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -919,17 +923,17 @@ msgstr "" " 定了属性,对每个类型实例会打印出这个属性。\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "提供了太多的参数了" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "%(nodeid)4s: %(value)s" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -952,17 +956,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, fuzzy, python-format msgid "No migration action required. At schema version %s." msgstr "不必执行迁移" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -972,10 +976,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -999,11 +1003,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "无效的格式" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1021,25 +1025,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1068,49 +1072,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "未知用户名" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "未知邮件地址" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1133,17 +1206,17 @@ msgstr "" " 重新生成 tracker 的搜索索引,它将自动进行。\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "没有这样的条目 \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "没有这样的条目 \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1161,7 +1234,7 @@ msgstr "" " 给定的结点将对用户来说再次生效。\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1182,7 +1255,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1201,7 +1274,7 @@ msgstr "" " 产生变化。\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1214,47 +1287,47 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "没有这样的角色 \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, fuzzy, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "新Web用户得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, fuzzy, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "新Web用户得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, fuzzy, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "新邮件用户得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, fuzzy, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "新邮件用户得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "角色 \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1262,17 +1335,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, fuzzy, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s)" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1305,7 +1378,7 @@ msgstr "" " 你需要为多链接提供用逗号分隔的数字(例如 \"1,2,3\")。\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1319,17 +1392,18 @@ msgstr "" " 会列出给定类型的属性。\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (关键属性)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1340,22 +1414,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1387,17 +1461,17 @@ msgstr "" " 将生成4个字符宽的 \"Name\" 列。\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" 不是 名字:宽度" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1407,7 +1481,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1418,34 +1492,34 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:549 :559 :730 :749 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "错误:%s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "多命令匹配 \"%(command)s\": %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "输入tracker起始目录:" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "错误:不能打开tracker:%(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1454,15 +1528,25 @@ msgstr "" "Roundup %s 输入就绪。\n" "敲入 \"help\" 获得帮助。" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "注意:命令历史和编辑无效" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "退出..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "存在未被保存的改动。提交吗(y/N)?" @@ -1473,39 +1557,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1526,7 +1610,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1582,57 +1666,52 @@ msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "无法识别的字符集:%r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1657,15 +1736,15 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 msgid "Invalid request" msgstr "无效请求" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, python-format msgid "You do not have permission to retire %(class)s" msgstr "你没有撤除 %(class)s 的权限" @@ -1685,13 +1764,13 @@ msgstr "你没有撤除 %(class)s 的权限" msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s 已经被撤除了" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 msgid "You do not have permission to edit queries" msgstr "你没有编辑查询的权限" -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 msgid "You do not have permission to store queries" msgstr "你没有保存查询的权限" @@ -1700,60 +1779,74 @@ msgstr "你没有保存查询的权限" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "无效请求" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "无效登录" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "你没有权限来创建 %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr "在 %(line)s 行没有足够的值" -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "你没有权限来编辑 %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "项目编辑成功" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s 编辑成功" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s 被创建" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View their changes in a new window." msgstr "" -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "编辑错误:%s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:549 :559 :730 :749 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "错误:%s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1762,12 +1855,12 @@ msgstr "" "Invalid One Time Key!\n" "(一个 Mozilla 的错误可能会错误地引发这个消息,你检查你的邮件)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "密码重设请求" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1776,29 +1869,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "密码被重设,邮件被发给 %s" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "未知用户名" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "未知邮件地址" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "你需要指定用户名或地址" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "确认密码" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1812,31 +1905,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "邮件发给 %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "你已经注册,欢迎!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1852,12 +1945,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1867,49 +1960,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "不允许在注册时指供角色。" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "你已经登出" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "需要用户名" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "无效登录" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "你没有登录的权限" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, python-format msgid "You do not have permission to view %(class)s" msgstr "你没有查看 %(class)s 的权限" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "密码重设请求" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                                          Templating Error

                                          \n" @@ -1920,27 +2023,27 @@ msgstr "" "

                                          %(exc_type)s: %(exc_value)s

                                          \n" "

                                          调试信息为

                                          " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                                        1. \"%(name)s\" (%(info)s)
                                        2. " msgstr "
                                        3. \"%(name)s\" (%(info)s)
                                        4. " -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                                        5. Looking for \"%(name)s\", current path:
                                            %(path)s
                                        6. " msgstr "
                                        7. 查找 \"%(name)s\", 当前路径:
                                            %(path)s
                                        8. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                                        9. In %s
                                        10. " msgstr "
                                        11. 在 %s
                                        12. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "在你的模板“%s”中发生了一个问题。" -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1959,17 +2062,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "完整跟踪信息:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "%(exc_type)s: %(exc_value)s" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                                          A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -1978,22 +2081,22 @@ msgstr "" "

                                          在运行 Python 脚本时发生了一个错误。这是导致出错的一系列的函数调用,最近的" "(最里层的)调用在前。异常属性是:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "<文件为 None - 可能在 eval 或者 exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "在 %s" # ../roundup/cgi/cgitb.py:172 :178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "未定义" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                                          An error has occurred

                                          \n" @@ -2002,163 +2105,161 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "匿名用户不允许使用 web 界面" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "表格错误:" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "无法识别的字符集:%r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "匿名用户不允许使用 web 界面" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "无效登录" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "无效登录" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, fuzzy, python-format msgid "Invalid HOST %s" msgstr "无效请求" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 msgid "You are not allowed to view this file." msgstr "你没有查看此文件的权限" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2217,142 +2318,147 @@ msgid "Required %(class)s property %(property)s not supplied" msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "要求的 %(class)s 属性 %(property)s 没有被提供" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "你不允许 %(action)s 类 %(class)s 的项目" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(列表)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "提交" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "[隐藏]" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "新记录 - 无历史" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "提交变动" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "指示的属性不再存在" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "链接的类 %(classname)s 不再存在" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:872 :893 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "链接的结点不再存在" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (无值)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!" msgstr "这个事件不能被历史显示所处理!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "注意:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "历史" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "日期" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "用户" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "动作" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "参数" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, fuzzy, python-format msgid "Copy of %(class)s %(id)s" msgstr "%(class)s %(id)s 被创建" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "否" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "是" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." msgstr "DateHTMLProperty 的缺省值或者是 DateHTMLProperty 或字符串的日期表示。" -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2373,219 +2479,222 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "无效请求" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "无效请求" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec])" msgstr "不是时间间隔:[+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [日期规范]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "不是时间间隔:[+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s 年" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s 月" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s 周" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s 天" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "明天" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "昨天" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s 小时" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "1 小时" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1 个半小时" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4 小时" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "一会儿" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "刚才" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1分钟" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s 分钟" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "半小时" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4 小时" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s之前" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "在 %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "属性 %s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, python-format msgid "Not a property name: %s" msgstr "不是属性名: %s" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中" -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" "\tcontains old-style template - ignored" msgstr "" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2773,8 +2882,7 @@ msgid "" " %(message)s\n" msgstr "" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2783,7 +2891,7 @@ msgid "" " %(errors)s\n" msgstr "" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, python-format msgid "" "\n" @@ -2792,11 +2900,11 @@ msgid "" " %(classname)s\n" msgstr "" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2804,7 +2912,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2812,205 +2920,206 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "无效登录" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "无效登录" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "文件" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "消息" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "抄送" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "后续" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "标题" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "分配给" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "keyword" msgstr "关键字" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "优先级" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "状态" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "最近修改" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "最近修改者" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "创建" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "创建者" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3032,7 +3141,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "输入目录来创建演示tracker [%s]:" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3041,37 +3150,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "错误:没有足够的源协议信息" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "错误:pop协议无效" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3106,7 +3215,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                                          Roundup trackers index

                                            \n" @@ -3114,58 +3223,58 @@ msgstr "" "Roundup tracker 索引\n" "

                                            Roundup tracker 索引

                                              \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "警告:忽略 \"-g\" 参数,不是 root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "不能修改组 - 无 grp 模块" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "组 %(group)s 不存在" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "不能以 root 运行!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "警告:忽略 \"-u\" 参数,不是 root" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "不能修改用户 - 无 pwd 模块" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "用户 %(user)s 不存在" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr "" -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr "无法绑定到端口 %s, 端口已经被占用。" -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 #, fuzzy msgid "" " -c Windows Service options.\n" @@ -3182,7 +3291,7 @@ msgstr "" " 变量上配置一个tracker。这个选项与其经选项是互斥的。打入\n" " \"roundup-server -c help\" 来了解Windows服务的规范。" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3198,7 +3307,7 @@ msgstr "" "去。\n" " 如果使用了 -d 选项,则 -l 选项 *必须* 要指定。" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3300,24 +3409,24 @@ msgstr "" " 意数量的 name=home 对。要确保 name 部分不能包括任何非url安全的\n" " 字符,象空格,因为它们会把IE搞乱。\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "实例必须是 实例名=实例路径" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "配置保存到 %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "抱歉,在这个操作系统上不能以守护进程的方式来运行服务" -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Roundup server 启动于 %(HOST)s:%(PORT)s" @@ -3468,13 +3577,13 @@ msgstr "<< 向上" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3485,13 +3594,13 @@ msgstr "${start}..${end} (共 ${total} 项)" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3603,6 +3712,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "文件列表 - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "提交变动" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3814,53 +3960,53 @@ msgstr "创建人" msgid "Assigned To" msgstr "分配给" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "下载 CSV" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "排序:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- 无 -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "降序:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "分组:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "刷新" @@ -3917,7 +4063,7 @@ msgid "Assigned To" msgstr "分配给" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3953,8 +4099,9 @@ msgstr "制作副本" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                              Note:  highlighted  fields are required.
                                              " +"
                                              Note:  highlighted  fields are required.
                                              " msgstr "" "
                                              注意:  高亮" " 字段是必须的。
                                              " @@ -4307,8 +4454,8 @@ msgid "Query name**:" msgstr "查询名字**:" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4436,18 +4583,22 @@ msgstr "收信人" msgid "Content" msgstr "内容" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "我的查询 (编辑)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "issue" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4459,7 +4610,7 @@ msgstr "issue" msgid "Create New" msgstr "新建" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4468,163 +4619,163 @@ msgstr "新建" msgid "Show Unassigned" msgstr "未分配未解决的" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "所有未解决的" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "跳转:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "编辑已有" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "管理" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "类列表" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "用户列表" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "增加用户" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "登录" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "记住我" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "注册" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "忘记密码了?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "你好,${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "我的 issue" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "我的信息" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "登出" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "帮助" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup 文档" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "清除此消息" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "不用关心" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "------------" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "无值" @@ -5284,8 +5435,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "${creator} 于 ${creation} 创建。最近一次由 ${actor} 于 ${activity} 修改。" @@ -5527,22 +5678,22 @@ msgstr "" msgid "User" msgstr "增加用户" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "分配给我" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "我的查询 (编辑)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "已有的关键字" @@ -5708,27 +5859,27 @@ msgid "Please log in or register." msgstr "请登录或注册。" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} (共 ${total} 项)" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/locale/zh_TW.po b/locale/zh_TW.po index bb3943463..c8b207789 100644 --- a/locale/zh_TW.po +++ b/locale/zh_TW.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Roundup 2.5.0\n" +"Project-Id-Version: Roundup 2.6.0\n" "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2025-06-11 16:02-0400\n" +"POT-Creation-Date: 2026-06-03 12:45-0400\n" "PO-Revision-Date: 2013-10-31 12:23+0100\n" "Last-Translator: Fred Lin \n" "Language-Team: Chinese Traditional \n" @@ -29,19 +29,19 @@ msgstr "你沒有權限來 %(action)s %(classname)s 類型。" msgid "You may not retire the admin or anonymous user" msgstr "你不能刪除管理員或匿名用戶" -#: ../roundup/admin.py:132 +#: ../roundup/admin.py:149 msgid "" "Have 'display designator[,designator*]' show header inside\n" " []'s before items. Includes retired/active status.\n" msgstr "" -#: ../roundup/admin.py:136 +#: ../roundup/admin.py:153 msgid "" "Have 'display designator' and 'specification class' show\n" " protected fields: creator, id etc.\n" msgstr "" -#: ../roundup/admin.py:140 +#: ../roundup/admin.py:157 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 @@ msgid "" " history.\n" msgstr "" -#: ../roundup/admin.py:149 +#: ../roundup/admin.py:166 msgid "" "Set the number of lines of history to keep for this session.\n" " -1 is infinite.\n" msgstr "" -#: ../roundup/admin.py:153 +#: ../roundup/admin.py:170 msgid "Set indexer to use when running 'reindex' NYI\n" msgstr "" -#: ../roundup/admin.py:156 +#: ../roundup/admin.py:173 msgid "Force reopening of tracker when running each command.\n" msgstr "" -#: ../roundup/admin.py:159 +#: ../roundup/admin.py:176 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:161 +#: ../roundup/admin.py:178 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n" msgstr "" -#: ../roundup/admin.py:163 +#: ../roundup/admin.py:180 msgid "internal mapping for show_retired.\n" msgstr "" -#: ../roundup/admin.py:164 +#: ../roundup/admin.py:181 msgid "Enable verbose output: tracing, descriptions...\n" msgstr "" # ../roundup/admin.py:84 :943 :992 :1014 -#: ../roundup/admin.py:176 ../roundup/admin.py:1199 ../roundup/admin.py:1869 -#: ../roundup/admin.py:1901 ../roundup/admin.py:176:1199 :1869:1901 +#: ../roundup/admin.py:193 ../roundup/admin.py:1229 ../roundup/admin.py:2006 +#: ../roundup/admin.py:2038 ../roundup/admin.py:193:1229 :2006:2038 #, python-format msgid "no such class \"%(classname)s\"" msgstr "無此類別 \"%(classname)s\"" # ../roundup/admin.py:94 :98 -#: ../roundup/admin.py:189 +#: ../roundup/admin.py:206 #, python-format msgid "argument \"%(arg)s\" not propname=value" msgstr "參數 \"%(arg)s\" 不是 propname=value 的形式" -#: ../roundup/admin.py:202 +#: ../roundup/admin.py:219 #, python-format msgid "" "Problem: %(message)s\n" @@ -106,7 +106,7 @@ msgstr "" "問題: %(message)s\n" "\n" -#: ../roundup/admin.py:203 +#: ../roundup/admin.py:220 #, fuzzy, python-format msgid "" "%(message)sUsage: roundup-admin [options] [ ]\n" @@ -156,12 +156,12 @@ msgstr "" " roundup-admin help -- 命令詳解說明\n" " roundup-admin help all -- 所有可用的說明\n" -#: ../roundup/admin.py:232 +#: ../roundup/admin.py:249 #, fuzzy msgid "Commands: " msgstr "命令:" -#: ../roundup/admin.py:249 +#: ../roundup/admin.py:266 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 @@ msgstr "" "命令可以被縮寫,只要縮寫只有一個命令可以匹配上,\n" "如:l == li == lis == list." -#: ../roundup/admin.py:281 +#: ../roundup/admin.py:310 #, fuzzy msgid "" "\n" @@ -293,25 +293,25 @@ msgstr "" "\n" "使用說明:\n" -#: ../roundup/admin.py:345 +#: ../roundup/admin.py:374 #, python-format msgid "%s:" msgstr "" # ../roundup/admin.py:337 :387 -#: ../roundup/admin.py:450 ../roundup/admin.py:1426 -#: ../roundup/admin.py:450:1426 +#: ../roundup/admin.py:479 ../roundup/admin.py:1462 +#: ../roundup/admin.py:479:1462 msgid "Templates:" msgstr "模板:" # ../roundup/admin.py:340 :398 -#: ../roundup/admin.py:453 ../roundup/admin.py:1436 -#: ../roundup/admin.py:453:1436 +#: ../roundup/admin.py:482 ../roundup/admin.py:1472 +#: ../roundup/admin.py:482:1472 msgid "Back ends:" msgstr "後端:" #. noqa: ARG002 -#: ../roundup/admin.py:470 +#: ../roundup/admin.py:499 msgid "" "Usage: commit\n" " Commit changes made to the database during an interactive session.\n" @@ -332,14 +332,14 @@ msgstr "" " 在命令行中的 One-off 命令如果成功會被自動提交。\n" " " -#: ../roundup/admin.py:485 +#: ../roundup/admin.py:514 msgid "" "Usage: create classname property=value ...\n" " Create a new entry of a given class.\n" "\n" " This creates a new entry of the given class using the property\n" -" name=value arguments provided on the command line after the \"create" -"\"\n" +" name=value arguments provided on the command line after the " +"\"create\"\n" " command.\n" " " msgstr "" @@ -352,42 +352,42 @@ msgstr "" # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982 # :1004 :1031 :1093 :1159 -#: ../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 +#: ../roundup/admin.py:522 ../roundup/admin.py:595 ../roundup/admin.py:646 +#: ../roundup/admin.py:773 ../roundup/admin.py:846 ../roundup/admin.py:892 +#: ../roundup/admin.py:943 ../roundup/admin.py:1040 ../roundup/admin.py:1260 +#: ../roundup/admin.py:1435 ../roundup/admin.py:1555 ../roundup/admin.py:1638 +#: ../roundup/admin.py:1764 ../roundup/admin.py:1996 ../roundup/admin.py:2028 +#: ../roundup/admin.py:2144 ../roundup/admin.py:2198 ../roundup/admin.py:2246 +#: ../roundup/admin.py:522:595 :1260:1435 :1555:1638 :1764:1996 :2028:2144 +#: :2198:2246 :646:773 :846:892 :943:1040 msgid "Not enough arguments supplied" msgstr "未提供足夠的參數" -#: ../roundup/admin.py:513 +#: ../roundup/admin.py:542 #, python-format msgid "%(propname)s (Password): " msgstr "%(propname)s (口令):" -#: ../roundup/admin.py:516 +#: ../roundup/admin.py:545 #, python-format msgid " %(propname)s (Again): " msgstr " %(propname)s (再次):" -#: ../roundup/admin.py:520 +#: ../roundup/admin.py:549 msgid "Sorry, try again..." msgstr "抱歉,再試一次..." -#: ../roundup/admin.py:525 +#: ../roundup/admin.py:554 #, python-format msgid "%(propname)s (%(proptype)s): " msgstr "" -#: ../roundup/admin.py:544 +#: ../roundup/admin.py:573 #, python-format msgid "you must provide the \"%(propname)s\" property." msgstr "你必須提供 \"%(propname)s\" 屬性。" -#: ../roundup/admin.py:556 +#: ../roundup/admin.py:585 #, fuzzy msgid "" "Usage: display designator[,designator]*\n" @@ -406,13 +406,13 @@ msgstr "" " 將顯示給出結點的屬性和相應的值。\n" " " -#: ../roundup/admin.py:597 +#: ../roundup/admin.py:626 #, fuzzy, python-format msgid "%(protected)s%(key)s: %(value)s" msgstr "%(key)s: %(value)s (關鍵屬性)" #. grab the directory to export to -#: ../roundup/admin.py:600 +#: ../roundup/admin.py:629 #, fuzzy msgid "" "Usage: export [[-]class[,class]] export_dir\n" @@ -440,7 +440,7 @@ msgstr "" " 放在指定的目標目錄中。\n" " " -#: ../roundup/admin.py:715 +#: ../roundup/admin.py:744 #, fuzzy msgid "" "Usage: exporttables [[-]class[,class]] export_dir\n" @@ -469,7 +469,7 @@ msgstr "" " 放在指定的目標目錄中。\n" " " -#: ../roundup/admin.py:734 +#: ../roundup/admin.py:763 #, fuzzy msgid "" "Usage: filter classname propname=value ...\n" @@ -491,20 +491,20 @@ msgstr "" " " # ../roundup/admin.py:663 :816 :828 :882 -#: ../roundup/admin.py:775 +#: ../roundup/admin.py:804 #, 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: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 +#: ../roundup/admin.py:831 ../roundup/admin.py:880 ../roundup/admin.py:1575 +#: ../roundup/admin.py:1588 ../roundup/admin.py:2268 +#: ../roundup/admin.py:831:880 :1575:1588:2268 #, python-format msgid "%(classname)s has no property \"%(propname)s\"" msgstr "%(classname)s 沒有 \"%(propname)s\" 屬性" -#: ../roundup/admin.py:809 +#: ../roundup/admin.py:838 msgid "" "Usage: find classname propname=value ...\n" " Find the nodes of the given class with a given link property value.\n" @@ -522,14 +522,15 @@ msgstr "" " 或者是結點的鍵值。\n" " " -#: ../roundup/admin.py:858 +#: ../roundup/admin.py:887 msgid "" "Usage: genconfig filename\n" " Create a new tracker config file with default values in filename.\n" +" See also updateconfig.\n" " " msgstr "" -#: ../roundup/admin.py:875 +#: ../roundup/admin.py:905 #, python-format msgid "" "Changing option\n" @@ -537,20 +538,20 @@ msgid "" "from old default of %(old_number)s to new default of %(new_number)s." msgstr "" -#: ../roundup/admin.py:886 +#: ../roundup/admin.py:916 #, python-format msgid "" "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n" " than %s.\n" msgstr "" -#: ../roundup/admin.py:893 +#: ../roundup/admin.py:923 msgid "" "Check the rdbms mysql_* settings. Your charset and collations may need\n" " to be changed. See upgrading instructions.\n" msgstr "" -#: ../roundup/admin.py:903 +#: ../roundup/admin.py:933 #, fuzzy msgid "" "Usage: get property designator[,designator]*\n" @@ -570,24 +571,24 @@ msgstr "" " " # ../roundup/admin.py:527 :542 -#: ../roundup/admin.py:936 +#: ../roundup/admin.py:966 #, 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:953 ../roundup/admin.py:1201 ../roundup/admin.py:1875 -#: ../roundup/admin.py:1903 ../roundup/admin.py:953:1201 :1875:1903 +#: ../roundup/admin.py:983 ../roundup/admin.py:1231 ../roundup/admin.py:2012 +#: ../roundup/admin.py:2040 ../roundup/admin.py:983:1231 :2012:2040 #, python-format msgid "no such %(classname)s node \"%(nodeid)s\"" msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\"" -#: ../roundup/admin.py:956 +#: ../roundup/admin.py:986 #, python-format msgid "no such %(classname)s property \"%(propname)s\"" msgstr "沒有這樣的 %(classname)s 屬性 \"%(propname)s\"" -#: ../roundup/admin.py:961 +#: ../roundup/admin.py:991 msgid "" "Usage: help topic\n" " Give help about topic.\n" @@ -607,12 +608,12 @@ msgstr "" " all -- 所有可用的說明\n" " " -#: ../roundup/admin.py:980 +#: ../roundup/admin.py:1010 #, python-format msgid "Sorry, no help for \"%(topic)s\"" msgstr "抱歉,沒有對 \"%(topic)s\" 的說明信息" -#: ../roundup/admin.py:997 +#: ../roundup/admin.py:1027 #, fuzzy msgid "" "Usage: history designator [skipquiet] [raw]\n" @@ -634,27 +635,27 @@ msgstr "" " 它的鍵值可以被重用。\n" " " -#: ../roundup/admin.py:1022 +#: ../roundup/admin.py:1052 #, python-format msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'." msgstr "" -#: ../roundup/admin.py:1073 +#: ../roundup/admin.py:1103 #, fuzzy msgid "removed" msgstr "刪除" -#: ../roundup/admin.py:1075 +#: ../roundup/admin.py:1105 msgid "added" msgstr "" -#: ../roundup/admin.py:1077 +#: ../roundup/admin.py:1107 #, python-format msgid "Unknown history set operation '%s'. Expected +/-." msgstr "" #. .Hint added issue23 to superseder -#: ../roundup/admin.py:1102 +#: ../roundup/admin.py:1132 #, fuzzy, python-format msgid "added %(class)s%(item_id)s to %(propname)s" msgstr "%(class)s %(id)s %(properties)s 編輯成功" @@ -662,29 +663,29 @@ msgstr "%(class)s %(id)s %(properties)s 編輯成功" #. .Hint read as: assignedto was admin(1) #. where assignedto is the property #. admin is the key name for value 1 -#: ../roundup/admin.py:1123 +#: ../roundup/admin.py:1153 #, python-format msgid "%(prop)s was %(name)s(%(value)s)" msgstr "" -#: ../roundup/admin.py:1129 ../roundup/admin.py:1158 -#: ../roundup/admin.py:1129:1158 +#: ../roundup/admin.py:1159 ../roundup/admin.py:1188 +#: ../roundup/admin.py:1159:1188 #, fuzzy, python-format msgid "%(prop)s was %(value)s" msgstr "%(key)s: %(value)s (關鍵屬性)" -#: ../roundup/admin.py:1148 +#: ../roundup/admin.py:1178 #, python-format msgid "%(prop)s was [%(value_list)s]" msgstr "" #. .Hint modified nosy: added demo(3) -#: ../roundup/admin.py:1155 +#: ../roundup/admin.py:1185 #, python-format msgid "modified %(prop)s: %(how)s" msgstr "" -#: ../roundup/admin.py:1206 +#: ../roundup/admin.py:1236 #, fuzzy msgid "" "Usage: import import_dir\n" @@ -695,10 +696,13 @@ msgid "" " The files used in the import are:\n" "\n" " .csv\n" -" This must define the same properties as the class (including\n" -" having a \"header\" line with those property names.)\n" +" This must define the same properties as the class\n" +" (including having a \"header\" line with those\n" +" property names.)\n" +"\n" " -journals.csv\n" -" This defines the journals for the items being imported.\n" +" This defines the journals for the items\n" +" being imported.\n" "\n" " The imported nodes will have the same nodeid as defined in the\n" " import file, thus replacing any existing content.\n" @@ -726,7 +730,7 @@ msgstr "" " 舊數據。)\n" " " -#: ../roundup/admin.py:1317 +#: ../roundup/admin.py:1353 msgid "" "Usage: importtables export_dir\n" " This imports the database tables exported using exporttables.\n" @@ -736,7 +740,7 @@ msgid "" msgstr "" #. password -#: ../roundup/admin.py:1325 +#: ../roundup/admin.py:1361 msgid "" "Usage: initialise [adminpw]\n" " Initialise a new Roundup tracker.\n" @@ -754,23 +758,23 @@ msgstr "" " 執行tracker的初始化函數 dbinit.init()\n" " " -#: ../roundup/admin.py:1339 +#: ../roundup/admin.py:1375 msgid "Admin Password: " msgstr "管理員口令:" -#: ../roundup/admin.py:1340 +#: ../roundup/admin.py:1376 msgid " Confirm: " msgstr " 確認:" -#: ../roundup/admin.py:1344 +#: ../roundup/admin.py:1380 msgid "Instance home does not exist" msgstr "實例目錄不存在" -#: ../roundup/admin.py:1348 +#: ../roundup/admin.py:1384 msgid "Instance has not been installed" msgstr "實例還沒有安裝" -#: ../roundup/admin.py:1356 +#: ../roundup/admin.py:1392 msgid "" "WARNING: The database is already initialised!\n" "If you re-initialise it, you will lose all the data!\n" @@ -780,7 +784,7 @@ msgstr "" "如果你重新初始化它,所有的數據將會丟失!\n" "刪除它嗎?Y/N: " -#: ../roundup/admin.py:1376 +#: ../roundup/admin.py:1412 #, fuzzy msgid "" "Usage: install [template [backend [key=val[,key=val]]]]\n" @@ -820,12 +824,12 @@ msgstr "" " 請查看初始化參數說明。\n" " " -#: ../roundup/admin.py:1405 +#: ../roundup/admin.py:1441 #, python-format msgid "Instance home parent directory \"%(parent)s\" does not exist" msgstr "實例目錄的父目錄 \"%(parent)s\" 不存在" -#: ../roundup/admin.py:1414 +#: ../roundup/admin.py:1450 #, python-format msgid "" "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n" @@ -836,22 +840,22 @@ msgstr "" "如果你打算重新安裝它,所有的數據將會丟失!\n" "刪除它嗎?Y/N: " -#: ../roundup/admin.py:1427 +#: ../roundup/admin.py:1463 #, fuzzy msgid "Select template" msgstr "選擇模板 [classic]:" -#: ../roundup/admin.py:1437 +#: ../roundup/admin.py:1473 #, fuzzy msgid "Select backend" msgstr "選擇後端 [anydbm]:" -#: ../roundup/admin.py:1448 +#: ../roundup/admin.py:1484 #, fuzzy, python-format msgid "Error in configuration settings: \"%s\"" msgstr "配置保存到 %s" -#: ../roundup/admin.py:1481 +#: ../roundup/admin.py:1509 #, fuzzy, python-format msgid "" "\n" @@ -863,11 +867,11 @@ msgstr "" " 現在你應該修改tracker的配置文件:\n" " %(config_file)s" -#: ../roundup/admin.py:1491 +#: ../roundup/admin.py:1519 msgid " ... at a minimum, you must set following options:" msgstr " ... 至少,你必須設置以下選項:" -#: ../roundup/admin.py:1496 +#: ../roundup/admin.py:1524 #, fuzzy, python-format msgid "" "\n" @@ -891,7 +895,7 @@ msgstr "" " %(database_init_file)s\n" " ... 查看關於客戶化的文檔來瞭解更多的信息。\n" -#: ../roundup/admin.py:1512 +#: ../roundup/admin.py:1540 msgid "" "Usage: list classname [property]\n" " List the instances of a class.\n" @@ -917,17 +921,17 @@ msgstr "" " 定了屬性,對每個類型實例會列印出這個屬性。\n" " " -#: ../roundup/admin.py:1525 +#: ../roundup/admin.py:1553 msgid "Too many arguments supplied" msgstr "提供了太多的參數了" -#: ../roundup/admin.py:1558 +#: ../roundup/admin.py:1586 #, python-format msgid "%(nodeid)4s: %(value)s" msgstr "" #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1565 +#: ../roundup/admin.py:1593 msgid "" "Usage: migrate\n" " Update a tracker's database to be compatible with the Roundup\n" @@ -950,17 +954,17 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1585 +#: ../roundup/admin.py:1613 #, python-format msgid "Tracker updated to schema version %s." msgstr "" -#: ../roundup/admin.py:1589 +#: ../roundup/admin.py:1617 #, python-format msgid "No migration action required. At schema version %s." msgstr "" -#: ../roundup/admin.py:1594 +#: ../roundup/admin.py:1622 #, fuzzy msgid "" "Usage: pack period | date\n" @@ -970,10 +974,10 @@ msgid "" "The\n" " suffix \"w\" (for \"week\") means 7 days.\n" "\n" -" \"3y\" means three years\n" -" \"2y 1m\" means two years and one month\n" -" \"1m 25d\" means one month and 25 days\n" -" \"2w 3d\" means two weeks and three days\n" +" \"3y\" means three years\n" +" \"2y 1m\" means two years and one month\n" +" \"1m 25d\" means one month and 25 days\n" +" \"2w 3d\" means two weeks and three days\n" "\n" " Date format is \"YYYY-MM-DD\" eg:\n" " 2001-01-01\n" @@ -997,11 +1001,11 @@ msgstr "" "\n" " " -#: ../roundup/admin.py:1620 +#: ../roundup/admin.py:1648 msgid "Invalid format" msgstr "無效的格式" -#: ../roundup/admin.py:1631 +#: ../roundup/admin.py:1659 msgid "" "Usage: perftest [mode] [arguments]*\n" " Time operations in Roundup.\n" @@ -1019,25 +1023,25 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1668 +#: ../roundup/admin.py:1696 msgid "Invalid 'rounds'. Must be larger than 999." msgstr "" -#: ../roundup/admin.py:1672 +#: ../roundup/admin.py:1700 #, python-format msgid "Invalid 'rounds'. It must be an integer not: %s" msgstr "" -#: ../roundup/admin.py:1699 +#: ../roundup/admin.py:1727 msgid "scheme does not support rounds." msgstr "" -#: ../roundup/admin.py:1702 +#: ../roundup/admin.py:1730 #, python-format msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s" msgstr "" -#: ../roundup/admin.py:1708 +#: ../roundup/admin.py:1736 msgid "" "Usage: pragma setting=value | 'list'\n" " Set internal admin settings to a value.\n" @@ -1066,49 +1070,118 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1743 +#: ../roundup/admin.py:1771 #, python-format msgid "Argument must be setting=value, was given: %s." msgstr "" -#: ../roundup/admin.py:1746 +#: ../roundup/admin.py:1774 msgid "Current settings and values (NYI - not yet implemented):" msgstr "" -#: ../roundup/admin.py:1757 +#: ../roundup/admin.py:1785 msgid "" " Help for this pragma is missing. Please report it to the Roundup " "project.\n" msgstr "" -#: ../roundup/admin.py:1763 +#: ../roundup/admin.py:1791 #, fuzzy, python-format msgid "Unknown setting %s. Try \"pragma list\"." msgstr "未知用戶名" -#: ../roundup/admin.py:1773 +#: ../roundup/admin.py:1801 #, python-format msgid "Incorrect value for boolean setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1780 +#: ../roundup/admin.py:1808 #, python-format msgid "Incorrect value for integer setting %(setting)s: %(value)s." msgstr "" -#: ../roundup/admin.py:1787 +#: ../roundup/admin.py:1815 #, python-format msgid "" "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or " "only." msgstr "" -#: ../roundup/admin.py:1797 +#: ../roundup/admin.py:1825 #, python-format msgid "Internal error: pragma can not handle values of type: %s" msgstr "" -#: ../roundup/admin.py:1806 +#. TODO: allow history 20 # most recent 20 commands +#. history 100-200 # show commands 100-200 +#: ../roundup/admin.py:1836 +msgid "" +"Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'\n" +"\n" +" Using 'reload' will reload the file ~/.roundup_admin_rlrc.\n" +" 'history' will show (and number) all commands in the history.\n" +"\n" +" You can change input mode using the 'emacs' or 'vi' parameters.\n" +" The default is emacs. This is the same as using::\n" +"\n" +" readline set editing-mode emacs\n" +"\n" +" or::\n" +"\n" +" readline set editing-mode vi\n" +"\n" +" Any command that can be placed in a readline .inputrc file can\n" +" be executed using the readline command. You can assign\n" +" dump-variables to control O using::\n" +"\n" +" readline Control-o: dump-variables\n" +"\n" +" Assigning multi-key values also works.\n" +"\n" +" pyreadline3 support on windows:\n" +"\n" +" Mode switching doesn't work, emacs only.\n" +"\n" +" Binding single key commands works with::\n" +"\n" +" readline Control-w: history-search-backward\n" +"\n" +" Multiple key sequences don't work.\n" +"\n" +" Setting values may work. Difficult to tell because the library\n" +" has no way to view the live settings.\n" +"\n" +" " +msgstr "" + +#: ../roundup/admin.py:1877 +msgid "Readline support is not available." +msgstr "" + +#: ../roundup/admin.py:1890 +msgid "Enabled vi mode." +msgstr "" + +#: ../roundup/admin.py:1893 +msgid "Enabled emacs mode." +msgstr "" + +#: ../roundup/admin.py:1928 +#, python-format +msgid "Init file %s not found." +msgstr "" + +#: ../roundup/admin.py:1930 +#, python-format +msgid "File %s reloaded." +msgstr "" + +#: ../roundup/admin.py:1933 +#, fuzzy, python-format +msgid "Unknown readline parameter %s" +msgstr "未知郵件地址" + +#: ../roundup/admin.py:1943 #, fuzzy msgid "" "Usage: reindex [classname|classname:#-#|designator]*\n" @@ -1131,17 +1204,17 @@ msgstr "" " 重新生成 tracker 的搜索索引,它將自動進行。\n" " " -#: ../roundup/admin.py:1828 +#: ../roundup/admin.py:1965 #, python-format msgid "no such item \"%(designator)s\"" msgstr "沒有這樣的條目 \"%(designator)s\"" -#: ../roundup/admin.py:1838 +#: ../roundup/admin.py:1975 #, fuzzy, python-format msgid "no such item \"%(class)s%(id)s\"" msgstr "沒有這樣的條目 \"%(designator)s\"" -#: ../roundup/admin.py:1850 +#: ../roundup/admin.py:1987 #, fuzzy msgid "" "Usage: restore designator[,designator]*\n" @@ -1159,7 +1232,7 @@ msgstr "" " 給定的結點將對用戶來說再次生效。\n" " " -#: ../roundup/admin.py:1881 +#: ../roundup/admin.py:2018 #, fuzzy msgid "" "Usage: retire designator[,designator]*\n" @@ -1180,7 +1253,7 @@ msgstr "" " " #. noqa: ARG002 - args unused -#: ../roundup/admin.py:1909 +#: ../roundup/admin.py:2046 msgid "" "Usage: rollback\n" " Undo all changes that are pending commit to the database.\n" @@ -1199,7 +1272,7 @@ msgstr "" " 產生變化。\n" " " -#: ../roundup/admin.py:1922 +#: ../roundup/admin.py:2059 msgid "" "Usage: security [Role name]\n" " Display the Permissions available to one or all Roles.\n" @@ -1212,47 +1285,47 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:1937 +#: ../roundup/admin.py:2074 #, fuzzy, python-format msgid "No such Role \"%(role)s\"\n" msgstr "沒有這樣的角色 \"%(role)s\"" -#: ../roundup/admin.py:1943 +#: ../roundup/admin.py:2080 #, fuzzy, python-format msgid "New Web users get the Roles \"%(role)s\"\n" msgstr "新Web用戶得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1946 +#: ../roundup/admin.py:2083 #, fuzzy, python-format msgid "New Web users get the Role \"%(role)s\"\n" msgstr "新Web用戶得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1950 +#: ../roundup/admin.py:2087 #, fuzzy, python-format msgid "New Email users get the Roles \"%(role)s\"\n" msgstr "新郵件用戶得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1952 +#: ../roundup/admin.py:2089 #, fuzzy, python-format msgid "New Email users get the Role \"%(role)s\"\n" msgstr "新郵件用戶得到角色 \"%(role)s\"" -#: ../roundup/admin.py:1955 +#: ../roundup/admin.py:2092 #, fuzzy, python-format msgid "Role \"%(name)s\":\n" msgstr "角色 \"%(name)s\":" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, fuzzy msgid " %(description)s (%(name)s for \"%(klass)s\"" msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")" -#: ../roundup/admin.py:1961 +#: ../roundup/admin.py:2098 #, 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:1974 +#: ../roundup/admin.py:2111 #, python-format msgid "" "\n" @@ -1260,17 +1333,17 @@ msgid "" "\n" msgstr "" -#: ../roundup/admin.py:1980 +#: ../roundup/admin.py:2117 #, fuzzy, python-format msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n" msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")" -#: ../roundup/admin.py:1983 +#: ../roundup/admin.py:2120 #, fuzzy, python-format msgid " %(description)s (%(name)s)\n" msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")" -#: ../roundup/admin.py:1987 +#: ../roundup/admin.py:2124 #, fuzzy msgid "" "Usage: set items property=value [property=value ...]\n" @@ -1303,7 +1376,7 @@ msgstr "" " 你需要為多鏈接提供用逗號分隔的數字(例如 \"1,2,3\")。\n" " " -#: ../roundup/admin.py:2055 +#: ../roundup/admin.py:2192 msgid "" "Usage: specification classname\n" " Show the properties for a classname.\n" @@ -1317,17 +1390,18 @@ msgstr "" " 會列出給定類型的屬性。\n" " " -#: ../roundup/admin.py:2074 +#: ../roundup/admin.py:2211 #, fuzzy, python-format msgid "%(key)s: %(value)s (key property)\n" msgstr "%(key)s: %(value)s (關鍵屬性)" -#: ../roundup/admin.py:2077 +#: ../roundup/admin.py:2214 #, fuzzy, python-format msgid "%(key)s: %(value)s\n" msgstr "%(key)s: %(value)s (關鍵屬性)" -#: ../roundup/admin.py:2080 +#: ../roundup/admin.py:2217 +#, fuzzy msgid "" "Usage: table classname [property[,property]*]\n" " List the instances of a class in tabular form.\n" @@ -1338,22 +1412,22 @@ msgid "" " explicitly defined by defining the property as \"name:width\".\n" " For example::\n" "\n" -" roundup> table priority id,name:10\n" -" Id Name\n" -" 1 fatal-bug\n" -" 2 bug\n" -" 3 usability\n" -" 4 feature\n" +" roundup> table priority id,name:10\n" +" Id Name\n" +" 1 fatal-bug\n" +" 2 bug\n" +" 3 usability\n" +" 4 feature\n" "\n" " Also to make the width of the column the width of the label,\n" " leave a trailing : without a width on the property. For example::\n" "\n" -" roundup> table priority id,name:\n" -" Id Name\n" -" 1 fata\n" -" 2 bug\n" -" 3 usab\n" -" 4 feat\n" +" roundup> table priority id,name:\n" +" Id Name\n" +" 1 fata\n" +" 2 bug\n" +" 3 usab\n" +" 4 feat\n" "\n" " will result in a the 4 character wide \"Name\" column.\n" " " @@ -1385,17 +1459,17 @@ msgstr "" " 將生成4個字符寬的 \"Name\" 列。\n" " " -#: ../roundup/admin.py:2126 +#: ../roundup/admin.py:2263 #, python-format msgid "\"%(spec)s\" not name:width" msgstr "\"%(spec)s\" 不是 名字:寬度" -#: ../roundup/admin.py:2148 +#: ../roundup/admin.py:2285 #, python-format msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\"" msgstr "" -#: ../roundup/admin.py:2184 +#: ../roundup/admin.py:2321 msgid "" "Usage: templates [trace_search]\n" " List templates and their installed directories.\n" @@ -1405,7 +1479,7 @@ msgid "" " " msgstr "" -#: ../roundup/admin.py:2212 +#: ../roundup/admin.py:2349 msgid "" "Usage: updateconfig \n" " Merge existing tracker config with new settings.\n" @@ -1416,34 +1490,34 @@ msgid "" msgstr "" # ../roundup/cgi/actions.py:549 :559 :730 :749 -#: ../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" +#: ../roundup/admin.py:2358 +#, fuzzy, python-format +msgid "" +"\n" +"Error: %s" msgstr "錯誤:%s" -#: ../roundup/admin.py:2253 +#: ../roundup/admin.py:2396 #, python-format msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)" msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)" -#: ../roundup/admin.py:2259 +#: ../roundup/admin.py:2402 #, python-format msgid "Multiple commands match \"%(command)s\": %(list)s" msgstr "多命令匹配 \"%(command)s\": %(list)s" -#: ../roundup/admin.py:2274 +#: ../roundup/admin.py:2417 msgid "Enter tracker home: " msgstr "輸入tracker起始目錄:" -#: ../roundup/admin.py:2303 ../roundup/admin.py:2307 -#: ../roundup/admin.py:2303:2307 +#: ../roundup/admin.py:2446 ../roundup/admin.py:2450 +#: ../roundup/admin.py:2446:2450 #, python-format msgid "Error: Couldn't open tracker: %(message)s" msgstr "錯誤:不能打開tracker:%(message)s" -#: ../roundup/admin.py:2355 +#: ../roundup/admin.py:2502 #, python-format msgid "" "Roundup %s ready for input.\n" @@ -1452,15 +1526,25 @@ msgstr "" "Roundup %s 輸入就緒。\n" "敲入 \"help\" 獲得說明。" -#: ../roundup/admin.py:2388 -msgid "Note: command history and editing not available" +#: ../roundup/admin.py:2537 +#, python-format +msgid "Readline enabled using %s." +msgstr "" + +#: ../roundup/admin.py:2539 +msgid "Readline enabled using unknown library." +msgstr "" + +#: ../roundup/admin.py:2542 +#, fuzzy +msgid "Command history and line editing not available" msgstr "注意:命令歷史和編輯無效" -#: ../roundup/admin.py:2394 +#: ../roundup/admin.py:2552 msgid "exit..." msgstr "退出..." -#: ../roundup/admin.py:2407 +#: ../roundup/admin.py:2612 msgid "There are unsaved changes. Commit them (y/N)? " msgstr "存在未被保存的改動。提交嗎(y/N)?" @@ -1471,39 +1555,39 @@ msgid "Class \"%s\" already defined." msgstr "" #: ../roundup/backends/back_anydbm.py:278 -#: ../roundup/backends/sessions_dbm.py:61 +#: ../roundup/backends/sessions_dbm.py:63 msgid "Couldn't identify database type" msgstr "" -#: ../roundup/backends/back_anydbm.py:312 +#: ../roundup/backends/back_anydbm.py:313 #, python-format msgid "" "Couldn't open database - the required module '%s' (as dbm.gnu) is not " "available" msgstr "" -#: ../roundup/backends/back_anydbm.py:316 +#: ../roundup/backends/back_anydbm.py:317 #, 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: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/back_anydbm.py:874 +#: ../roundup/backends/back_anydbm.py:887 +#: ../roundup/backends/back_anydbm.py:1163 +#: ../roundup/backends/back_anydbm.py:1198 +#: ../roundup/backends/back_anydbm.py:1427 +#: ../roundup/backends/back_anydbm.py:1445 +#: ../roundup/backends/back_anydbm.py:1493 +#: ../roundup/backends/back_anydbm.py:2139 +#: ../roundup/backends/back_anydbm.py:874:887 #: ../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 +#: ../roundup/backends/rdbms_common.py:1721:1972 :1163:1198 :1427:1445:1493 +#: :2139 :2211:2231 :2293:3268 msgid "Database open read-only" msgstr "" @@ -1524,7 +1608,7 @@ msgid "" "Search failed. Try quoting any terms that include a '-' and retry the search." msgstr "" -#: ../roundup/backends/indexer_xapian.py:39 +#: ../roundup/backends/indexer_xapian.py:40 #, python-format msgid "Unable to get lock after 10 retries on %s." msgstr "" @@ -1580,57 +1664,52 @@ msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中" msgid "Key %(key)s not found in %(name)s database." msgstr "" -#: ../roundup/backends/sessions_redis.py:193 +#: ../roundup/backends/sessions_redis.py:194 #, python-format msgid "Key %(key)s changed in %(name)s db" msgstr "" -#: ../roundup/backends/sessions_redis.py:203 +#: ../roundup/backends/sessions_redis.py:204 #, python-format msgid "" "Redis set failed after %(retries)d retries for user %(user)s with key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:97 +#: ../roundup/cgi/actions.py:99 msgid "Base url not set. Check configuration." msgstr "" -#: ../roundup/cgi/actions.py:113 +#: ../roundup/cgi/actions.py:114 #, python-format msgid "Base url %(base_url)s requires https. Redirect url %(url)s uses http." msgstr "" -#: ../roundup/cgi/actions.py:118 +#: ../roundup/cgi/actions.py:119 #, fuzzy, python-format msgid "Unrecognized scheme in %(url)s" msgstr "無法識別的字符集:%r" -#: ../roundup/cgi/actions.py:122 +#: ../roundup/cgi/actions.py:123 #, python-format msgid "Net location in %(url)s does not match base: %(base_netloc)s" msgstr "" -#: ../roundup/cgi/actions.py:126 +#: ../roundup/cgi/actions.py:127 #, python-format msgid "Base path %(base_path)s is not a prefix for url %(url)s" msgstr "" -#: ../roundup/cgi/actions.py:140 +#: ../roundup/cgi/actions.py:141 #, python-format msgid "Path component (%(url_path)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:144 -#, python-format -msgid "Params component (%(url_params)s) in %(url)s is not properly escaped" -msgstr "" - -#: ../roundup/cgi/actions.py:147 +#: ../roundup/cgi/actions.py:145 #, python-format msgid "Query component (%(url_query)s) in %(url)s is not properly escaped" msgstr "" -#: ../roundup/cgi/actions.py:150 +#: ../roundup/cgi/actions.py:148 #, python-format msgid "" "Fragment component (%(url_fragment)s) in %(url)s is not properly escaped" @@ -1655,16 +1734,16 @@ msgid "\"%(input)s\" is not an ID (%(classname)s ID required)" 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: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 +#: ../roundup/cgi/actions.py:510 ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:902 ../roundup/cgi/actions.py:1106 +#: ../roundup/cgi/actions.py:1268 ../roundup/cgi/actions.py:1917 +#: ../roundup/cgi/actions.py:228:266 :1268:1917 :510:855 :902:1106 #, fuzzy msgid "Invalid request" msgstr "無效的格式" -#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:604 -#: ../roundup/cgi/actions.py:246:604 +#: ../roundup/cgi/actions.py:246 ../roundup/cgi/actions.py:621 +#: ../roundup/cgi/actions.py:246:621 #, fuzzy, python-format msgid "You do not have permission to retire %(class)s" msgstr "你沒有權限來建立 %(class)s" @@ -1684,14 +1763,14 @@ msgstr "你沒有權限來建立 %(class)s" msgid "%(classname)s %(itemid)s has been restored" msgstr "%(classname)s %(itemid)s 已經被回收了" -#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:380 -#: ../roundup/cgi/actions.py:329:380 +#: ../roundup/cgi/actions.py:329 ../roundup/cgi/actions.py:397 +#: ../roundup/cgi/actions.py:329:397 #, fuzzy msgid "You do not have permission to edit queries" msgstr "你沒有編輯用戶或角色的權限" -#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:387 -#: ../roundup/cgi/actions.py:335:387 +#: ../roundup/cgi/actions.py:335 ../roundup/cgi/actions.py:404 +#: ../roundup/cgi/actions.py:335:404 #, fuzzy msgid "You do not have permission to store queries" msgstr "你沒有編輯用戶或角色的權限" @@ -1701,60 +1780,74 @@ msgstr "你沒有編輯用戶或角色的權限" msgid "You already own a query named '%s'. Please choose another name." msgstr "" -#: ../roundup/cgi/actions.py:440 +#. .Hint suffix added to queryname when +#. a new queryname is already used. +#: ../roundup/cgi/actions.py:377 +msgid " - duplicate" +msgstr "" + +#: ../roundup/cgi/actions.py:457 #, fuzzy msgid "Invalid number: " msgstr "無效的格式" -#: ../roundup/cgi/actions.py:450 +#: ../roundup/cgi/actions.py:467 #, fuzzy msgid "Invalid integer: " msgstr "無效登錄" -#: ../roundup/cgi/actions.py:531 ../roundup/cgi/actions.py:740 -#: ../roundup/cgi/actions.py:531:740 +#: ../roundup/cgi/actions.py:548 ../roundup/cgi/actions.py:757 +#: ../roundup/cgi/actions.py:548:757 #, python-format msgid "You do not have permission to create %(class)s" msgstr "你沒有權限來建立 %(class)s" -#: ../roundup/cgi/actions.py:544 +#: ../roundup/cgi/actions.py:561 #, python-format msgid "Not enough values on line %(line)s" msgstr "在 %(line)s 行沒有足夠的值" -#: ../roundup/cgi/actions.py:556 ../roundup/cgi/actions.py:728 -#: ../roundup/cgi/actions.py:556:728 +#: ../roundup/cgi/actions.py:573 ../roundup/cgi/actions.py:745 +#: ../roundup/cgi/actions.py:573:745 #, python-format msgid "You do not have permission to edit %(class)s" msgstr "你沒有權限來編輯 %(class)s" -#: ../roundup/cgi/actions.py:611 +#: ../roundup/cgi/actions.py:628 msgid "Items edited OK" msgstr "項目編輯成功" -#: ../roundup/cgi/actions.py:676 +#: ../roundup/cgi/actions.py:693 #, python-format msgid "%(class)s %(id)s %(properties)s edited ok" msgstr "%(class)s %(id)s %(properties)s 編輯成功" -#: ../roundup/cgi/actions.py:694 +#: ../roundup/cgi/actions.py:711 #, python-format msgid "%(class)s %(id)s created" msgstr "%(class)s %(id)s 被建立" -#: ../roundup/cgi/actions.py:822 +#: ../roundup/cgi/actions.py:839 #, python-format msgid "" "Edit Error: someone else has edited this %(klass)s (%(props)s). View their changes in a new window." msgstr "" -#: ../roundup/cgi/actions.py:855 +#: ../roundup/cgi/actions.py:872 #, python-format msgid "Edit Error: %s" msgstr "編輯錯誤:%s" -#: ../roundup/cgi/actions.py:936 +# ../roundup/cgi/actions.py:549 :559 :730 :749 +#: ../roundup/cgi/actions.py:908 ../roundup/cgi/actions.py:919 +#: ../roundup/cgi/actions.py:1121 ../roundup/cgi/actions.py:1135 +#: ../roundup/cgi/actions.py:908:919 :1121:1135 +#, python-format +msgid "Error: %s" +msgstr "錯誤:%s" + +#: ../roundup/cgi/actions.py:953 msgid "" "Invalid One Time Key!\n" "(a Mozilla bug may cause this message to show up erroneously, please check " @@ -1763,12 +1856,12 @@ msgstr "" "Invalid One Time Key!\n" "(一個 Mozilla 的錯誤可能會錯誤地引發這個消息,你檢查你的郵件)" -#: ../roundup/cgi/actions.py:977 +#: ../roundup/cgi/actions.py:994 #, fuzzy, python-format msgid "Password reset for %s" msgstr "口令重設請求" -#: ../roundup/cgi/actions.py:978 +#: ../roundup/cgi/actions.py:995 #, python-format msgid "" "\n" @@ -1777,29 +1870,29 @@ msgid "" "Your password is now: %(password)s\n" msgstr "" -#: ../roundup/cgi/actions.py:987 +#: ../roundup/cgi/actions.py:1004 #, python-format msgid "Password reset and email sent to %s" msgstr "口令被重設,郵件被發給 %s" -#: ../roundup/cgi/actions.py:996 +#: ../roundup/cgi/actions.py:1013 msgid "Unknown username" msgstr "未知用戶名" -#: ../roundup/cgi/actions.py:1004 +#: ../roundup/cgi/actions.py:1021 msgid "Unknown email address" msgstr "未知郵件地址" -#: ../roundup/cgi/actions.py:1009 +#: ../roundup/cgi/actions.py:1026 msgid "You need to specify a username or address" msgstr "你需要指定用戶名或地址" -#: ../roundup/cgi/actions.py:1020 +#: ../roundup/cgi/actions.py:1037 #, fuzzy, python-format msgid "Confirm reset of password for %s" msgstr "口令確認" -#: ../roundup/cgi/actions.py:1021 +#: ../roundup/cgi/actions.py:1038 #, python-format msgid "" "\n" @@ -1813,31 +1906,31 @@ msgid "" "You should then receive another email with the new password.\n" msgstr "" -#: ../roundup/cgi/actions.py:1034 +#: ../roundup/cgi/actions.py:1051 #, python-format msgid "Email sent to primary notification address for %s." msgstr "" -#: ../roundup/cgi/actions.py:1036 +#: ../roundup/cgi/actions.py:1053 #, fuzzy, python-format msgid "Email sent to %s." msgstr "郵件發給 %s" -#: ../roundup/cgi/actions.py:1051 +#: ../roundup/cgi/actions.py:1068 msgid "You are now registered, welcome!" msgstr "你已經註冊,歡迎!" -#: ../roundup/cgi/actions.py:1144 +#: ../roundup/cgi/actions.py:1161 #, python-format msgid "Username '%s' is already used." msgstr "" -#: ../roundup/cgi/actions.py:1168 +#: ../roundup/cgi/actions.py:1185 #, python-format msgid "Complete your registration to %(tracker_name)s -- key %(key)s" msgstr "" -#: ../roundup/cgi/actions.py:1172 +#: ../roundup/cgi/actions.py:1189 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1853,12 +1946,12 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1186 +#: ../roundup/cgi/actions.py:1203 #, python-format msgid "Complete your registration to %s" msgstr "" -#: ../roundup/cgi/actions.py:1187 +#: ../roundup/cgi/actions.py:1204 #, python-format msgid "" "To complete your registration of the user \"%(name)s\" with\n" @@ -1868,49 +1961,59 @@ msgid "" "\n" msgstr "" -#: ../roundup/cgi/actions.py:1211 +#: ../roundup/cgi/actions.py:1228 msgid "It is not permitted to supply roles at registration." msgstr "不允許在註冊時指供角色。" -#: ../roundup/cgi/actions.py:1225 +#: ../roundup/cgi/actions.py:1242 msgid "You are logged out" msgstr "你已經註銷" -#: ../roundup/cgi/actions.py:1255 +#: ../roundup/cgi/actions.py:1272 msgid "Username required" msgstr "需要用戶名" -#: ../roundup/cgi/actions.py:1359 +#: ../roundup/cgi/actions.py:1376 #, python-format msgid "Welcome %(username)s!" msgstr "" -#: ../roundup/cgi/actions.py:1482 +#: ../roundup/cgi/actions.py:1499 #, python-format msgid "Logins occurring too fast. Please wait: %s seconds." msgstr "" -#: ../roundup/cgi/actions.py:1520 ../roundup/cgi/actions.py:1531 -#: ../roundup/cgi/actions.py:1520:1531 +#: ../roundup/cgi/actions.py:1537 ../roundup/cgi/actions.py:1548 +#: ../roundup/cgi/actions.py:1537:1548 msgid "Invalid login" msgstr "無效登錄" -#: ../roundup/cgi/actions.py:1537 +#: ../roundup/cgi/actions.py:1554 msgid "You do not have permission to login" msgstr "你沒有登錄的權限" -#: ../roundup/cgi/actions.py:1582 ../roundup/cgi/actions.py:1762 -#: ../roundup/cgi/actions.py:1582:1762 +#: ../roundup/cgi/actions.py:1599 ../roundup/cgi/actions.py:1781 +#: ../roundup/cgi/actions.py:1599:1781 #, python-format msgid "Column \"%(column)s\" not found in %(class)s" msgstr "" -#: ../roundup/cgi/actions.py:1827 +#: ../roundup/cgi/actions.py:1846 #, fuzzy, python-format msgid "You do not have permission to view %(class)s" msgstr "你沒有權限來編輯 %(class)s" -#: ../roundup/cgi/cgitb.py:62 +#: ../roundup/cgi/actions.py:1920 ../roundup/cgi/actions.py:1926 +#: ../roundup/cgi/actions.py:1920:1926 +#, fuzzy +msgid "Password incorrect." +msgstr "口令重設請求" + +#: ../roundup/cgi/actions.py:1948 +msgid "Missing action to be authorized." +msgstr "" + +#: ../roundup/cgi/cgitb.py:61 #, python-format msgid "" "

                                              Templating Error

                                              \n" @@ -1921,27 +2024,27 @@ msgstr "" "

                                              %(exc_type)s: %(exc_value)s

                                              \n" "

                                              調試信息為

                                              " -#: ../roundup/cgi/cgitb.py:77 +#: ../roundup/cgi/cgitb.py:76 #, python-format msgid "
                                            1. \"%(name)s\" (%(info)s)
                                            2. " msgstr "" -#: ../roundup/cgi/cgitb.py:81 +#: ../roundup/cgi/cgitb.py:80 #, python-format msgid "
                                            3. Looking for \"%(name)s\", current path:
                                                %(path)s
                                            4. " msgstr "
                                            5. 查找 \"%(name)s\", 當前路徑:
                                                %(path)s
                                            6. " -#: ../roundup/cgi/cgitb.py:85 +#: ../roundup/cgi/cgitb.py:84 #, python-format msgid "
                                            7. In %s
                                            8. " msgstr "
                                            9. 在 %s
                                            10. " -#: ../roundup/cgi/cgitb.py:90 +#: ../roundup/cgi/cgitb.py:89 #, python-format msgid "A problem occurred in your template \"%s\"." msgstr "在你的模板 \"%s\" 中發生一個問題。" -#: ../roundup/cgi/cgitb.py:98 +#: ../roundup/cgi/cgitb.py:97 #, python-format msgid "" "\n" @@ -1960,17 +2063,17 @@ msgstr "" " %(locals)s\n" "\n" -#: ../roundup/cgi/cgitb.py:117 +#: ../roundup/cgi/cgitb.py:116 msgid "Full traceback:" msgstr "完整跟蹤信息:" -#: ../roundup/cgi/cgitb.py:133 ../roundup/cgi/cgitb.py:138 -#: ../roundup/cgi/cgitb.py:133:138 +#: ../roundup/cgi/cgitb.py:132 ../roundup/cgi/cgitb.py:137 +#: ../roundup/cgi/cgitb.py:132:137 #, python-format msgid "%(exc_type)s: %(exc_value)s" msgstr "" -#: ../roundup/cgi/cgitb.py:143 +#: ../roundup/cgi/cgitb.py:142 msgid "" "

                                              A problem occurred while running a Python script. Here is the sequence of " "function calls leading up to the error, with the most recent (innermost) " @@ -1979,22 +2082,22 @@ msgstr "" "

                                              在運行 Python 腳本時發生了一個錯誤。這是導致出錯的一系列的函數調用,最近的" "(最裡層的)調用在前。異常屬性是:" -#: ../roundup/cgi/cgitb.py:152 +#: ../roundup/cgi/cgitb.py:151 msgid "<file is None - probably inside eval or exec>" msgstr "<文件為 None - 可能在 eval 或者 exec>" -#: ../roundup/cgi/cgitb.py:161 +#: ../roundup/cgi/cgitb.py:160 #, python-format msgid "in %s" msgstr "在 %s" # ../roundup/cgi/cgitb.py:172 :178 -#: ../roundup/cgi/cgitb.py:209 ../roundup/cgi/cgitb.py:215 -#: ../roundup/cgi/cgitb.py:209:215 +#: ../roundup/cgi/cgitb.py:208 ../roundup/cgi/cgitb.py:214 +#: ../roundup/cgi/cgitb.py:208:214 msgid "undefined" msgstr "未定義" -#: ../roundup/cgi/client.py:111 +#: ../roundup/cgi/client.py:114 msgid "" "An error has occurred\n" "

                                              An error has occurred

                                              \n" @@ -2003,164 +2106,162 @@ msgid "" "" msgstr "" -#: ../roundup/cgi/client.py:679 +#: ../roundup/cgi/client.py:694 msgid "" "XMLRPC endpoint is not using defusedxml. Improve security by installing " "defusedxml." msgstr "" -#: ../roundup/cgi/client.py:749 ../roundup/cgi/client.py:771 -#: ../roundup/cgi/client.py:749:771 +#: ../roundup/cgi/client.py:764 ../roundup/cgi/client.py:786 +#: ../roundup/cgi/client.py:764:786 #, fuzzy msgid "Client is not allowed to use Rest Interface." msgstr "匿名用戶不允許使用web界面" -#: ../roundup/cgi/client.py:768 ../roundup/cgi/client.py:1682 -#: ../roundup/cgi/client.py:768:1682 +#: ../roundup/cgi/client.py:783 ../roundup/cgi/client.py:1903 +#: ../roundup/cgi/client.py:783:1903 msgid "Required Header Missing" msgstr "" -#: ../roundup/cgi/client.py:1021 +#: ../roundup/cgi/client.py:1071 msgid "Form Error: " msgstr "表格錯誤:" -#: ../roundup/cgi/client.py:1114 +#: ../roundup/cgi/client.py:1175 #, python-format msgid "Unrecognized charset: %r" msgstr "無法識別的字符集:%r" -#: ../roundup/cgi/client.py:1381 ../roundup/cgi/client.py:2396 -#: ../roundup/cgi/client.py:1381:2396 +#: ../roundup/cgi/client.py:1442 ../roundup/cgi/client.py:2665 +#: ../roundup/cgi/client.py:1442:2665 msgid "broken form: multiple @action values submitted" msgstr "" -#: ../roundup/cgi/client.py:1398 +#: ../roundup/cgi/client.py:1460 msgid "Anonymous users are not allowed to use the web interface" msgstr "匿名用戶不允許使用web界面" -#: ../roundup/cgi/client.py:1543 -msgid "Referer header not available." +#: ../roundup/cgi/client.py:1562 +msgid "Request source headers not available." msgstr "" -#: ../roundup/cgi/client.py:1547 +#: ../roundup/cgi/client.py:1566 #, python-format -msgid "csrf key used with wrong method from: %s" +msgid "csrf key used with method %(method)s from: %(source)s" +msgstr "" + +#: ../roundup/cgi/client.py:1683 ../roundup/cgi/client.py:1693 +#: ../roundup/cgi/client.py:1683:1693 +msgid "Unable to authorize request" msgstr "" -#: ../roundup/cgi/client.py:1576 +#: ../roundup/cgi/client.py:1797 #, python-format msgid "csrf header %(header)s required but missing for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1580 +#: ../roundup/cgi/client.py:1801 #, python-format msgid "Missing header: %s" msgstr "" -#: ../roundup/cgi/client.py:1588 +#: ../roundup/cgi/client.py:1809 #, python-format msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s" msgstr "" -#: ../roundup/cgi/client.py:1593 +#: ../roundup/cgi/client.py:1814 #, fuzzy, python-format msgid "Invalid Referer: %s" msgstr "無效登錄" -#: ../roundup/cgi/client.py:1608 +#: ../roundup/cgi/client.py:1829 #, python-format msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s" msgstr "" -#: ../roundup/cgi/client.py:1613 +#: ../roundup/cgi/client.py:1834 #, fuzzy, python-format msgid "Invalid Origin %s" msgstr "無效登錄" -#: ../roundup/cgi/client.py:1627 +#: ../roundup/cgi/client.py:1848 #, python-format msgid "" "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1633 +#: ../roundup/cgi/client.py:1854 #, python-format msgid "Invalid X-FORWARDED-HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1652 +#: ../roundup/cgi/client.py:1873 #, python-format msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s" msgstr "" -#: ../roundup/cgi/client.py:1657 +#: ../roundup/cgi/client.py:1878 #, python-format msgid "Invalid HOST %s" msgstr "" -#: ../roundup/cgi/client.py:1665 +#: ../roundup/cgi/client.py:1886 msgid "Csrf: unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1666 +#: ../roundup/cgi/client.py:1887 msgid "Unable to verify sufficient headers" msgstr "" -#: ../roundup/cgi/client.py:1679 +#: ../roundup/cgi/client.py:1900 #, python-format msgid "" "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%(userid)s." msgstr "" -#: ../roundup/cgi/client.py:1720 +#: ../roundup/cgi/client.py:1941 #, python-format 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 +#: ../roundup/cgi/client.py:1944 ../roundup/cgi/client.py:1972 +#: ../roundup/cgi/client.py:1989 ../roundup/cgi/client.py:1944:1972:1989 msgid "" "We can't validate your session (csrf failure). Re-enter any unsaved data and " "try again." msgstr "" -#: ../roundup/cgi/client.py:1728 +#: ../roundup/cgi/client.py:1949 #, python-format msgid "csrf field not supplied by user%(userid)s" msgstr "" -#: ../roundup/cgi/client.py:1740 +#: ../roundup/cgi/client.py:1961 #, 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:1758 +#: ../roundup/cgi/client.py:1979 #, 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:1950 +#: ../roundup/cgi/client.py:2209 #, fuzzy msgid "You are not allowed to view this file." msgstr "你不允許查看此頁" -#: ../roundup/cgi/client.py:2274 +#: ../roundup/cgi/client.py:2544 #, python-format msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n" msgstr "" -#: ../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:2817 +#: ../roundup/cgi/client.py:3086 #, python-format msgid "" "Cache failure: compressed file %(compressed)s is older than its source file " @@ -2219,142 +2320,147 @@ msgid "Required %(class)s property %(property)s not supplied" msgid_plural "Required %(class)s properties %(property)s not supplied" msgstr[0] "要求的 %(class)s 屬性 %(property)s 沒有被提供" -#: ../roundup/cgi/templating.py:278 +#: ../roundup/cgi/templating.py:286 #, python-format msgid "You are not allowed to %(action)s items of class %(class)s" msgstr "你不允許 %(action)s 類別 %(class)s 的項目" -#: ../roundup/cgi/templating.py:892 +#: ../roundup/cgi/templating.py:900 msgid "(list)" msgstr "(列表)" -#: ../roundup/cgi/templating.py:975 +#: ../roundup/cgi/templating.py:983 msgid "Submit New Entry" msgstr "提交新的項" -#: ../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 +#: ../roundup/cgi/templating.py:1005 ../roundup/cgi/templating.py:1182 +#: ../roundup/cgi/templating.py:1817 ../roundup/cgi/templating.py:1848 +#: ../roundup/cgi/templating.py:1869 ../roundup/cgi/templating.py:1907 +#: ../roundup/cgi/templating.py:1960 ../roundup/cgi/templating.py:1984 +#: ../roundup/cgi/templating.py:1991 ../roundup/cgi/templating.py:2028 +#: ../roundup/cgi/templating.py:2085 ../roundup/cgi/templating.py:2123 +#: ../roundup/cgi/templating.py:2223 ../roundup/cgi/templating.py:2244 +#: ../roundup/cgi/templating.py:2365 ../roundup/cgi/templating.py:2385 +#: ../roundup/cgi/templating.py:2407 ../roundup/cgi/templating.py:2450 +#: ../roundup/cgi/templating.py:2460 ../roundup/cgi/templating.py:2525 +#: ../roundup/cgi/templating.py:2828 ../roundup/cgi/templating.py:1005:1182 +#: :1817:1848 :1869:1907 :1960:1984 :1991:2028 :2085:2123 :2223:2244 :2365:2385 +#: :2407:2450 :2460:2525:2828 msgid "[hidden]" msgstr "" -#: ../roundup/cgi/templating.py:998 +#: ../roundup/cgi/templating.py:1006 msgid "New node - no history" msgstr "新記錄 - 無歷史" -#: ../roundup/cgi/templating.py:1139 +#: ../roundup/cgi/templating.py:1147 msgid "Submit Changes" msgstr "提交變動" -#: ../roundup/cgi/templating.py:1217 +#: ../roundup/cgi/templating.py:1225 msgid "The indicated property no longer exists" msgstr "指示的屬性不再存在" -#: ../roundup/cgi/templating.py:1253 +#: ../roundup/cgi/templating.py:1261 #, python-format msgid "The linked class %(classname)s no longer exists" msgstr "鏈接的類別 %(classname)s 不再存在" -#: ../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 +#: ../roundup/cgi/templating.py:1298 ../roundup/cgi/templating.py:1328 +#: ../roundup/cgi/templating.py:2534 ../roundup/cgi/templating.py:2837 +#: ../roundup/cgi/templating.py:1298:1328 :2534:2837 msgid "[label is missing]" msgstr "" # ../roundup/cgi/templating.py:872 :893 -#: ../roundup/cgi/templating.py:1294 ../roundup/cgi/templating.py:1323 -#: ../roundup/cgi/templating.py:1294:1323 +#: ../roundup/cgi/templating.py:1302 ../roundup/cgi/templating.py:1331 +#: ../roundup/cgi/templating.py:1302:1331 msgid "The linked node no longer exists" msgstr "鏈接的結點不再存在" -#: ../roundup/cgi/templating.py:1385 +#: ../roundup/cgi/templating.py:1393 #, python-format msgid "%s: (no value)" msgstr "%s: (無值)" -#: ../roundup/cgi/templating.py:1401 +#: ../roundup/cgi/templating.py:1409 #, fuzzy, python-format msgid "" "This event %s is not handled by the history display!" msgstr "這個事件不能被歷史顯示所處理!" -#: ../roundup/cgi/templating.py:1414 +#: ../roundup/cgi/templating.py:1422 msgid "Note:" msgstr "注意:" -#: ../roundup/cgi/templating.py:1423 +#: ../roundup/cgi/templating.py:1431 msgid "History" msgstr "歷史" -#: ../roundup/cgi/templating.py:1425 +#: ../roundup/cgi/templating.py:1433 msgid "Date" msgstr "日期" -#: ../roundup/cgi/templating.py:1426 +#: ../roundup/cgi/templating.py:1434 msgid "User" msgstr "用戶" -#: ../roundup/cgi/templating.py:1427 +#: ../roundup/cgi/templating.py:1435 msgid "Action" msgstr "動作" -#: ../roundup/cgi/templating.py:1428 +#: ../roundup/cgi/templating.py:1436 msgid "Args" msgstr "參數" -#: ../roundup/cgi/templating.py:1479 +#: ../roundup/cgi/templating.py:1487 #, fuzzy, python-format msgid "Copy of %(class)s %(id)s" msgstr "%(class)s %(id)s 被建立" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2154 -#: ../roundup/cgi/templating.py:1367:2119:2154 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2162 +#: ../roundup/cgi/templating.py:1375:2127:2162 msgid "No" msgstr "否" -#: ../roundup/cgi/templating.py:2119 ../roundup/cgi/templating.py:2148 -#: ../roundup/cgi/templating.py:1367:2119:2148 +#: ../roundup/cgi/templating.py:2127 ../roundup/cgi/templating.py:2156 +#: ../roundup/cgi/templating.py:1375:2127:2156 msgid "Yes" msgstr "是" -#: ../roundup/cgi/templating.py:2315 +#: ../roundup/cgi/templating.py:2323 msgid "" "default value for DateHTMLProperty must be either DateHTMLProperty or string " "date representation." msgstr "DateHTMLProperty 的預設值或者是 DateHTMLProperty 或字符串的日期表示。" -#: ../roundup/cgi/templating.py:2497 +#: ../roundup/cgi/templating.py:2505 #, python-format msgid "Attempt to look up %(attr)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2508 +#: ../roundup/cgi/templating.py:2516 #, python-format msgid "Attempt to look up %(item)s on a missing value" msgstr "" -#: ../roundup/cgi/templating.py:2613 +#: ../roundup/cgi/templating.py:2621 #, python-format msgid "" msgstr "" -#: ../roundup/cgi/templating.py:3777 +#: ../roundup/cgi/templating.py:3653 +msgid "" +"The excluded_fields parameter is invalid.It must have a __contains__ method." +msgstr "" + +#: ../roundup/cgi/templating.py:3903 #, python-format msgid "Unable to read or expand file '%(name)s' in template '%(template)s'." msgstr "" -#: ../roundup/cgi/templating.py:3827 +#: ../roundup/cgi/templating.py:3953 #, python-format msgid "" "Found an incorrect token when expandfile applied string subsitution on " @@ -2375,219 +2481,222 @@ msgstr "" msgid "Responding to form too quickly." msgstr "" -#: ../roundup/configuration.py:268 +#: ../roundup/configuration.py:280 #, python-format msgid "" "Error in %(filepath)s with section [%(section)s] at option %(option)s: " "%(message)s" msgstr "" -#: ../roundup/configuration.py:501 +#: ../roundup/configuration.py:513 #, fuzzy msgid "Valid languages: " msgstr "無效的格式" -#: ../roundup/configuration.py:511 +#: ../roundup/configuration.py:523 #, fuzzy msgid "Expected languages: " msgstr "無效的格式" -#: ../roundup/date.py:400 +#: ../roundup/configuration.py:2616 +msgid "Error found at end of file. Maybe missing a block closing '}'." +msgstr "" + +#: ../roundup/date.py:402 #, python-format msgid "" "Not a date spec: %r (\"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" or " "\"yyyy-mm-dd.HH:MM:SS.SSS\")" msgstr "" -#: ../roundup/date.py:423 +#: ../roundup/date.py:425 msgid "Could not determine granularity" msgstr "" -#: ../roundup/date.py:475 +#: ../roundup/date.py:477 #, python-format msgid "" "%r not a date / time spec \"yyyy-mm-dd\", \"mm-dd\", \"HH:MM\", \"HH:MM:SS\" " "or \"yyyy-mm-dd.HH:MM:SS.SSS\"" msgstr "" -#: ../roundup/date.py:847 +#: ../roundup/date.py:849 #, fuzzy, python-format msgid "" "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date " "spec])" msgstr "不是時間間隔規範:[+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [日期規範]" -#: ../roundup/date.py:870 +#: ../roundup/date.py:872 #, fuzzy, python-format msgid "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS])" msgstr "不是時間間隔規範:[+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS]" -#: ../roundup/date.py:1047 +#: ../roundup/date.py:1049 #, fuzzy, python-format msgid "%(number)s year" msgid_plural "%(number)s years" msgstr[0] "%(number)s年" -#: ../roundup/date.py:1051 +#: ../roundup/date.py:1053 #, fuzzy, python-format msgid "%(number)s month" msgid_plural "%(number)s months" msgstr[0] "%(number)s月" -#: ../roundup/date.py:1055 +#: ../roundup/date.py:1057 #, fuzzy, python-format msgid "%(number)s week" msgid_plural "%(number)s weeks" msgstr[0] "%(number)s周" -#: ../roundup/date.py:1059 +#: ../roundup/date.py:1061 #, fuzzy, python-format msgid "%(number)s day" msgid_plural "%(number)s days" msgstr[0] "%(number)s天" -#: ../roundup/date.py:1063 +#: ../roundup/date.py:1065 msgid "tomorrow" msgstr "明天" -#: ../roundup/date.py:1065 +#: ../roundup/date.py:1067 msgid "yesterday" msgstr "昨天" -#: ../roundup/date.py:1068 +#: ../roundup/date.py:1070 #, fuzzy, python-format msgid "%(number)s hour" msgid_plural "%(number)s hours" msgstr[0] "%(number)s小時" -#: ../roundup/date.py:1072 +#: ../roundup/date.py:1074 msgid "an hour" msgstr "1小時" -#: ../roundup/date.py:1074 +#: ../roundup/date.py:1076 msgid "1 1/2 hours" msgstr "1個半小時" -#: ../roundup/date.py:1076 +#: ../roundup/date.py:1078 #, fuzzy, python-format msgid "1 %(number)s/4 hours" msgid_plural "1 %(number)s/4 hours" msgstr[0] "1 %(number)s/4 小時" -#: ../roundup/date.py:1081 +#: ../roundup/date.py:1083 msgid "in a moment" msgstr "一會兒" -#: ../roundup/date.py:1083 +#: ../roundup/date.py:1085 msgid "just now" msgstr "剛才" -#: ../roundup/date.py:1086 +#: ../roundup/date.py:1088 msgid "1 minute" msgstr "1分鐘" -#: ../roundup/date.py:1089 +#: ../roundup/date.py:1091 #, fuzzy, python-format msgid "%(number)s minute" msgid_plural "%(number)s minutes" msgstr[0] "%(number)s分鐘" -#: ../roundup/date.py:1092 +#: ../roundup/date.py:1094 msgid "1/2 an hour" msgstr "半小時" -#: ../roundup/date.py:1094 +#: ../roundup/date.py:1096 #, fuzzy, python-format msgid "%(number)s/4 hour" msgid_plural "%(number)s/4 hours" msgstr[0] "%(number)s/4 小時" -#: ../roundup/date.py:1098 +#: ../roundup/date.py:1100 #, python-format msgid "%s ago" msgstr "%s 之前" -#: ../roundup/date.py:1100 +#: ../roundup/date.py:1102 #, python-format msgid "in %s" msgstr "在 %s" -#: ../roundup/hyperdb.py:126 +#: ../roundup/hyperdb.py:128 #, fuzzy, python-format msgid "property %(property)s: %(errormsg)s" msgstr "錯誤:%s: %s" -#: ../roundup/hyperdb.py:161 +#: ../roundup/hyperdb.py:163 #, python-format msgid "property %(property)s: %(value)r is an invalid date (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:184 +#: ../roundup/hyperdb.py:186 #, python-format msgid "" "property %(property)s: %(value)r is an invalid date interval (%(errormsg)s)" msgstr "" -#: ../roundup/hyperdb.py:446 +#: ../roundup/hyperdb.py:447 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a number" msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中" -#: ../roundup/hyperdb.py:460 +#: ../roundup/hyperdb.py:461 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not an integer" msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中" -#: ../roundup/hyperdb.py:482 +#: ../roundup/hyperdb.py:483 #, python-format msgid "\"%s\" not a node designator" msgstr "" -#: ../roundup/hyperdb.py:1515 ../roundup/hyperdb.py:1523 -#: ../roundup/hyperdb.py:1515:1523 +#: ../roundup/hyperdb.py:1521 ../roundup/hyperdb.py:1529 +#: ../roundup/hyperdb.py:1521:1529 #, fuzzy, python-format msgid "Not a property name: %s" msgstr "不是日期格式:%s" -#: ../roundup/hyperdb.py:2054 +#: ../roundup/hyperdb.py:2057 #, fuzzy, python-format msgid "property %(property)s: %(value)r is not a %(classname)s." msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中" -#: ../roundup/hyperdb.py:2060 +#: ../roundup/hyperdb.py:2063 #, python-format msgid "you may only enter ID values for property %s" msgstr "" -#: ../roundup/hyperdb.py:2095 +#: ../roundup/hyperdb.py:2098 #, python-format msgid "%(property)r is not a property of %(classname)s" msgstr "" -#: ../roundup/init.py:141 +#: ../roundup/init.py:150 #, python-format msgid "" "WARNING: directory '%s'\n" "\tcontains old-style template - ignored" msgstr "" -#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 -#: ../roundup/mailgw.py:215:228 +#: ../roundup/mailgw.py:215 ../roundup/mailgw.py:228 ../roundup/pygettext.py:53 #, python-format msgid "Message signed with unknown key: %s" msgstr "" -#: ../roundup/mailgw.py:218 +#: ../roundup/mailgw.py:218 ../roundup/pygettext.py:56 #, python-format msgid "Message signed with an expired key: %s" msgstr "" -#: ../roundup/mailgw.py:221 +#: ../roundup/mailgw.py:221 ../roundup/pygettext.py:59 #, python-format msgid "Message signed with a revoked key: %s" msgstr "" -#: ../roundup/mailgw.py:224 +#: ../roundup/mailgw.py:224 ../roundup/pygettext.py:62 msgid "Invalid PGP signature detected." msgstr "" @@ -2778,8 +2887,7 @@ msgid "" " %(message)s\n" msgstr "" -#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1835 -#: ../roundup/mailgw.py:1366:1835 +#: ../roundup/mailgw.py:1366 ../roundup/mailgw.py:1839 #, python-format msgid "" "\n" @@ -2788,7 +2896,7 @@ msgid "" " %(errors)s\n" msgstr "" -#: ../roundup/mailgw.py:1821 +#: ../roundup/mailgw.py:1825 #, python-format msgid "" "\n" @@ -2797,11 +2905,11 @@ msgid "" " %(classname)s\n" msgstr "" -#: ../roundup/mailgw.py:1856 +#: ../roundup/mailgw.py:1860 msgid "not of form [arg=value,value,...;arg=value,value,...]" msgstr "" -#: ../roundup/mlink_expr.py:161 +#: ../roundup/mlink_expr.py:175 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. The " @@ -2809,7 +2917,7 @@ msgid "" "arguments." msgstr "" -#: ../roundup/mlink_expr.py:174 +#: ../roundup/mlink_expr.py:188 #, python-format msgid "" "There was an error searching %(class)s by %(attr)s using: %(opcodes)s. There " @@ -2817,206 +2925,207 @@ msgid "" "are: %(stack)s" msgstr "" -#: ../roundup/pygettext.py:400 +#: ../roundup/pygettext.py:398 ../roundup/pygettext.py:463 #, python-format msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:456 +#: ../roundup/pygettext.py:454 ../roundup/pygettext.py:519 #, python-format msgid "# File: %(filename)s, line: %(lineno)d" msgstr "" -#: ../roundup/pygettext.py:463 +#: ../roundup/pygettext.py:461 ../roundup/pygettext.py:526 #, python-format msgid " %(filename)s:%(lineno)d" msgstr "" -#: ../roundup/pygettext.py:539 +#: ../roundup/pygettext.py:537 ../roundup/pygettext.py:602 #, fuzzy, python-format msgid "Invalid value for --style: %s" msgstr "無效登錄" -#: ../roundup/pygettext.py:547 +#: ../roundup/pygettext.py:545 ../roundup/pygettext.py:610 #, python-format msgid "pygettext.py (xgettext for Python) %s" msgstr "" -#: ../roundup/pygettext.py:553 +#: ../roundup/pygettext.py:551 ../roundup/pygettext.py:616 #, python-format msgid "--width argument must be an integer: %s" msgstr "" -#: ../roundup/pygettext.py:581 +#: ../roundup/pygettext.py:575 ../roundup/pygettext.py:640 #, python-format msgid "Can't read --exclude-file: %s" msgstr "" -#: ../roundup/pygettext.py:600 +#: ../roundup/pygettext.py:594 ../roundup/pygettext.py:659 msgid "Reading standard input" msgstr "" -#: ../roundup/pygettext.py:605 +#: ../roundup/pygettext.py:599 ../roundup/pygettext.py:664 #, python-format msgid "Working on %s" msgstr "" -#: ../roundup/pygettext.py:639 +#: ../roundup/pygettext.py:633 msgid "a unicode string" msgstr "" -#: ../roundup/pygettext.py:641 +#: ../roundup/pygettext.py:635 ../roundup/pygettext.py:700 #, python-format msgid "*** Seen unexpected token \"%(token)s\"" msgstr "" -#: ../roundup/pygettext.py:642 +#: ../roundup/pygettext.py:636 ../roundup/pygettext.py:701 msgid "morethanonestring" msgstr "" -#: ../roundup/rest.py:417 +#: ../roundup/rest.py:412 #, python-format msgid "Method %(m)s not allowed. Allowed: %(a)s" msgstr "" -#: ../roundup/rest.py:964 +#: ../roundup/rest.py:968 #, python-format msgid "" "Page size %(page_size)s must be less than admin limit on query result size: " "%(max_size)s." msgstr "" -#: ../roundup/rest.py:1211 +#: ../roundup/rest.py:1215 #, fuzzy, python-format msgid "Invalid attribute %s" msgstr "無效登錄" -#: ../roundup/rest.py:2199 +#: ../roundup/rest.py:2203 #, python-format msgid "Api rate limits exceeded. Please wait: %s seconds." msgstr "" -#: ../roundup/rest.py:2284 +#: ../roundup/rest.py:2360 #, python-format msgid "" "Content type '%(requested)s' requested in URL is not available.\n" "Acceptable types: %(acceptable)s\n" msgstr "" -#: ../roundup/rest.py:2306 +#: ../roundup/rest.py:2382 #, python-format msgid "" "Unable to parse Accept Header. %(error)s. Acceptable types: */*, " "%(acceptable_types)s" msgstr "" -#: ../roundup/rest.py:2378 ../roundup/rest.py:2603 ../roundup/rest.py:2378:2603 +#: ../roundup/rest.py:2440 ../roundup/rest.py:2658 ../roundup/rest.py:2440:2658 #, python-format msgid "" "Unrecognized api version: %s. See /rest without specifying api version for " "supported versions." msgstr "" -#: ../roundup/rest.py:2413 ../roundup/rest.py:2424 ../roundup/rest.py:2413:2424 +#: ../roundup/rest.py:2479 #, python-format msgid "" "Requested content type(s) '%(requested)s' not available.\n" -"Acceptable mime types are: */*, %(acceptable)s" +"Acceptable mime types are: %(acceptable)s" msgstr "" -#: ../roundup/rest.py:2702 +#: ../roundup/rest.py:2757 msgid "" "Internal error while formatting response.\n" "accept_mime_type is not defined. This should\n" "never happen\n" msgstr "" -#: ../roundup/roundupdb.py:140 +#: ../roundup/roundupdb.py:138 #, python-format msgid "Username '%s' already exists." msgstr "" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "files" msgstr "文件" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "messages" msgstr "信息" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "nosy" msgstr "雜事" -#: ../roundup/roundupdb.py:224 +#: ../roundup/roundupdb.py:221 msgid "superseder" msgstr "延期" -#: ../roundup/roundupdb.py:224 +#. noqa: B018 +#: ../roundup/roundupdb.py:221 msgid "title" msgstr "標題" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "assignedto" msgstr "分配給" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 #, fuzzy msgid "keyword" msgstr "關鍵字" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "priority" msgstr "優先級" -#: ../roundup/roundupdb.py:225 +#: ../roundup/roundupdb.py:222 msgid "status" msgstr "狀態" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "activity" msgstr "活躍度" #. following properties are common for all hyperdb classes #. they are listed here to keep things in one place -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "actor" msgstr "執行人" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creation" msgstr "建立" -#: ../roundup/roundupdb.py:228 +#: ../roundup/roundupdb.py:225 msgid "creator" msgstr "建立者" -#: ../roundup/roundupdb.py:447 +#: ../roundup/roundupdb.py:443 #, python-format msgid "No key for \"%(adr)s\" in keyring" msgstr "" -#: ../roundup/roundupdb.py:525 +#: ../roundup/roundupdb.py:521 #, python-format msgid "New submission from %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:528 +#: ../roundup/roundupdb.py:524 #, python-format msgid "%(authname)s%(authaddr)s added the comment:" msgstr "" -#: ../roundup/roundupdb.py:531 +#: ../roundup/roundupdb.py:527 #, python-format msgid "Change by %(authname)s%(authaddr)s:" msgstr "" -#: ../roundup/roundupdb.py:550 +#: ../roundup/roundupdb.py:546 #, python-format msgid "File '%(filename)s' not attached - you can download it from %(link)s." msgstr "" -#: ../roundup/roundupdb.py:925 +#: ../roundup/roundupdb.py:916 #, python-format msgid "" "\n" @@ -3038,7 +3147,7 @@ msgstr "" msgid "Enter directory path to create demo tracker [%s]: " msgstr "輸入目錄來建立演示tracker [%s]:" -#: ../roundup/scripts/roundup_gettext.py:33 +#: ../roundup/scripts/roundup_gettext.py:29 msgid "" "\n" "Extracting translatable strings only from html templates.\n" @@ -3047,37 +3156,37 @@ msgid "" "The 'polib' module can be installed with pip.\n" msgstr "" -#: ../roundup/scripts/roundup_gettext.py:71 +#: ../roundup/scripts/roundup_gettext.py:67 #, python-format msgid "Usage: %(program)s " msgstr "" -#: ../roundup/scripts/roundup_gettext.py:89 +#: ../roundup/scripts/roundup_gettext.py:85 #, python-format msgid "No tracker templates found in directory %s" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:182 +#: ../roundup/scripts/roundup_mailgw.py:185 msgid "" "\n" "Error: The instance home must be specified" msgstr "" -#: ../roundup/scripts/roundup_mailgw.py:200 +#: ../roundup/scripts/roundup_mailgw.py:203 #, fuzzy msgid "" "\n" "Error: not enough source specification information" msgstr "錯誤:沒有足夠的源協議資訊" -#: ../roundup/scripts/roundup_mailgw.py:231 +#: ../roundup/scripts/roundup_mailgw.py:239 #, fuzzy, python-format msgid "" "\n" "Error: %s specification not valid" msgstr "錯誤:pop協議無效" -#: ../roundup/scripts/roundup_mailgw.py:254 +#: ../roundup/scripts/roundup_mailgw.py:262 #, fuzzy msgid "" "\n" @@ -3112,7 +3221,7 @@ msgid "" " '-----END CERTIFICATE-----' markers?" msgstr "" -#: ../roundup/scripts/roundup_server.py:354 +#: ../roundup/scripts/roundup_server.py:372 msgid "" "Roundup trackers index\n" "

                                              Roundup trackers index

                                                \n" @@ -3120,58 +3229,58 @@ msgstr "" "Roundup tracker 索引\n" "

                                                Roundup tracker 索引

                                                  \n" -#: ../roundup/scripts/roundup_server.py:602 +#: ../roundup/scripts/roundup_server.py:626 #, fuzzy, python-format msgid "Error: %(type)s: %(value)s" msgstr "%(key)s: %(value)s (關鍵屬性)" -#: ../roundup/scripts/roundup_server.py:614 +#: ../roundup/scripts/roundup_server.py:638 msgid "WARNING: ignoring \"-g\" argument, not root" msgstr "警告:忽略 \"-g\" 參數,不是 root" -#: ../roundup/scripts/roundup_server.py:620 +#: ../roundup/scripts/roundup_server.py:644 msgid "Can't change groups - no grp module" msgstr "不能修改組 - 無 grp 模塊" -#: ../roundup/scripts/roundup_server.py:629 +#: ../roundup/scripts/roundup_server.py:653 #, python-format msgid "Group %(group)s doesn't exist" msgstr "組 %(group)s 不存在" -#: ../roundup/scripts/roundup_server.py:641 +#: ../roundup/scripts/roundup_server.py:665 msgid "Can't run as root!" msgstr "不能以 root 運行!" -#: ../roundup/scripts/roundup_server.py:644 +#: ../roundup/scripts/roundup_server.py:668 msgid "WARNING: ignoring \"-u\" argument, not root" msgstr "警告:忽略 \"-u\" 參數,不是 root" -#: ../roundup/scripts/roundup_server.py:650 +#: ../roundup/scripts/roundup_server.py:674 msgid "Can't change users - no pwd module" msgstr "不能修改用戶 - 無 pwd 模塊" -#: ../roundup/scripts/roundup_server.py:659 +#: ../roundup/scripts/roundup_server.py:683 #, python-format msgid "User %(user)s doesn't exist" msgstr "用戶 %(user)s 不存在" -#: ../roundup/scripts/roundup_server.py:871 +#: ../roundup/scripts/roundup_server.py:895 #, python-format msgid "Multiprocess mode \"%s\" is not available, switching to single-process" msgstr "" -#: ../roundup/scripts/roundup_server.py:899 +#: ../roundup/scripts/roundup_server.py:923 #, python-format msgid "Unable to bind to port %s, port already in use." msgstr "無法綁定到端口 %s, 端口已經被佔用。" -#: ../roundup/scripts/roundup_server.py:903 +#: ../roundup/scripts/roundup_server.py:927 #, 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:982 +#: ../roundup/scripts/roundup_server.py:1006 #, fuzzy msgid "" " -c Windows Service options.\n" @@ -3188,7 +3297,7 @@ msgstr "" " 變量上配置一個tracker。這個選項與其經選項是互斥的。打入\n" " \"roundup-server -c help\" 來瞭解Windows服務的規範。" -#: ../roundup/scripts/roundup_server.py:989 +#: ../roundup/scripts/roundup_server.py:1013 #, fuzzy msgid "" " -u runs the Roundup web server as this UID\n" @@ -3204,7 +3313,7 @@ msgstr "" "去。\n" " 如果使用了 -d 選項,則 -l 選項 *必須* 要指定。" -#: ../roundup/scripts/roundup_server.py:997 +#: ../roundup/scripts/roundup_server.py:1021 #, fuzzy, python-format msgid "" "\n" @@ -3306,24 +3415,24 @@ msgstr "" " 意數量的 name=home 對。要確保 name 部分不能包括任何非url安全的\n" " 字符,像空格,因為它們會把IE搞亂。\n" -#: ../roundup/scripts/roundup_server.py:1177 +#: ../roundup/scripts/roundup_server.py:1201 msgid "Instances must be name=home" msgstr "實例必須是 實例名=實例路徑" -#: ../roundup/scripts/roundup_server.py:1191 +#: ../roundup/scripts/roundup_server.py:1215 #, python-format msgid "Configuration saved to %s" msgstr "配置保存到 %s" -#: ../roundup/scripts/roundup_server.py:1206 +#: ../roundup/scripts/roundup_server.py:1230 msgid "If you specify a PID file you must use -l or -L." msgstr "" -#: ../roundup/scripts/roundup_server.py:1212 +#: ../roundup/scripts/roundup_server.py:1236 msgid "Sorry, you can't run the server as a daemon on this Operating System" msgstr "抱歉,在這個操作系統上不能以守護進程的方式來運行服務" -#: ../roundup/scripts/roundup_server.py:1232 +#: ../roundup/scripts/roundup_server.py:1256 #, python-format msgid "Roundup server started on %(HOST)s:%(PORT)s" msgstr "Roundup server 啟動於 %(HOST)s:%(PORT)s" @@ -3474,13 +3583,13 @@ msgstr "<< 向上" #: ../share/roundup/templates/classic/html/_generic.help.html:53 #: ../share/roundup/templates/classic/html/help.html:28 -#: ../share/roundup/templates/classic/html/issue.index.html:88 +#: ../share/roundup/templates/classic/html/issue.index.html:91 #: ../share/roundup/templates/classic/html/user.index.html:90 #: ../share/roundup/templates/devel/html/_generic.help.html:54 -#: ../share/roundup/templates/devel/html/bug.index.html:102 +#: ../share/roundup/templates/devel/html/bug.index.html:105 #: ../share/roundup/templates/devel/html/help.html:57 #: ../share/roundup/templates/devel/html/milestone.index.html:67 -#: ../share/roundup/templates/devel/html/task.index.html:93 +#: ../share/roundup/templates/devel/html/task.index.html:96 #: ../share/roundup/templates/devel/html/user.index.html:84 #: ../share/roundup/templates/minimal/html/_generic.help.html:53 #: ../share/roundup/templates/responsive/html/_generic.help.html:54 @@ -3491,13 +3600,13 @@ msgstr "${start}..${end} 全部 ${total}" #: ../share/roundup/templates/classic/html/_generic.help.html:57 #: ../share/roundup/templates/classic/html/help.html:32 -#: ../share/roundup/templates/classic/html/issue.index.html:91 +#: ../share/roundup/templates/classic/html/issue.index.html:94 #: ../share/roundup/templates/classic/html/user.index.html:93 #: ../share/roundup/templates/devel/html/_generic.help.html:58 -#: ../share/roundup/templates/devel/html/bug.index.html:105 +#: ../share/roundup/templates/devel/html/bug.index.html:108 #: ../share/roundup/templates/devel/html/help.html:61 #: ../share/roundup/templates/devel/html/milestone.index.html:70 -#: ../share/roundup/templates/devel/html/task.index.html:96 +#: ../share/roundup/templates/devel/html/task.index.html:99 #: ../share/roundup/templates/devel/html/user.index.html:87 #: ../share/roundup/templates/minimal/html/_generic.help.html:57 #: ../share/roundup/templates/responsive/html/_generic.help.html:58 @@ -3610,6 +3719,43 @@ msgid "" "VERY long)" msgstr "" +#: ../share/roundup/templates/classic/html/_generic.reauth.html:2 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:2 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:2 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:2 +#, fuzzy +msgid "Authorize - ${tracker}" +msgstr "文件列表 - ${tracker}" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:4 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:4 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:4 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:4 +#, fuzzy +msgid "Authorize Change" +msgstr "提交變動" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:13 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:13 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:13 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:13 +msgid "The action you requested needs to be authorized." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:15 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:15 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:15 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:15 +msgid "Please enter your password to continue with your change." +msgstr "" + +#: ../share/roundup/templates/classic/html/_generic.reauth.html:21 +#: ../share/roundup/templates/devel/html/_generic.reauth.html:21 +#: ../share/roundup/templates/minimal/html/_generic.reauth.html:21 +#: ../share/roundup/templates/responsive/html/_generic.reauth.html:21 +msgid " Authorize Change " +msgstr "" + #: ../share/roundup/templates/classic/html/file.index.html:4 #: ../share/roundup/templates/devel/html/file.index.html:3 #: ../share/roundup/templates/responsive/html/file.index.html:3 @@ -3821,53 +3967,53 @@ msgstr "建立者" msgid "Assigned To" msgstr "分配給" -#: ../share/roundup/templates/classic/html/issue.index.html:104 +#: ../share/roundup/templates/classic/html/issue.index.html:110 msgid "Download as CSV" msgstr "以CSV格式下載" -#: ../share/roundup/templates/classic/html/issue.index.html:114 +#: ../share/roundup/templates/classic/html/issue.index.html:120 msgid "Sort on:" msgstr "排序按:" -#: ../share/roundup/templates/classic/html/issue.index.html:118 -#: ../share/roundup/templates/classic/html/issue.index.html:139 -#: ../share/roundup/templates/devel/html/bug.index.html:155 +#: ../share/roundup/templates/classic/html/issue.index.html:124 +#: ../share/roundup/templates/classic/html/issue.index.html:145 +#: ../share/roundup/templates/devel/html/bug.index.html:161 #: ../share/roundup/templates/devel/html/milestone.index.html:120 -#: ../share/roundup/templates/devel/html/task.index.html:146 -#: ../share/roundup/templates/responsive/html/bug.index.html:143 +#: ../share/roundup/templates/devel/html/task.index.html:152 +#: ../share/roundup/templates/responsive/html/bug.index.html:149 #: ../share/roundup/templates/responsive/html/milestone.index.html:118 -#: ../share/roundup/templates/responsive/html/task.index.html:138 +#: ../share/roundup/templates/responsive/html/task.index.html:144 msgid "- nothing -" msgstr "- 無 -" -#: ../share/roundup/templates/classic/html/issue.index.html:126 -#: ../share/roundup/templates/classic/html/issue.index.html:147 -#: ../share/roundup/templates/devel/html/bug.index.html:163 +#: ../share/roundup/templates/classic/html/issue.index.html:132 +#: ../share/roundup/templates/classic/html/issue.index.html:153 +#: ../share/roundup/templates/devel/html/bug.index.html:169 #: ../share/roundup/templates/devel/html/milestone.index.html:128 -#: ../share/roundup/templates/devel/html/task.index.html:154 -#: ../share/roundup/templates/responsive/html/bug.index.html:151 +#: ../share/roundup/templates/devel/html/task.index.html:160 +#: ../share/roundup/templates/responsive/html/bug.index.html:157 #: ../share/roundup/templates/responsive/html/milestone.index.html:126 -#: ../share/roundup/templates/responsive/html/task.index.html:146 +#: ../share/roundup/templates/responsive/html/task.index.html:152 msgid "Descending:" msgstr "降序:" -#: ../share/roundup/templates/classic/html/issue.index.html:135 -#: ../share/roundup/templates/devel/html/bug.index.html:151 +#: ../share/roundup/templates/classic/html/issue.index.html:141 +#: ../share/roundup/templates/devel/html/bug.index.html:157 #: ../share/roundup/templates/devel/html/milestone.index.html:116 -#: ../share/roundup/templates/devel/html/task.index.html:142 -#: ../share/roundup/templates/responsive/html/bug.index.html:139 +#: ../share/roundup/templates/devel/html/task.index.html:148 +#: ../share/roundup/templates/responsive/html/bug.index.html:145 #: ../share/roundup/templates/responsive/html/milestone.index.html:114 -#: ../share/roundup/templates/responsive/html/task.index.html:134 +#: ../share/roundup/templates/responsive/html/task.index.html:140 msgid "Group on:" msgstr "分組:" -#: ../share/roundup/templates/classic/html/issue.index.html:154 -#: ../share/roundup/templates/devel/html/bug.index.html:170 +#: ../share/roundup/templates/classic/html/issue.index.html:160 +#: ../share/roundup/templates/devel/html/bug.index.html:176 #: ../share/roundup/templates/devel/html/milestone.index.html:135 -#: ../share/roundup/templates/devel/html/task.index.html:161 -#: ../share/roundup/templates/responsive/html/bug.index.html:158 +#: ../share/roundup/templates/devel/html/task.index.html:167 +#: ../share/roundup/templates/responsive/html/bug.index.html:164 #: ../share/roundup/templates/responsive/html/milestone.index.html:133 -#: ../share/roundup/templates/responsive/html/task.index.html:153 +#: ../share/roundup/templates/responsive/html/task.index.html:159 msgid "Redisplay" msgstr "刷新" @@ -3924,7 +4070,7 @@ msgid "Assigned To" msgstr "分配給" #: ../share/roundup/templates/classic/html/issue.item.html:91 -#: ../share/roundup/templates/classic/html/page.html:107 +#: ../share/roundup/templates/classic/html/page.html:102 #: ../share/roundup/templates/devel/html/bug.index.html:38 #: ../share/roundup/templates/minimal/html/page.html:105 #: ../share/roundup/templates/responsive/html/bug.item.html:144 @@ -3960,8 +4106,9 @@ msgstr "" #: ../share/roundup/templates/responsive/html/user.item.html:149 #: ../share/roundup/templates/responsive/html/user.register.html:80 msgid "" -"
                                                  Note:  highlighted  fields are required.
                                                  " +"
                                                  Note:  highlighted  fields are required.
                                                  " msgstr "" "
                                                  注意:  高亮" "  字段是必須的。
                                                  " @@ -4317,8 +4464,8 @@ msgid "Query name**:" msgstr "查詢 名字**" #: ../share/roundup/templates/classic/html/issue.search.html:218 -#: ../share/roundup/templates/classic/html/page.html:42 -#: ../share/roundup/templates/classic/html/page.html:94 +#: ../share/roundup/templates/classic/html/page.html:43 +#: ../share/roundup/templates/classic/html/page.html:91 #: ../share/roundup/templates/classic/html/user.help-search.html:70 #: ../share/roundup/templates/classic/html/user.index.html:38 #: ../share/roundup/templates/devel/html/bug.search.html:297 @@ -4447,18 +4594,22 @@ msgstr "收信人" msgid "Content" msgstr "內容" -#: ../share/roundup/templates/classic/html/page.html:56 +#: ../share/roundup/templates/classic/html/page.html:50 +msgid "Main" +msgstr "" + +#: ../share/roundup/templates/classic/html/page.html:53 #: ../share/roundup/templates/minimal/html/page.html:54 msgid "Your Queries (edit)" msgstr "我的查詢 (編輯)" -#: ../share/roundup/templates/classic/html/page.html:67 +#: ../share/roundup/templates/classic/html/page.html:64 #: ../share/roundup/templates/minimal/html/page.html:65 msgid "Issues" msgstr "問題" -#: ../share/roundup/templates/classic/html/page.html:69 -#: ../share/roundup/templates/classic/html/page.html:109 +#: ../share/roundup/templates/classic/html/page.html:66 +#: ../share/roundup/templates/classic/html/page.html:104 #: ../share/roundup/templates/devel/html/page.html:48 #: ../share/roundup/templates/devel/html/page.html:96 #: ../share/roundup/templates/devel/html/page.html:143 @@ -4470,7 +4621,7 @@ msgstr "問題" msgid "Create New" msgstr "新建" -#: ../share/roundup/templates/classic/html/page.html:71 +#: ../share/roundup/templates/classic/html/page.html:68 #: ../share/roundup/templates/devel/html/page.html:64 #: ../share/roundup/templates/devel/html/page.html:112 #: ../share/roundup/templates/minimal/html/page.html:69 @@ -4479,163 +4630,163 @@ msgstr "新建" msgid "Show Unassigned" msgstr "顯示未分配" -#: ../share/roundup/templates/classic/html/page.html:83 +#: ../share/roundup/templates/classic/html/page.html:80 #: ../share/roundup/templates/minimal/html/page.html:81 msgid "Show All" msgstr "顯示所有" -#: ../share/roundup/templates/classic/html/page.html:95 +#: ../share/roundup/templates/classic/html/page.html:92 #: ../share/roundup/templates/minimal/html/page.html:93 msgid "Show issue:" msgstr "顯示問題:" -#: ../share/roundup/templates/classic/html/page.html:112 +#: ../share/roundup/templates/classic/html/page.html:107 #: ../share/roundup/templates/minimal/html/page.html:110 msgid "Edit Existing" msgstr "編輯已經存在的" -#: ../share/roundup/templates/classic/html/page.html:118 -#: ../share/roundup/templates/devel/html/page.html:224 +#: ../share/roundup/templates/classic/html/page.html:113 +#: ../share/roundup/templates/devel/html/page.html:226 #: ../share/roundup/templates/minimal/html/page.html:116 -#: ../share/roundup/templates/responsive/html/page.html:241 +#: ../share/roundup/templates/responsive/html/page.html:243 msgid "Administration" msgstr "管理" -#: ../share/roundup/templates/classic/html/page.html:120 -#: ../share/roundup/templates/devel/html/page.html:227 +#: ../share/roundup/templates/classic/html/page.html:115 +#: ../share/roundup/templates/devel/html/page.html:229 #: ../share/roundup/templates/minimal/html/page.html:118 -#: ../share/roundup/templates/responsive/html/page.html:244 +#: ../share/roundup/templates/responsive/html/page.html:246 msgid "Class List" msgstr "類別列表" -#: ../share/roundup/templates/classic/html/page.html:124 -#: ../share/roundup/templates/devel/html/page.html:231 +#: ../share/roundup/templates/classic/html/page.html:119 +#: ../share/roundup/templates/devel/html/page.html:233 #: ../share/roundup/templates/minimal/html/page.html:122 -#: ../share/roundup/templates/responsive/html/page.html:248 +#: ../share/roundup/templates/responsive/html/page.html:250 msgid "User List" msgstr "用戶列表" -#: ../share/roundup/templates/classic/html/page.html:126 -#: ../share/roundup/templates/devel/html/page.html:234 +#: ../share/roundup/templates/classic/html/page.html:121 +#: ../share/roundup/templates/devel/html/page.html:236 #: ../share/roundup/templates/minimal/html/page.html:124 -#: ../share/roundup/templates/responsive/html/page.html:251 +#: ../share/roundup/templates/responsive/html/page.html:253 msgid "Add User" msgstr "增加用戶" -#: ../share/roundup/templates/classic/html/page.html:133 -#: ../share/roundup/templates/classic/html/page.html:141 +#: ../share/roundup/templates/classic/html/page.html:128 +#: ../share/roundup/templates/classic/html/page.html:139 #: ../share/roundup/templates/devel/html/page.html:164 -#: ../share/roundup/templates/devel/html/page.html:172 +#: ../share/roundup/templates/devel/html/page.html:174 #: ../share/roundup/templates/minimal/html/page.html:131 -#: ../share/roundup/templates/minimal/html/page.html:139 -#: ../share/roundup/templates/responsive/html/page.html:188 +#: ../share/roundup/templates/minimal/html/page.html:142 +#: ../share/roundup/templates/responsive/html/page.html:190 msgid "Login" msgstr "登錄" -#: ../share/roundup/templates/classic/html/page.html:138 -#: ../share/roundup/templates/devel/html/page.html:171 -#: ../share/roundup/templates/minimal/html/page.html:138 +#: ../share/roundup/templates/classic/html/page.html:136 +#: ../share/roundup/templates/devel/html/page.html:173 +#: ../share/roundup/templates/minimal/html/page.html:141 msgid "Remember me?" msgstr "" -#: ../share/roundup/templates/classic/html/page.html:149 +#: ../share/roundup/templates/classic/html/page.html:147 #: ../share/roundup/templates/classic/html/user.register.html:68 -#: ../share/roundup/templates/devel/html/page.html:182 +#: ../share/roundup/templates/devel/html/page.html:184 #: ../share/roundup/templates/devel/html/user.register.html:75 -#: ../share/roundup/templates/minimal/html/page.html:147 +#: ../share/roundup/templates/minimal/html/page.html:150 #: ../share/roundup/templates/minimal/html/user.register.html:65 -#: ../share/roundup/templates/responsive/html/page.html:200 +#: ../share/roundup/templates/responsive/html/page.html:202 #: ../share/roundup/templates/responsive/html/user.register.html:74 msgid "Register" msgstr "註冊" -#: ../share/roundup/templates/classic/html/page.html:152 -#: ../share/roundup/templates/devel/html/page.html:187 -#: ../share/roundup/templates/minimal/html/page.html:150 -#: ../share/roundup/templates/responsive/html/page.html:205 +#: ../share/roundup/templates/classic/html/page.html:150 +#: ../share/roundup/templates/devel/html/page.html:189 +#: ../share/roundup/templates/minimal/html/page.html:153 +#: ../share/roundup/templates/responsive/html/page.html:207 msgid "Lost your login?" msgstr "忘記你的登入口令了?" -#: ../share/roundup/templates/classic/html/page.html:157 -#: ../share/roundup/templates/minimal/html/page.html:155 +#: ../share/roundup/templates/classic/html/page.html:155 +#: ../share/roundup/templates/minimal/html/page.html:158 msgid "Hello, ${user}" msgstr "追蹤,${user}" -#: ../share/roundup/templates/classic/html/page.html:159 +#: ../share/roundup/templates/classic/html/page.html:157 msgid "Your Issues" msgstr "我的問題列表" -#: ../share/roundup/templates/classic/html/page.html:171 -#: ../share/roundup/templates/devel/html/page.html:209 -#: ../share/roundup/templates/minimal/html/page.html:157 -#: ../share/roundup/templates/responsive/html/page.html:226 +#: ../share/roundup/templates/classic/html/page.html:169 +#: ../share/roundup/templates/devel/html/page.html:211 +#: ../share/roundup/templates/minimal/html/page.html:160 +#: ../share/roundup/templates/responsive/html/page.html:228 msgid "Your Details" msgstr "我的資訊" -#: ../share/roundup/templates/classic/html/page.html:173 -#: ../share/roundup/templates/devel/html/page.html:212 -#: ../share/roundup/templates/minimal/html/page.html:159 -#: ../share/roundup/templates/responsive/html/page.html:229 +#: ../share/roundup/templates/classic/html/page.html:171 +#: ../share/roundup/templates/devel/html/page.html:214 +#: ../share/roundup/templates/minimal/html/page.html:162 +#: ../share/roundup/templates/responsive/html/page.html:231 msgid "Logout" msgstr "註銷" -#: ../share/roundup/templates/classic/html/page.html:177 -#: ../share/roundup/templates/minimal/html/page.html:163 +#: ../share/roundup/templates/classic/html/page.html:175 +#: ../share/roundup/templates/minimal/html/page.html:166 msgid "Help" msgstr "說明" -#: ../share/roundup/templates/classic/html/page.html:178 -#: ../share/roundup/templates/minimal/html/page.html:164 +#: ../share/roundup/templates/classic/html/page.html:176 +#: ../share/roundup/templates/minimal/html/page.html:167 msgid "Roundup docs" msgstr "Roundup文檔" -#: ../share/roundup/templates/classic/html/page.html:189 -#: ../share/roundup/templates/devel/html/page.html:254 -#: ../share/roundup/templates/minimal/html/page.html:175 -#: ../share/roundup/templates/responsive/html/page.html:269 +#: ../share/roundup/templates/classic/html/page.html:188 +#: ../share/roundup/templates/devel/html/page.html:256 +#: ../share/roundup/templates/minimal/html/page.html:178 +#: ../share/roundup/templates/responsive/html/page.html:271 msgid "clear this message" msgstr "" -#: ../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: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/classic/html/page.html:252 +#: ../share/roundup/templates/classic/html/page.html:265 +#: ../share/roundup/templates/classic/html/page.html:283 +#: ../share/roundup/templates/classic/html/page.html:297 #: ../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/devel/html/page.html:364 +#: ../share/roundup/templates/minimal/html/page.html:243 +#: ../share/roundup/templates/minimal/html/page.html:258 +#: ../share/roundup/templates/minimal/html/page.html:272 #: ../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 +#: ../share/roundup/templates/responsive/html/page.html:379 +msgid "don't care" +msgstr "不用關心" + +#: ../share/roundup/templates/classic/html/page.html:254 +#: ../share/roundup/templates/classic/html/page.html:267 +#: ../share/roundup/templates/classic/html/page.html:285 +#: ../share/roundup/templates/classic/html/page.html:298 +#: ../share/roundup/templates/devel/html/page.html:321 +#: ../share/roundup/templates/devel/html/page.html:334 +#: ../share/roundup/templates/devel/html/page.html:352 +#: ../share/roundup/templates/devel/html/page.html:365 +#: ../share/roundup/templates/minimal/html/page.html:245 +#: ../share/roundup/templates/minimal/html/page.html:260 +#: ../share/roundup/templates/minimal/html/page.html:273 +#: ../share/roundup/templates/responsive/html/page.html:336 +#: ../share/roundup/templates/responsive/html/page.html:349 +#: ../share/roundup/templates/responsive/html/page.html:367 +#: ../share/roundup/templates/responsive/html/page.html:380 msgid "------------" msgstr "" -#: ../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 +#: ../share/roundup/templates/classic/html/page.html:330 +#: ../share/roundup/templates/devel/html/page.html:393 +#: ../share/roundup/templates/minimal/html/page.html:301 +#: ../share/roundup/templates/responsive/html/page.html:408 msgid "no value" msgstr "無值" @@ -5297,8 +5448,8 @@ msgstr "" #: ../share/roundup/templates/responsive/html/task.item.html:277 #, fuzzy msgid "" -"Created on ${creation} by ${creator}, last changed " -"${activity} by ${actor}." +"Created on ${creation} by ${creator}, last changed " +"${activity} by ${actor}." msgstr "" "在 ${creation}${creator} 建立,最後由 ${actor} 修改" "為 ${activity}。" @@ -5540,22 +5691,22 @@ msgstr "" msgid "User" msgstr "增加用戶" -#: ../share/roundup/templates/devel/html/page.html:196 -#: ../share/roundup/templates/responsive/html/page.html:213 +#: ../share/roundup/templates/devel/html/page.html:198 +#: ../share/roundup/templates/responsive/html/page.html:215 #, fuzzy msgid "Bugs assigned to you" msgstr "分配給我" -#: ../share/roundup/templates/devel/html/page.html:216 -#: ../share/roundup/templates/responsive/html/page.html:233 +#: ../share/roundup/templates/devel/html/page.html:218 +#: ../share/roundup/templates/responsive/html/page.html:235 #, fuzzy msgid "" -"Your Queries (edit)" +"Your Queries (edit)" msgstr "我的查詢 (編輯)" -#: ../share/roundup/templates/devel/html/page.html:237 -#: ../share/roundup/templates/responsive/html/page.html:254 +#: ../share/roundup/templates/devel/html/page.html:239 +#: ../share/roundup/templates/responsive/html/page.html:256 #, fuzzy msgid "Edit Keywords" msgstr "存在的關鍵字" @@ -5720,27 +5871,27 @@ msgid "Please log in or register." msgstr "請登錄或註冊。" #: ../share/roundup/templates/responsive/html/bug.index.html:84 -#: ../share/roundup/templates/responsive/html/bug.index.html:89 +#: ../share/roundup/templates/responsive/html/bug.index.html:92 #: ../share/roundup/templates/responsive/html/milestone.index.html:58 #: ../share/roundup/templates/responsive/html/milestone.index.html:63 #: ../share/roundup/templates/responsive/html/task.index.html:78 -#: ../share/roundup/templates/responsive/html/task.index.html:83 +#: ../share/roundup/templates/responsive/html/task.index.html:86 msgid "Previous" msgstr "" -#: ../share/roundup/templates/responsive/html/bug.index.html:93 +#: ../share/roundup/templates/responsive/html/bug.index.html:96 #: ../share/roundup/templates/responsive/html/milestone.index.html:67 -#: ../share/roundup/templates/responsive/html/task.index.html:87 +#: ../share/roundup/templates/responsive/html/task.index.html:90 #, fuzzy msgid "${start}..${end} out of ${total}" msgstr "${start}..${end} 全部 ${total}" -#: ../share/roundup/templates/responsive/html/bug.index.html:96 -#: ../share/roundup/templates/responsive/html/bug.index.html:101 +#: ../share/roundup/templates/responsive/html/bug.index.html:99 +#: ../share/roundup/templates/responsive/html/bug.index.html:107 #: ../share/roundup/templates/responsive/html/milestone.index.html:70 #: ../share/roundup/templates/responsive/html/milestone.index.html:75 -#: ../share/roundup/templates/responsive/html/task.index.html:90 -#: ../share/roundup/templates/responsive/html/task.index.html:95 +#: ../share/roundup/templates/responsive/html/task.index.html:93 +#: ../share/roundup/templates/responsive/html/task.index.html:101 msgid "Next" msgstr "" diff --git a/roundup/__init__.py b/roundup/__init__.py index 2e14b388a..e9a9c5cef 100644 --- a/roundup/__init__.py +++ b/roundup/__init__.py @@ -67,6 +67,6 @@ ''' __docformat__ = 'restructuredtext' -__version__ = '2.5.0' +__version__ = '2.6.0' # vim: set filetype=python ts=4 sw=4 et si diff --git a/roundup/admin.py b/roundup/admin.py index 5fd1394bb..b6a68a7a9 100644 --- a/roundup/admin.py +++ b/roundup/admin.py @@ -20,8 +20,6 @@ """Administration commands for maintaining Roundup trackers. """ -from __future__ import print_function - __docformat__ = 'restructuredtext' import csv import getopt @@ -34,11 +32,11 @@ import roundup.instance from roundup import __version__ as roundup_version -from roundup import date, hyperdb, init, password, token_r -from roundup.anypy import scandir_ +from roundup import date, hyperdb, init, password, support, token_r from roundup.anypy.my_input import my_input from roundup.anypy.strings import repr_export from roundup.configuration import ( + ConfigurationError, CoreConfig, NoConfigError, Option, @@ -49,7 +47,7 @@ ) from roundup.exceptions import UsageError from roundup.i18n import _, get_translation -from roundup import support +from roundup.logcontext import gen_trace_id, set_processName, store_trace_reason try: from UserDict import UserDict @@ -57,6 +55,18 @@ from collections import UserDict +def _safe_os_getlogin(): + """Run os.getlogin handling OSError exception. + + Used when calling @store_trace_reason to add username to string. + """ + + try: + return os.getlogin() + except OSError: + return "--unknown--" + + class CommandDict(UserDict): """Simple dictionary that lets us do lookups using partial keys. @@ -93,6 +103,13 @@ class AdminTool: Additional help may be supplied by help_*() methods. """ + # import here to make AdminTool.readline accessible or + # mockable from tests. + try: + import readline # noqa: I001, PLC0415 + except ImportError: + readline = None + # Make my_input a property to allow overriding in testing. # my_input is imported in other places, so just set it from # the imported value rather than moving def here. @@ -243,7 +260,7 @@ def help_commands(self): if seq in h: commands.append(' ' + h.split(seq, 1)[1].lstrip()) break - + commands.sort() commands.append(_( """Commands may be abbreviated as long as the abbreviation @@ -1263,28 +1280,29 @@ class colon_separated(csv.excel): delimiter = ':' # import all the files - for dir_entry in os.scandir(import_dir): - filename = dir_entry.name - classname, ext = os.path.splitext(filename) - # we only care about CSV files - if ext != '.csv' or classname.endswith('-journals'): - continue + with os.scandir(import_dir) as dirs: + for dir_entry in dirs: + filename = dir_entry.name + classname, ext = os.path.splitext(filename) + # we only care about CSV files + if ext != '.csv' or classname.endswith('-journals'): + continue - cl = self.get_class(classname) + cl = self.get_class(classname) - maxid = self.import_class(dir_entry.path, colon_separated, cl, - import_dir, import_files) + maxid = self.import_class(dir_entry.path, colon_separated, cl, + import_dir, import_files) - # import the journals - with open(os.path.join(import_dir, classname + '-journals.csv'), 'r') as f: - reader = csv.reader(f, colon_separated, lineterminator='\n') - cl.import_journals(reader) + # import the journals + with open(os.path.join(import_dir, classname + '-journals.csv'), 'r') as f: + reader = csv.reader(f, colon_separated, lineterminator='\n') + cl.import_journals(reader) - # (print to sys.stdout here to allow tests to squash it .. ugh) - print('setting', classname, maxid + 1, file=sys.stdout) + # (print to sys.stdout here to allow tests to squash it .. ugh) + print('setting', classname, maxid + 1, file=sys.stdout) - # set the id counter - self.db.setid(classname, str(maxid + 1)) + # set the id counter + self.db.setid(classname, str(maxid + 1)) self.db_uncommitted = True return 0 @@ -1309,6 +1327,7 @@ def import_class(self, filepath, csv_format_class, hyperdb_class, file_props = None # loop through the file and create a node for each entry for n, r in enumerate(reader): + # read the file header if file_props is None: file_props = r continue @@ -1322,10 +1341,11 @@ def import_class(self, filepath, csv_format_class, hyperdb_class, nodeid = hyperdb_class.import_list(file_props, r) if hasattr(hyperdb_class, 'import_files') and import_files: hyperdb_class.import_files(import_dir, nodeid) - maxid = max(maxid, int(nodeid)) + + maxid = max(maxid, int(nodeid)) - # (print to sys.stdout here to allow tests to squash it .. ugh) - print(file=sys.stdout) + # (print to sys.stdout here to allow tests to squash it .. ugh) + print(file=sys.stdout) return maxid @@ -1481,18 +1501,10 @@ def do_install(self, tracker_home, args): defns[k] = template_config[k] # install! - init.install(tracker_home, templates[template]['path'], settings=defns) - - # Remove config_ini.ini file from tracker_home (not template dir). - # Ignore file not found - not all templates have - # config_ini.ini files. try: - os.remove(tracker_home + "/config_ini.ini") - except OSError as e: # FileNotFound exception under py3 - if e.errno == 2: - pass - else: - raise + init.install(tracker_home, templates[template]['path'], settings=defns) + except ConfigurationError as e: + raise UsageError(e) print(_(""" --------------------------------------------------------------------------- @@ -1815,6 +1827,115 @@ def do_pragma(self, args): type(self.settings[setting]).__name__) self.settings[setting] = value + # history_length has to be pushed to readline to have any effect. + if setting == "history_length": + self.readline.set_history_length( + self.settings['history_length']) + + def do_readline(self, args): + ''"""Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi' + + Using 'reload' will reload the file ~/.roundup_admin_rlrc. + 'history' will show (and number) all commands in the history. + + You can change input mode using the 'emacs' or 'vi' parameters. + The default is emacs. This is the same as using:: + + readline set editing-mode emacs + + or:: + + readline set editing-mode vi + + Any command that can be placed in a readline .inputrc file can + be executed using the readline command. You can assign + dump-variables to control O using:: + + readline Control-o: dump-variables + + Assigning multi-key values also works. + + pyreadline3 support on windows: + + Mode switching doesn't work, emacs only. + + Binding single key commands works with:: + + readline Control-w: history-search-backward + + Multiple key sequences don't work. + + Setting values may work. Difficult to tell because the library + has no way to view the live settings. + + """ + + # TODO: allow history 20 # most recent 20 commands + # history 100-200 # show commands 100-200 + + if not self.readline: + print(_("Readline support is not available.")) + return + # The if test allows pyreadline3 settings like: + # bind_exit_key("Control-z") get through to + # parse_and_bind(). It is not obvious that this form of + # command is supported. Pyreadline3 is supposed to parse + # readline style commands, so we use those for emacs/vi. + # Trying set-mode(...) as in the pyreadline3 init file + # didn't work in testing. + + if len(args) == 1 and args[0].find('(') == -1: + if args[0] == "vi": + self.readline.parse_and_bind("set editing-mode vi") + print(_("Enabled vi mode.")) + elif args[0] == "emacs": + self.readline.parse_and_bind("set editing-mode emacs") + print(_("Enabled emacs mode.")) + elif args[0] == "history": + history_size = self.readline.get_current_history_length() + print("history size", history_size) + print('\n'.join([ + "%3d %s" % ((i + 1), + self.readline.get_history_item(i + 1)) + for i in range(history_size) + ])) + elif args[0] == "reload": + try: + # readline is a singleton. In testing previous + # tests using read_init_file are loading from ~ + # not the test directory because it doesn't + # matter. But for reload we want to test with the + # init file under the test directory. Calling + # read_init_file() calls with the ~/.. init + # location and I can't seem to reset it + # or the readline state. + # So call with explicit file here. + self.readline.read_init_file( + self.get_readline_init_file()) + except FileNotFoundError as e: + # If user invoked reload explicitly, report + # if file not found. + # + # DOES NOT WORK with pyreadline3. Exception + # is not raised if file is missing. + # + # Also e.filename is None under cygwin. A + # simple test case does set e.filename + # correctly?? sigh. So I just call + # get_readline_init_file again to get + # filename. + fn = e.filename or self.get_readline_init_file() + print(_("Init file %s not found.") % fn) + else: + print(_("File %s reloaded.") % + self.get_readline_init_file()) + else: + print(_("Unknown readline parameter %s") % args[0]) + return + + self.readline.parse_and_bind(" ".join(args)) + return + designator_re = re.compile('([A-Za-z]+)([0-9]+)$') designator_rng = re.compile('([A-Za-z]+):([0-9]+)-([0-9]+)$') @@ -1968,9 +2089,9 @@ def do_security(self, args): sys.stdout.write(_('New Email users get the Role "%(role)s"\n') % locals()) roles.sort() for _rolename, role in roles: - sys.stdout.write(_('Role "%(name)s":\n') % role.__dict__) + sys.stdout.write(_('Role "%(name)s":\n') % role.props_dict()) for permission in role.permission_list(): - d = permission.__dict__ + d = permission.props_dict() if permission.klass: if permission.properties: sys.stdout.write(_( @@ -2234,11 +2355,17 @@ def do_updateconfig(self, args): self.do_genconfig(args, update=True) def usageError_feedback(self, message, function): - print(_('Error: %s') % message) + print(_('\nError: %s') % message) print() print(function.__doc__) return 1 + @set_processName("roundup-admin") + @gen_trace_id() + @store_trace_reason("admin", extract=( + '"roundup-admin(%s): "' % _safe_os_getlogin() + + "'%s' % args[1][:2]" + )) def run_command(self, args): """Run a single command """ @@ -2365,29 +2492,34 @@ def history_features(self, feature): # setting the bit disables the feature, so use not. return not self.settings['history_features'] & features[feature] + def get_readline_init_file(self): + return os.path.join(os.path.expanduser("~"), + ".roundup_admin_rlrc") + def interactive(self): """Run in an interactive mode """ print(_('Roundup %s ready for input.\nType "help" for help.') % roundup_version) - initfile = os.path.join(os.path.expanduser("~"), - ".roundup_admin_rlrc") + initfile = self.get_readline_init_file() histfile = os.path.join(os.path.expanduser("~"), ".roundup_admin_history") - try: - import readline + if self.readline: + # clear any history that might be left over from caller + # when reusing AdminTool from tests or program. + self.readline.clear_history() try: if self.history_features('load_rc'): - readline.read_init_file(initfile) - except IOError: # FileNotFoundError under python3 + self.readline.read_init_file(initfile) + except FileNotFoundError: # file is optional pass try: if self.history_features('load_history'): - readline.read_history_file(histfile) + self.readline.read_history_file(histfile) except IOError: # FileNotFoundError under python3 # no history file yet pass @@ -2397,36 +2529,94 @@ def interactive(self): # Pragma history_length allows setting on a per # invocation basis at startup if self.settings['history_length'] != -1: - readline.set_history_length( + self.readline.set_history_length( self.settings['history_length']) - except ImportError: - readline = None - print(_('Note: command history and editing not available')) + if hasattr(self.readline, 'backend'): + # FIXME after min 3.13 version; no backend prints pyreadline3 + print(_("Readline enabled using %s.") % self.readline.backend) + else: + print(_("Readline enabled using unknown library.")) + + else: + print(_('Command history and line editing not available')) + + autosave_enabled = sys.stdin.isatty() and sys.stdout.isatty() while 1: try: command = self.my_input('roundup> ') + # clear an input hook in case it was used to prefill + # buffer. + self.readline.set_pre_input_hook() except EOFError: print(_('exit...')) break if not command: continue # noqa: E701 + if command.startswith('!'): # Pull numbered command from history + print_only = command.endswith(":p") + try: + hist_num = int(command[1:]) \ + if not print_only else int(command[1:-2]) + command = self.readline.get_history_item(hist_num) + except ValueError: + # pass the unknown command + pass + else: + if autosave_enabled and \ + hasattr(self.readline, "replace_history_item"): + # history has the !23 input. Replace it if possible. + # replace_history_item not supported by pyreadline3 + # so !23 will show up in history not the command. + self.readline.replace_history_item( + self.readline.get_current_history_length() - 1, + command) + + if print_only: + # fill the edit buffer with the command + # the user selected. + + # from https://stackoverflow.com/questions/8505163/is-it-possible-to-prefill-a-input-in-python-3s-command-line-interface + # This triggers: + # B023 Function definition does not bind loop variable + # `command` + # in ruff. command will be the value of the command + # variable at the time the function is run. + # Not the value at define time. This is ok since + # hook is run before command is changed by the + # return from (readline) input. + def hook(): + self.readline.insert_text(command) # noqa: B023 + self.readline.redisplay() + self.readline.set_pre_input_hook(hook) + # we clear the hook after the next line is read. + continue + + if not autosave_enabled: + # needed to make testing work and also capture + # commands received on stdin from file/other command + # output. Disable saving with pragma on command line: + # -P history_features=2. + self.readline.add_history(command) + try: args = token_r.token_split(command) except ValueError: continue # Ignore invalid quoted token if not args: continue # noqa: E701 - if args[0] in ('quit', 'exit'): break # noqa: E701 + if args[0] in ('q', 'quit', 'exit') and len(args) == 1: + break # noqa: E701 self.run_command(args) # exit.. check for transactions if self.db and self.db_uncommitted: commit = self.my_input(_('There are unsaved changes. Commit them (y/N)? ')) if commit and commit[0].lower() == 'y': - self.db.commit() + self.run_command(["commit"]) # looks like histfile is saved with mode 600 - if readline and self.history_features('save_history'): - readline.write_history_file(histfile) + if self.readline and self.history_features('save_history'): + self.readline.write_history_file(histfile) + return 0 def main(self): # noqa: PLR0912, PLR0911 @@ -2496,7 +2686,7 @@ def main(self): # noqa: PLR0912, PLR0911 self.interactive() else: ret = self.run_command(args) - if self.db: self.db.commit() # noqa: E701 + if self.db: self.run_command(["commit"]) # noqa: E701 return ret finally: if self.db: diff --git a/roundup/anypy/cgi_.py b/roundup/anypy/cgi_.py index 6df75c7fd..72df69762 100644 --- a/roundup/anypy/cgi_.py +++ b/roundup/anypy/cgi_.py @@ -1,7 +1,10 @@ # ruff: noqa: F401 - unused imports +import warnings try: # used for python2 and python 3 < 3.13 - import cgi + with warnings.catch_warnings(): + warnings.filterwarnings('ignore', category=DeprecationWarning) + import cgi from cgi import FieldStorage, MiniFieldStorage except ImportError: # use for python3 >= 3.13 diff --git a/roundup/anypy/cmp_.py b/roundup/anypy/cmp_.py index 5c4f4a679..bcf4d22d7 100644 --- a/roundup/anypy/cmp_.py +++ b/roundup/anypy/cmp_.py @@ -12,7 +12,7 @@ class NoneAndDictComparable(object): # noqa: PLW1641 def __init__(self, value): self.value = value - def __cmp__(self, other): # noqa: PLW3201, PLR0911 + def __cmp__(self, other): # noqa: PLR0911 if not isinstance(other, self.__class__): raise TypeError('not comparable') @@ -26,7 +26,9 @@ def __cmp__(self, other): # noqa: PLW3201, PLR0911 return 1 elif type(self.value) is tuple and type(other.value) is tuple: - for lhs, rhs in zip(self.value, other.value): + # this zip should not have strict=true; length comparison + # used at end handles the unequal value case. + for lhs, rhs in zip(self.value, other.value): # noqa: B905 lhsCmp = NoneAndDictComparable(lhs) rhsCmp = NoneAndDictComparable(rhs) result = lhsCmp.__cmp__(rhsCmp) @@ -72,7 +74,7 @@ def __gt__(self, other): def _test(): - # ruff: noqa: S101, B011, PLC0415, PLR2004 + # ruff: noqa: S101, B011, PLC0415 import sys _py3 = sys.version_info[0] > 2 diff --git a/roundup/anypy/scandir_.py b/roundup/anypy/scandir_.py deleted file mode 100644 index b2a56a715..000000000 --- a/roundup/anypy/scandir_.py +++ /dev/null @@ -1,9 +0,0 @@ -try: - # python 3.5+ - from os import scandir -except ImportError: - # python 2 fallback - import os - - import scandir # pip package - os.scandir = scandir.scandir diff --git a/roundup/anypy/urllib_.py b/roundup/anypy/urllib_.py index 4d867b7c7..ff4462c9f 100644 --- a/roundup/anypy/urllib_.py +++ b/roundup/anypy/urllib_.py @@ -1,11 +1,11 @@ try: # Python 3+ - from urllib.parse import parse_qs, quote, unquote, urlencode, urlparse, urlunparse + from urllib.parse import parse_qs, quote, unquote, urlencode, urlparse, urlsplit, urlunparse from urllib.request import urlopen except ImportError: # Python 2.5-2.7 from urllib import quote, unquote, urlencode # noqa: F401 from urllib2 import urlopen # noqa: F401 - from urlparse import parse_qs, urlparse, urlunparse # noqa: F401 + from urlparse import parse_qs, urlparse, urlsplit, urlunparse # noqa: F401 diff --git a/roundup/anypy/vendored/cgi.py b/roundup/anypy/vendored/cgi.py index caebe57e9..8964ff0da 100755 --- a/roundup/anypy/vendored/cgi.py +++ b/roundup/anypy/vendored/cgi.py @@ -870,7 +870,7 @@ def g(f=f): f() print("

                                                  What follows is a test, not an actual exception:

                                                  ") g() - except: + except Exception: print_exception() print("

                                                  Second try with a small maxlen...

                                                  ") @@ -883,7 +883,7 @@ def g(f=f): print_arguments() print_form(form) print_environ(environ) - except: + except Exception: print_exception() def print_exception(type=None, value=None, tb=None, limit=None): diff --git a/roundup/backends/__init__.py b/roundup/backends/__init__.py index 9d50d284d..d9b291d7c 100644 --- a/roundup/backends/__init__.py +++ b/roundup/backends/__init__.py @@ -76,10 +76,7 @@ def list_backends(): because we do not need to monkey-patch list_backends. ''' - backend_list = [] - for name in 'anydbm', 'mysql', 'sqlite', 'postgresql', 'memorydb': - if have_backend(name): - backend_list.append(name) - return backend_list + all_backends = ('anydbm', 'mysql', 'sqlite', 'postgresql', 'memorydb') + return [name for name in all_backends if have_backend(name)] # vim: set filetype=python sts=4 sw=4 et si : diff --git a/roundup/backends/back_anydbm.py b/roundup/backends/back_anydbm.py index ca02f1717..9369c853c 100644 --- a/roundup/backends/back_anydbm.py +++ b/roundup/backends/back_anydbm.py @@ -759,7 +759,7 @@ def getCachedJournalDB(self, classname): def doSaveJournal(self, classname, nodeid, action, params, creator, creation): # serialise the parameters now if necessary - if isinstance(params, type({})): + if isinstance(params, dict): if action in ('set', 'create'): params = self.serialise(classname, params) @@ -791,7 +791,7 @@ def doSetJournal(self, classname, nodeid, journal): l = [] for nodeid, journaldate, journaltag, action, params in journal: # serialise the parameters now if necessary - if isinstance(params, type({})): + if isinstance(params, dict): if action in ('set', 'create'): params = self.serialise(classname, params) journaldate = journaldate.serialise() @@ -984,7 +984,7 @@ def create_inner(self, **propvalues): (self.classname, newid, key), value) elif isinstance(prop, hyperdb.Password): - if not isinstance(value, password.Password): + if value is not None and not isinstance(value, password.Password): raise TypeError('new property "%s" not a Password' % key) elif isinstance(prop, hyperdb.Date): @@ -1121,7 +1121,7 @@ def get(self, nodeid, propname, default=_marker, cache=1, allow_abort=True): ids = cls.find(**{prop.rev_propname: nodeid}) return ids - if propname not in d: + if propname not in d or d[propname] is None: if default is _marker: if isinstance(prop, hyperdb.Multilink): return [] @@ -1240,10 +1240,10 @@ def set_inner(self, nodeid, **propvalues): if isinstance(prop, hyperdb.Link): link_class = prop.classname # if it isn't a number, it's a key - if value is not None and not isinstance(value, type('')): + if value is not None and not isinstance(value, str): raise ValueError('property "%s" link value be a string' % ( propname)) - if isinstance(value, type('')) and not num_re.match(value): + if isinstance(value, str) and not num_re.match(value): try: value = self.db.classes[link_class].lookup(value) except (TypeError, KeyError): @@ -1344,7 +1344,7 @@ def set_inner(self, nodeid, **propvalues): value) elif isinstance(prop, hyperdb.Password): - if not isinstance(value, password.Password): + if value is not None and not isinstance(value, password.Password): raise TypeError('new property "%s" not a ' 'Password' % propname) propvalues[propname] = value @@ -1590,7 +1590,7 @@ def find(self, **propspec): continue for propname, itemids in propspec.items(): if not isinstance(itemids, dict): - if itemids is None or isinstance(itemids, type("")): + if itemids is None or isinstance(itemids, str): itemids = {itemids: 1} else: itemids = dict.fromkeys(itemids) @@ -2208,11 +2208,11 @@ def export_journals(self): pass elif isinstance(prop, hyperdb.Date): # this is a hack - some dates are stored as strings - if not isinstance(value, type('')): + if not isinstance(value, str): value = value.get_tuple() elif isinstance(prop, hyperdb.Interval): # hack too - some intervals are stored as strings - if not isinstance(value, type('')): + if not isinstance(value, str): value = value.get_tuple() elif isinstance(prop, hyperdb.Password): value = str(value) diff --git a/roundup/backends/blobfiles.py b/roundup/backends/blobfiles.py index 372edcf21..b9dd60ed6 100644 --- a/roundup/backends/blobfiles.py +++ b/roundup/backends/blobfiles.py @@ -1,3 +1,4 @@ +# ruff: noqa: ARG002 ignore **database not used # # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) # This module is free software, and you may redistribute it and/or modify @@ -22,13 +23,12 @@ import os -from roundup.anypy import scandir_ -def files_in_dir(dir): - if not os.path.exists(dir): +def files_in_dir(directory): + if not os.path.exists(directory): return 0 num_files = 0 - for dir_entry in os.scandir(dir): + for dir_entry in os.scandir(directory): if dir_entry.is_file(): num_files = num_files + 1 elif dir_entry.is_dir(): @@ -213,10 +213,10 @@ class FileStorage(object): def __init__(self, umask): self.umask = umask - def subdirFilename(self, classname, nodeid, property=None): + def subdirFilename(self, classname, nodeid, property_=None): """Determine what the filename and subdir for nodeid + classname is.""" - if property: - name = '%s%s.%s' % (classname, nodeid, property) + if property_: # noqa: SIM108 don't use ternary + name = '%s%s.%s' % (classname, nodeid, property_) else: # roundupdb.FileClass never specified the property name, so don't # include it @@ -233,20 +233,20 @@ def _tempfile(self, filename): return filename + self.tempext - def _editInProgress(self, classname, nodeid, property): + def _editInProgress(self, classname, nodeid, property_): """Return true if the file indicated is being edited. returns -- True if the current transaction includes an edit to the file indicated.""" - for method, args in self.transactions: + for method, args in self.transactions: # noqa: SIM110 don't use any() if (method == self.doStoreFile and - args == (classname, nodeid, property)): + args == (classname, nodeid, property_)): return True return False - def filename(self, classname, nodeid, property=None, create=0): + def filename(self, classname, nodeid, property_=None, create=0): """Determine what the filename for the given node and optionally property is. @@ -255,7 +255,7 @@ def filename(self, classname, nodeid, property=None, create=0): could be in an old-style, backwards-compatible flat directory. """ filename = os.path.join(self.dir, 'files', classname, - self.subdirFilename(classname, nodeid, property)) + self.subdirFilename(classname, nodeid, property_)) # If the caller is going to create the file, return the # post-commit filename. It is the callers responsibility to # add self.tempext when actually creating the file. @@ -266,7 +266,7 @@ def filename(self, classname, nodeid, property=None, create=0): # If an edit to this file is in progress, then return the name # of the temporary file containing the edited content. - if self._editInProgress(classname, nodeid, property): + if self._editInProgress(classname, nodeid, property_): if not os.path.exists(tempfile): raise IOError('content file for %s not found' % tempfile) return tempfile @@ -293,9 +293,9 @@ def filename(self, classname, nodeid, property=None, create=0): return filename # ok, try flat (very old-style) - if property: + if property_: filename = os.path.join(self.dir, 'files', '%s%s.%s' % ( - classname, nodeid, property)) + classname, nodeid, property_)) else: filename = os.path.join(self.dir, 'files', '%s%s' % (classname, nodeid)) @@ -305,17 +305,17 @@ def filename(self, classname, nodeid, property=None, create=0): # file just ain't there raise IOError('content file for %s not found' % filename) - def filesize(self, classname, nodeid, property=None, create=0): - filename = self.filename(classname, nodeid, property, create) + def filesize(self, classname, nodeid, property_=None, create=0): + filename = self.filename(classname, nodeid, property_, create) return os.path.getsize(filename) - def storefile(self, classname, nodeid, property, content): + def storefile(self, classname, nodeid, property_, content): """Store the content of the file in the database. The property may be None, in which case the filename does not indicate which property is being saved. """ # determine the name of the file to write to - name = self.filename(classname, nodeid, property, create=1) + name = self.filename(classname, nodeid, property_, create=1) # make sure the file storage dir exists if not os.path.exists(os.path.dirname(name)): @@ -325,29 +325,24 @@ def storefile(self, classname, nodeid, property, content): name = self._tempfile(name) # make sure we don't register the rename action more than once - if not self._editInProgress(classname, nodeid, property): + if not self._editInProgress(classname, nodeid, property_): # save off the rename action self.transactions.append((self.doStoreFile, (classname, nodeid, - property))) + property_))) # always set umask before writing to make sure we have the proper one # in multi-tracker (i.e. multi-umask) or modpython scenarios # the umask may have changed since last we set it. os.umask(self.umask) - fd = open(name, 'wb') - fd.write(content) - fd.close() + with open(name, 'wb') as fd: + fd.write(content) - def getfile(self, classname, nodeid, property): + def getfile(self, classname, nodeid, property_): """Get the content of the file in the database. """ - filename = self.filename(classname, nodeid, property) + filename = self.filename(classname, nodeid, property_) - f = open(filename, 'rb') - try: - # snarf the contents and make sure we close the file + with open(filename, 'rb') as f: return f.read() - finally: - f.close() def numfiles(self): """Get number of files in storage, even across subdirectories. @@ -355,11 +350,11 @@ def numfiles(self): files_dir = os.path.join(self.dir, 'files') return files_in_dir(files_dir) - def doStoreFile(self, classname, nodeid, property, **databases): + def doStoreFile(self, classname, nodeid, property_, **databases): """Store the file as part of a transaction commit. """ # determine the name of the file to write to - name = self.filename(classname, nodeid, property, 1) + name = self.filename(classname, nodeid, property_, 1) # the file is currently ".tmp" - move it to its real name to commit if name.endswith(self.tempext): @@ -380,11 +375,11 @@ def doStoreFile(self, classname, nodeid, property, **databases): # return the classname, nodeid so we reindex this content return (classname, nodeid) - def rollbackStoreFile(self, classname, nodeid, property, **databases): + def rollbackStoreFile(self, classname, nodeid, property_, **databases): """Remove the temp file as a part of a rollback """ # determine the name of the file to delete - name = self.filename(classname, nodeid, property) + name = self.filename(classname, nodeid, property_) if not name.endswith(self.tempext): name += self.tempext os.remove(name) diff --git a/roundup/backends/indexer_common.py b/roundup/backends/indexer_common.py index 604cb6fac..5dc93219e 100644 --- a/roundup/backends/indexer_common.py +++ b/roundup/backends/indexer_common.py @@ -10,8 +10,7 @@ def _isLink(propclass): - return (isinstance(propclass, hyperdb.Link) or - isinstance(propclass, hyperdb.Multilink)) + return (isinstance(propclass, (hyperdb.Link, hyperdb.Multilink))) class Indexer: @@ -65,10 +64,10 @@ def search(self, search_terms, klass, ignore=None): ignore = {} # don't unpack hits entries as sqlite3's Row can't be unpacked :( for entry in hits: - # skip this result if we don't care about this class/property + # skip this result if we don't care about this class/prop(erty) classname = entry[0] - property = entry[2] - if (classname, property) in ignore: + prop = entry[2] + if (classname, prop) in ignore: continue # if it's a property on klass, it's easy @@ -96,13 +95,12 @@ def search(self, search_terms, klass, ignore=None): # klass.find tells me the klass nodeids the linked nodes relate to propdefs = klass.getprops() for resid in klass.find(**propspec): - resid = str(resid) if resid in nodeids: continue # we ignore duplicate resids nodeids[resid] = {} node_dict = nodeids[resid] # now figure out where it came from - for linkprop in propspec: + for linkprop, linkprop_value in propspec.items(): v = klass.get(resid, linkprop) # the link might be a Link so deal with a single result or None if isinstance(propdefs[linkprop], hyperdb.Link): @@ -110,7 +108,7 @@ def search(self, search_terms, klass, ignore=None): continue v = [v] for nodeid in v: - if nodeid in propspec[linkprop]: + if nodeid in linkprop_value: # OK, this node[propname] has a winner if linkprop not in node_dict: node_dict[linkprop] = [nodeid] diff --git a/roundup/backends/indexer_dbm.py b/roundup/backends/indexer_dbm.py index d3f9560b2..d05216561 100644 --- a/roundup/backends/indexer_dbm.py +++ b/roundup/backends/indexer_dbm.py @@ -20,7 +20,6 @@ ''' __docformat__ = 'restructuredtext' -import errno import marshal import os import re @@ -57,9 +56,8 @@ def __init__(self, db): # for now the file itself is a flag self.force_reindex() elif os.path.exists(version): - fd = open(version) - version = fd.read() - fd.close() + with open(version) as fd: + version = fd.read() # check the value and reindex if it's not the latest if version.strip() != '1': self.force_reindex() @@ -70,10 +68,9 @@ def force_reindex(self): if os.path.exists(self.indexdb_path): shutil.rmtree(self.indexdb_path) os.makedirs(self.indexdb_path) - os.chmod(self.indexdb_path, 0o775) # nosec - allow group write - fd = open(os.path.join(self.indexdb_path, 'version'), 'w') - fd.write('1\n') - fd.close() + os.chmod(self.indexdb_path, 0o775) # noqa: S103 allow group write + with open(os.path.join(self.indexdb_path, 'version'), 'w') as fd: + fd.write('1\n') self.reindex = 1 self.changed = 1 @@ -98,7 +95,7 @@ def add_text(self, identifier, text, mime_type='text/plain'): # Find new file index, and assign it to identifier # (_TOP uses trick of negative to avoid conflict with file index) - self.files['_TOP'] = (self.files['_TOP'][0]-1, None) + self.files['_TOP'] = (self.files['_TOP'][0] - 1, None) file_index = abs(self.files['_TOP'][0]) self.files[identifier] = (file_index, len(words)) self.fileids[file_index] = identifier @@ -109,12 +106,12 @@ def add_text(self, identifier, text, mime_type='text/plain'): if self.is_stopword(word): continue if word in filedict: - filedict[word] = filedict[word]+1 + filedict[word] = filedict[word] + 1 else: filedict[word] = 1 # now add to the totals - for word in filedict: + for word, word_dict in filedict.items(): # each word has a dict of {identifier: count} if word in self.words: entry = self.words[word] @@ -124,7 +121,7 @@ def add_text(self, identifier, text, mime_type='text/plain'): self.words[word] = entry # make a reference to the file for this word - entry[file_index] = filedict[word] + entry[file_index] = word_dict # save needed self.changed = 1 @@ -165,7 +162,7 @@ def find(self, wordlist): if not self.minlength <= len(word) <= self.maxlength: # word outside the bounds of what we index - ignore continue - word = word.upper() + word = word.upper() # noqa: PLW2901 # set loop var is ok if self.is_stopword(word): continue entry = self.words.get(word) # For each word, get index @@ -192,7 +189,7 @@ def find(self, wordlist): def load_index(self, reload=0, wordlist=None): # Unless reload is indicated, do not load twice if self.index_loaded() and not reload: - return 0 + return # Ok, now let's actually load it db = {'WORDS': {}, 'FILES': {'_TOP': (0, None)}, 'FILEIDS': {}} @@ -211,13 +208,13 @@ def load_index(self, reload=0, wordlist=None): # Load the segments for segment in segments: try: - f = open(self.indexdb + segment, 'rb') - except IOError as error: + with open(self.indexdb + segment, 'rb') as f: + pickle_str = zlib.decompress(f.read()) + except FileNotFoundError: # noqa: PERF203 allow except inside loop # probably just nonexistent segment index file - if error.errno != errno.ENOENT: raise # noqa: E701 + pass else: - pickle_str = zlib.decompress(f.read()) - f.close() + # FIXME 3.13 add allow_code=False to call dbslice = marshal.loads(pickle_str) if dbslice.get('WORDS'): # if it has some words, add them @@ -244,15 +241,14 @@ def save_index(self): for segment in self.segments: try: os.remove(self.indexdb + segment) - except OSError as error: + except FileNotFoundError: # noqa: PERF203 allow except inside loop # probably just nonexistent segment index file - if error.errno != errno.ENOENT: raise # noqa: E701 + pass # First write the much simpler filename/fileid dictionaries dbfil = {'WORDS': None, 'FILES': self.files, 'FILEIDS': self.fileids} - marshal_fh = open(self.indexdb+'-', 'wb') - marshal_fh.write(zlib.compress(marshal.dumps(dbfil))) - marshal_fh.close() + with open(self.indexdb + '-', 'wb') as marshal_fh: + marshal_fh.write(zlib.compress(marshal.dumps(dbfil))) # The hard part is splitting the word dictionary up, of course letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ#_" @@ -271,10 +267,9 @@ def save_index(self): db = {'WORDS': segdicts[initchar], 'FILES': None, 'FILEIDS': None} pickle_str = marshal.dumps(db) filename = self.indexdb + initchar - pickle_fh = open(filename, 'wb') - pickle_fh.write(zlib.compress(pickle_str)) - pickle_fh.close() - os.chmod(filename, 0o664) + with open(filename, 'wb') as pickle_fh: + pickle_fh.write(zlib.compress(pickle_str)) + os.chmod(filename, 0o664) # noqa: S103 allow group write # save done self.changed = 0 @@ -292,7 +287,7 @@ def purge_entry(self, identifier): del self.fileids[file_index] # The much harder part, cleanup the word index - for _key, occurs in self.words.items(): + for occurs in self.words.values(): if file_index in occurs: del occurs[file_index] diff --git a/roundup/backends/indexer_postgresql_fts.py b/roundup/backends/indexer_postgresql_fts.py index 466fcdaee..9ed4e6f81 100644 --- a/roundup/backends/indexer_postgresql_fts.py +++ b/roundup/backends/indexer_postgresql_fts.py @@ -6,19 +6,19 @@ import re +from psycopg2.errors import InFailedSqlTransaction, SyntaxError, UndefinedObject # noqa: A004 + from roundup.backends.indexer_common import Indexer as IndexerBase -from roundup.i18n import _ from roundup.cgi.exceptions import IndexerQueryError - -from psycopg2.errors import InFailedSqlTransaction, SyntaxError, \ - UndefinedObject +from roundup.i18n import _ class Indexer(IndexerBase): def __init__(self, db): IndexerBase.__init__(self, db) self.db = db - if db.conn.server_version < 110000: + min_fts_server_version = 110000 + if db.conn.server_version < min_fts_server_version: db.sql("select version()") server_descr = db.cursor.fetchone() raise ValueError("Postgres native_fts indexing requires postgres " @@ -79,11 +79,11 @@ def add_text(self, identifier, text, mime_type='text/plain'): # we get a ValueError. For right now ignore it. pass else: - id = r[0] + row_id = r[0] sql = 'update __fts set _tsv=to_tsvector(%s, %s) where ctid=%s' % \ (a, a, a) self.db.cursor.execute(sql, (self.db.config['INDEXER_LANGUAGE'], - text, id)) + text, row_id)) def find(self, wordlist): """look up all the words in the wordlist. @@ -106,21 +106,21 @@ def find(self, wordlist): sql = ('select _class, _itemid, _prop from __fts ' 'where _tsv @@ to_tsquery(%s, %s)' % (a, a)) - else: - if re.search(r'[<>!&|()*]', " ".join(wordlist)): - # assume this is a ts query processed by websearch_to_tsquery. - # since it has operator characters in it. - raise IndexerQueryError(_('You have non-word/operator ' + elif re.search(r'[<>!&|()*]', " ".join(wordlist)): + # assume this is a ts query processed by websearch_to_tsquery. + # since it has operator characters in it. + raise IndexerQueryError(_( + 'You have non-word/operator ' 'characters "<>!&|()*" in your query. Did you want to ' 'do a tsquery search and forgot to start it with "ts:"?')) - else: - sql = 'select _class, _itemid, _prop from __fts '\ - 'where _tsv @@ websearch_to_tsquery(%s, %s)' % (a, a) + else: + sql = 'select _class, _itemid, _prop from __fts '\ + 'where _tsv @@ websearch_to_tsquery(%s, %s)' % (a, a) try: # tests supply a multi element word list. Join them. self.db.cursor.execute(sql, (self.db.config['INDEXER_LANGUAGE'], - " ".join(wordlist),)) + " ".join(wordlist))) except SyntaxError as e: # reset the cursor as it's invalid currently # reuse causes an InFailedSqlTransaction @@ -145,7 +145,6 @@ def find(self, wordlist): raise ValueError(_("Check tracker config.ini for a bad " "indexer_language setting. Error is: %s") % e) - else: - raise + raise return self.db.cursor.fetchall() diff --git a/roundup/backends/indexer_rdbms.py b/roundup/backends/indexer_rdbms.py index 42d9914d5..5813011cb 100644 --- a/roundup/backends/indexer_rdbms.py +++ b/roundup/backends/indexer_rdbms.py @@ -4,8 +4,8 @@ """ import re +from roundup.anypy.strings import u2s, us2u from roundup.backends.indexer_common import Indexer as IndexerBase -from roundup.anypy.strings import us2u, u2s class Indexer(IndexerBase): @@ -52,15 +52,15 @@ def add_text(self, identifier, text, mime_type='text/plain'): r = self.db.cursor.fetchone() if not r: # not previously indexed - id = self.db.newid('__textids') + text_id = self.db.newid('__textids') sql = 'insert into __textids (_textid, _class, _itemid, _prop)'\ ' values (%s, %s, %s, %s)' % (a, a, a, a) - self.db.cursor.execute(sql, (id, ) + identifier) + self.db.cursor.execute(sql, (text_id, ) + identifier) else: - id = int(r[0]) + text_id = int(r[0]) # clear out any existing indexed values sql = 'delete from __words where _textid=%s' % a - self.db.cursor.execute(sql, (id, )) + self.db.cursor.execute(sql, (text_id, )) # ok, find all the unique words in the text text = us2u(text, "replace") @@ -77,7 +77,7 @@ def add_text(self, identifier, text, mime_type='text/plain'): # for each word, add an entry in the db sql = 'insert into __words (_word, _textid) values (%s, %s)' % (a, a) - words = [(word, id) for word in words] + words = [(word, text_id) for word in words] self.db.cursor.executemany(sql, words) def find(self, wordlist): @@ -88,6 +88,7 @@ def find(self, wordlist): if not wordlist: return [] + a = self.db.arg # placeholder for prepared statement cap_wl = [word.upper() for word in wordlist if self.minlength <= len(word) <= self.maxlength] clean_wl = [word for word in cap_wl if not self.is_stopword(word)] @@ -97,17 +98,16 @@ def find(self, wordlist): if self.db.implements_intersect: # simple AND search - sql = 'select distinct(_textid) from __words where _word=%s' % ( - self.db.arg) - sql = '\nINTERSECT\n'.join([sql]*len(clean_wl)) + sql = 'select distinct(_textid) from __words where _word=%s' % a + sql = '\nINTERSECT\n'.join([sql] * len(clean_wl)) self.db.cursor.execute(sql, tuple(clean_wl)) r = self.db.cursor.fetchall() if not r: return [] - a = ','.join([self.db.arg] * len(r)) + a = ','.join([a] * len(r)) sql = 'select _class, _itemid, _prop from __textids '\ 'where _textid in (%s)' % a - self.db.cursor.execute(sql, tuple([int(row[0]) for row in r])) + self.db.cursor.execute(sql, tuple(int(row[0]) for row in r)) else: # A more complex version for MySQL since it doesn't @@ -126,9 +126,9 @@ def find(self, wordlist): match_list = [] for n in range(len(clean_wl) - 1): join_list.append(join_tmpl % (n + 2)) - match_list.append(match_tmpl % (n + 2, self.db.arg)) + match_list.append(match_tmpl % (n + 2, a)) - sql = sql % (' '.join(join_list), self.db.arg, + sql = sql % (' '.join(join_list), a, ' '.join(match_list)) self.db.cursor.execute(sql, clean_wl) @@ -136,7 +136,7 @@ def find(self, wordlist): if not r: return [] - a = ','.join([self.db.arg] * len(r)) + a = ','.join([a] * len(r)) sql = 'select _class, _itemid, _prop from __textids '\ 'where _textid in (%s)' % a diff --git a/roundup/backends/indexer_sqlite_fts.py b/roundup/backends/indexer_sqlite_fts.py index c25efd084..0958568f6 100644 --- a/roundup/backends/indexer_sqlite_fts.py +++ b/roundup/backends/indexer_sqlite_fts.py @@ -19,8 +19,8 @@ """ from roundup.backends.indexer_common import Indexer as IndexerBase -from roundup.i18n import _ from roundup.cgi.exceptions import IndexerQueryError +from roundup.i18n import _ try: import sqlite3 as sqlite @@ -84,10 +84,10 @@ def add_text(self, identifier, text, mime_type='text/plain'): ' values (%s, %s, %s, %s)' % (a, a, a, a) self.db.cursor.execute(sql, identifier + (text,)) else: - id = int(r[0]) + text_id = int(r[0]) sql = 'update __fts set _textblob=%s where rowid=%s' % \ (a, a) - self.db.cursor.execute(sql, (text, id)) + self.db.cursor.execute(sql, (text, text_id)) def find(self, wordlist): """look up all the words in the wordlist. @@ -132,8 +132,8 @@ def find(self, wordlist): raise IndexerQueryError( _("Search failed. Try quoting any terms that " "include a '-' and retry the search.")) - else: - raise IndexerQueryError(e.args[0].replace("fts5:", - "Query error:")) + + raise IndexerQueryError(e.args[0].replace("fts5:", + "Query error:")) return self.db.cursor.fetchall() diff --git a/roundup/backends/indexer_whoosh.py b/roundup/backends/indexer_whoosh.py index a67a478d1..299319b8b 100644 --- a/roundup/backends/indexer_whoosh.py +++ b/roundup/backends/indexer_whoosh.py @@ -2,10 +2,10 @@ ''' import os -from whoosh import fields, qparser, index, query, analysis +from whoosh import analysis, fields, index, query -from roundup.backends.indexer_common import Indexer as IndexerBase from roundup.anypy.strings import us2u +from roundup.backends.indexer_common import Indexer as IndexerBase class Indexer(IndexerBase): diff --git a/roundup/backends/indexer_xapian.py b/roundup/backends/indexer_xapian.py index 6dc3e8583..a58ddefeb 100644 --- a/roundup/backends/indexer_xapian.py +++ b/roundup/backends/indexer_xapian.py @@ -3,6 +3,7 @@ import os import re import time + import xapian from roundup.anypy.strings import b2s, s2b @@ -28,7 +29,7 @@ def _get_database(self): try: # if successful return return xapian.WritableDatabase(index, xapian.DB_CREATE_OR_OPEN) - except xapian.DatabaseLockError: + except xapian.DatabaseLockError: # noqa: PERF203 except in loop ok # adaptive sleep. Get longer as count increases. time_to_sleep = 0.01 * (2 << min(5, n)) time.sleep(time_to_sleep) @@ -118,11 +119,11 @@ def find(self, wordlist): enquire = xapian.Enquire(database) stemmer = xapian.Stem(self.language) - terms = [] - for term in [word.upper() for word in wordlist - if self.minlength <= len(word) <= self.maxlength]: - if not self.is_stopword(term): - terms.append(stemmer(s2b(term.lower()))) + + terms = [stemmer(s2b(word.lower())) for word in wordlist + if (self.minlength <= len(word) <= self.maxlength) and + not self.is_stopword(word.upper())] + query = xapian.Query(xapian.Query.OP_AND, terms) enquire.set_query(query) diff --git a/roundup/backends/portalocker.py b/roundup/backends/portalocker.py index 61f9dca54..1354c4651 100644 --- a/roundup/backends/portalocker.py +++ b/roundup/backends/portalocker.py @@ -4,6 +4,8 @@ # # http://code.activestate.com/recipes/65203-portalocker-cross-platform-posixnt-api-for-flock-s/ # + +#ruff: noqa: SIM103 return true/false statement without using if. """ Cross-platform (posix/nt) API for flock-style file locking. @@ -47,14 +49,13 @@ - Added return result """ -from __future__ import print_function __docformat__ = 'restructuredtext' import os if os.name == 'nt': - import msvcrt import ctypes + import msvcrt from ctypes import windll from ctypes.wintypes import BOOL, DWORD, HANDLE @@ -67,10 +68,9 @@ # detect size of ULONG_PTR def is_64bit(): return ctypes.sizeof(ctypes.c_ulong) != ctypes.sizeof(ctypes.c_void_p) - if is_64bit(): - ULONG_PTR = ctypes.c_int64 - else: - ULONG_PTR = ctypes.c_ulong + + ULONG_PTR = ctypes.c_int64 if is_64bit() else ctypes.c_ulong + PVOID = ctypes.c_void_p # --- Union inside Structure by stackoverflow:3480240 --- @@ -119,33 +119,29 @@ def lock(file, flags): if LockFileEx(hfile, flags, 0, 0, 0xFFFF0000, ctypes.byref(overlapped)): return True - else: - return False + return False def unlock(file): hfile = msvcrt.get_osfhandle(file.fileno()) overlapped = OVERLAPPED() if UnlockFileEx(hfile, 0, 0, 0xFFFF0000, ctypes.byref(overlapped)): return True - else: - return False + return False elif os.name == 'posix': def lock(file, flags): if fcntl.flock(file.fileno(), flags) == 0: return True - else: - return False + return False def unlock(file): if fcntl.flock(file.fileno(), fcntl.LOCK_UN) == 0: return True - else: - return False + return False if __name__ == '__main__': - from time import time, strftime, localtime import sys + from time import localtime, strftime, time log = open('log.txt', "a+") lock(log, LOCK_EX) diff --git a/roundup/backends/rdbms_common.py b/roundup/backends/rdbms_common.py index 771afecc7..18bdef09a 100644 --- a/roundup/backends/rdbms_common.py +++ b/roundup/backends/rdbms_common.py @@ -506,7 +506,7 @@ def _convert_string_properties(self): l = [] for entry in row: # mysql will already be a string - psql needs "help" - if entry is not None and not isinstance(entry, type('')): + if entry is not None and not isinstance(entry, str): entry = str(entry) l.append(entry) self.cursor.execute(sql, l) @@ -597,7 +597,7 @@ def determine_columns(self, properties): mls.append(col) continue - if isinstance(prop, type('')): + if isinstance(prop, str): raise ValueError("string property spec!") # and prop.find('Multilink') != -1: # mls.append(col) @@ -1419,7 +1419,7 @@ def addjournal(self, classname, nodeid, action, params, creator=None, classname, nodeid, journaldate, journaltag, action, params)) # make the journalled data marshallable - if isinstance(params, type({})): + if isinstance(params, dict): self._journal_marshal(params, classname) params = repr_export(params) @@ -1446,7 +1446,7 @@ def setjournal(self, classname, nodeid, journal): params)) # make the journalled data marshallable - if isinstance(params, type({})): + if isinstance(params, dict): self._journal_marshal(params, classname) params = repr_export(params) @@ -1487,7 +1487,7 @@ def getjournal(self, classname, nodeid): properties = self.getclass(classname).getprops() for nodeid, date_stamp, user, action, params in journal: params = eval_import(params) - if isinstance(params, type({})): + if isinstance(params, dict): for param, value in params.items(): if not value: continue @@ -1752,7 +1752,7 @@ def create_inner(self, **propvalues): key)) if value is not None and isinstance(prop, Link): - if not isinstance(value, type('')): + if not isinstance(value, str): raise ValueError('link value must be String') link_class = self.properties[key].classname # if it isn't a number, it's a key @@ -1778,14 +1778,14 @@ def create_inner(self, **propvalues): if value is None: value = [] if not hasattr(value, '__iter__') or \ - isinstance(value, type('')): + isinstance(value, str): raise TypeError('new property "%s" not an iterable of ids' % key) # clean up and validate the list of links link_class = self.properties[key].classname l = [] for entry in value: - if not isinstance(entry, type('')): + if not isinstance(entry, str): raise ValueError('"%s" multilink value (%r) ' 'must contain Strings' % ( key, value)) @@ -1818,7 +1818,7 @@ def create_inner(self, **propvalues): value) elif isinstance(prop, Password): - if not isinstance(value, password.Password): + if value is not None and not isinstance(value, password.Password): raise TypeError('new property "%s" not a Password' % key) elif isinstance(prop, Date): @@ -2132,7 +2132,7 @@ def set_inner(self, nodeid, **propvalues): (self.classname, nodeid, propname), value) elif isinstance(prop, Password): - if not isinstance(value, password.Password): + if value is not None and not isinstance(value, password.Password): raise TypeError( 'new property "%s" not a Password' % propname) propvalues[propname] = value @@ -2612,7 +2612,7 @@ def collect_values(n): e.context['class'] = pln e.context['attr'] = prp raise - except: + except Exception: pass # Fallback to original code args = [] @@ -2693,7 +2693,7 @@ def collect_values(n): e.context['class'] = classname e.context['attr'] = proptree.name raise - except: + except Exception: # fallback behavior when expression parsing above fails orclause = '' if '-1' in v: @@ -2781,7 +2781,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, # Note: need the where-clause if p has # children that compute additional restrictions if (not p.has_values or - (not isinstance(v, type([])) and v != '-1') or + (not isinstance(v, list) and v != '-1') or p.children): where.append('_%s.id=%s.%s' % (pln, tn, nid)) if v in ('-1', ['-1'], []): @@ -2790,7 +2790,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, where.append(self._subselect(p)) else: if p.has_values: - if isinstance(v, type([])): + if isinstance(v, list): # The where-clause above is conditionally # created in _filter_multilink_expression w, arg = self._filter_multilink_expression(p, v) @@ -2806,7 +2806,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, assert not p.attr_sort_done and not p.sort_ids_needed elif k == 'id': if 'search' in p.need_for: - if isinstance(v, type([])): + if isinstance(v, list): # If there are no permitted values, then the # where clause will always be false, and we # can optimize the query away. @@ -2823,7 +2823,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, elif isinstance(propclass, String): if 'search' in p.need_for: exact = [] - if not isinstance(v, type([])): + if not isinstance(v, list): v = [v] new_v = [] for x in v: @@ -2867,7 +2867,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, if c: where.append('_%s._%s=_%s.id' % (pln, k, ln)) if p.has_values: - if isinstance(v, type([])): + if isinstance(v, list): w, arg = self._filter_link_expression(p, v) if w: where.append(w) @@ -2895,7 +2895,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, rc = '_%s._%s' % (pln, k) elif isinstance(propclass, Date) and 'search' in p.need_for: dc = self.db.to_sql_value(hyperdb.Date) - if isinstance(v, type([])): + if isinstance(v, list): s = ','.join([a for x in v]) where.append('_%s._%s in (%s)' % (pln, k, s)) args = args + [dc(date.Date(x)) for x in v] @@ -2925,7 +2925,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, elif isinstance(propclass, Interval): # filter/sort using the ___int__ column if 'search' in p.need_for: - if isinstance(v, type([])): + if isinstance(v, list): s = ','.join([a for x in v]) where.append('_%s.__%s_int__ in (%s)' % (pln, k, s)) args = args + [date.Interval(x).as_seconds() for x in v] @@ -2967,7 +2967,7 @@ def _filter_sql(self, search_matches, filterspec, srt=[], grp=[], retr=0, where.append('_%s._%s in (%s)' % (pln, k, s)) args = args + bv elif 'search' in p.need_for: - if isinstance(v, type([])): + if isinstance(v, list): s = ','.join([a for x in v]) where.append('_%s._%s in (%s)' % (pln, k, s)) args = args + v diff --git a/roundup/backends/sessions_common.py b/roundup/backends/sessions_common.py index f833c0899..5f549c4f2 100644 --- a/roundup/backends/sessions_common.py +++ b/roundup/backends/sessions_common.py @@ -1,6 +1,7 @@ -import base64, logging +import base64 +import logging -import roundup.anypy.random_ as random_ +from roundup.anypy import random_ from roundup.anypy.strings import b2s logger = logging.getLogger('roundup.hyperdb.backend.sessions') @@ -36,7 +37,7 @@ def get_logger(self): # to do it only once. if not hasattr(self, '__logger'): self.__logger = logging.getLogger('roundup.hyperdb.backends.%s' % - self.name or "basicdb" ) + self.name or "basicdb") return self.__logger diff --git a/roundup/backends/sessions_dbm.py b/roundup/backends/sessions_dbm.py index 5eca055a4..8ffdd53fd 100644 --- a/roundup/backends/sessions_dbm.py +++ b/roundup/backends/sessions_dbm.py @@ -6,14 +6,16 @@ """ __docformat__ = 'restructuredtext' -import marshal, os, random, time - -from roundup.anypy.html import html_escape as escape +import marshal +import os +import random +import time from roundup import hyperdb -from roundup.i18n import _ from roundup.anypy.dbm_ import anydbm, whichdb +from roundup.anypy.html import html_escape as escape from roundup.backends.sessions_common import SessionCommon +from roundup.i18n import _ class BasicDatabase(SessionCommon): @@ -40,11 +42,11 @@ def clear(self): path = os.path.join(self.dir, self.name) if os.path.exists(path): os.remove(path) - elif os.path.exists(path+'.db'): # dbm appends .db - os.remove(path+'.db') - elif os.path.exists(path+".dir"): # dumb dbm - os.remove(path+".dir") - os.remove(path+".dat") + elif os.path.exists(path + '.db'): # dbm appends .db + os.remove(path + '.db') + elif os.path.exists(path + ".dir"): # dumb dbm + os.remove(path + ".dir") + os.remove(path + ".dat") #self._db_type = None @@ -59,7 +61,7 @@ def cache_db_type(self, path): if not db_type: raise hyperdb.DatabaseError( _("Couldn't identify database type")) - elif os.path.exists(path+'.db'): + elif os.path.exists(path + '.db'): # if the path ends in '.db', it's a dbm database, whether # anydbm says it's dbhash or not! db_type = 'dbm' @@ -71,6 +73,7 @@ def get(self, infoid, value, default=_marker): db = self.opendb('c') try: if infoid in db: + # FIXME: 3.13 add allow_code=False values = marshal.loads(db[infoid]) else: if default != self._marker: @@ -84,6 +87,7 @@ def getall(self, infoid): db = self.opendb('c') try: try: + # FIXME: 3.13 add allow_code=False d = marshal.loads(db[infoid]) del d['__timestamp'] return d @@ -97,6 +101,7 @@ def set(self, infoid, **newvalues): timestamp = None try: if infoid in db: + # FIXME: 3.13 add allow_code=False values = marshal.loads(db[infoid]) try: timestamp = values['__timestamp'] @@ -115,6 +120,7 @@ def set(self, infoid, **newvalues): newvalues['__timestamp'] = time.time() values.update(newvalues) + # FIXME: 3.13 add allow_code=False db[infoid] = marshal.dumps(values) finally: db.close() @@ -163,19 +169,22 @@ def opendb(self, mode): # Primarily we want to catch and retry: # [Errno 11] Resource temporarily unavailable retry # FIXME: make this more specific - if retries_left < 10: + + # warn if threshold is crossed + retry_warning_threshold = 10 + if retries_left < retry_warning_threshold: self.log_warning( 'dbm.open failed on ...%s, retry %s left: %s, %s' % - (path[-15:], 15-retries_left, retries_left, e)) + (path[-15:], 15 - retries_left, retries_left, e)) if retries_left < 0: # We have used up the retries. Reraise the exception # that got us here. raise - else: - # stagger retry to try to get around thundering herd issue. - time.sleep(random.randint(0, 25)*.005) - retries_left = retries_left - 1 - continue # the while loop + + # stagger retry to try to get around thundering herd issue. + time.sleep(random.randint(0, 25) * .005) # noqa: S311 + retries_left = retries_left - 1 + continue # the while loop return handle def commit(self): @@ -186,7 +195,7 @@ def lifetime(self, key_lifetime=0): in seconds. Default lifetime is 0. """ now = time.time() - week = 60*60*24*7 + week = 60 * 60 * 24 * 7 return now - week + key_lifetime def close(self): @@ -201,8 +210,12 @@ def updateTimestamp(self, sessid): def clean(self): ''' Remove session records that haven't been used for a week. ''' + ''' Note: deletion of old keys must be completed when this method + returns. Calling code must not have any expired keys present + after this returns or expired keys could be used to validate + a user. This can mean a long delay when expiring but ....''' now = time.time() - week = 60*60*24*7 + week = 60 * 60 * 24 * 7 a_week_ago = now - week for sessid in self.list(): sess = self.get(sessid, '__timestamp', None) @@ -213,9 +226,13 @@ def clean(self): self.destroy(sessid) run_time = time.time() - now - if run_time > 3: + + # warn if long_time_threshold (in seconds) is passed. + long_time_threshold = 3 + if run_time > long_time_threshold: self.log_warning("clean() took %.2fs", run_time) + class Sessions(BasicDatabase): name = 'sessions' diff --git a/roundup/backends/sessions_rdbms.py b/roundup/backends/sessions_rdbms.py index 69b0dc735..a2b7064b8 100644 --- a/roundup/backends/sessions_rdbms.py +++ b/roundup/backends/sessions_rdbms.py @@ -5,17 +5,37 @@ class. It's now also used for One Time Key handling too. """ __docformat__ = 'restructuredtext' +import ast import time from roundup.anypy.html import html_escape as escape from roundup.backends.sessions_common import SessionCommon +def safe_eval(s): + """Restricted eval to eval a repr of a dict of constants. + """ + return ast.literal_eval(s) + + class BasicDatabase(SessionCommon): ''' Provide a nice encapsulation of an RDBMS table. Keys are id strings, values are automatically marshalled data. ''' + """ In methods the variables ``n`` and ``a`` should be used + only for the values of self.name and self.db.arg + respectively. Only these values should be interpolated + into a sql string as they are safe. + + self.name is ``otk`` or ``session`` for the otk or + session databases. + + self.db.arg is ``%s`` or ``?`` and is the placeholder for + parameterized queries in mysql/postgresql or sqlite + respectively. + """ + name = None def __init__(self, db): @@ -41,8 +61,8 @@ def get(self, infoid, value, default=_marker): if not res: if default != self._marker: return default - raise KeyError('No such %s "%s"' % (self.name, escape(infoid))) - values = eval(res[0]) + raise KeyError('No such %s "%s"' % (n, escape(infoid))) + values = safe_eval(res[0]) return values.get(value, None) def getall(self, infoid): @@ -51,8 +71,8 @@ def getall(self, infoid): (n, n, n, self.db.arg), (infoid,)) res = self.cursor.fetchone() if not res: - raise KeyError('No such %s "%s"' % (self.name, escape(infoid))) - return eval(res[0]) + raise KeyError('No such %s "%s"' % (n, escape(infoid))) + return safe_eval(res[0]) def set(self, infoid, **newvalues): """ Store all newvalues under key infoid with a timestamp in database. @@ -68,11 +88,9 @@ def set(self, infoid, **newvalues): (n, n, n, a), (infoid,)) res = c.fetchone() + values = safe_eval(res[0]) if res else {} + timestamp = time.time() - if res: - values = eval(res[0]) - else: - values = {} if '__timestamp' in newvalues: try: @@ -81,7 +99,7 @@ def set(self, infoid, **newvalues): except ValueError: if res: # keep the original timestamp - del(newvalues['__timestamp']) + del newvalues['__timestamp'] else: # here timestamp is the new timestamp newvalues['__timestamp'] = timestamp @@ -103,25 +121,29 @@ def list(self): return [res[0] for res in c.fetchall()] def destroy(self, infoid): + n = self.name self.cursor.execute('delete from %ss where %s_key=%s' % - (self.name, self.name, self.db.arg), (infoid,)) + (n, n, self.db.arg), (infoid,)) def updateTimestamp(self, infoid): """ don't update every hit - once a minute should be OK """ + n = self.name + a = self.db.arg now = time.time() self.cursor.execute('''update %ss set %s_time=%s where %s_key=%s ''' '''and %s_time < %s''' % - (self.name, self.name, self.db.arg, self.name, - self.db.arg, self.name, self.db.arg), - (now, infoid, now-60)) + (n, n, a, n, a, n, a), + (now, infoid, now - 60)) def clean(self): ''' Remove session records that haven't been used for a week. ''' + n = self.name + a = self.db.arg now = time.time() - week = 60*60*24*7 + week = 60 * 60 * 24 * 7 old = now - week self.cursor.execute('delete from %ss where %s_time < %s' % - (self.name, self.name, self.db.arg), (old, )) + (n, n, a), (old, )) def commit(self): self.log_info('commit %s' % self.name) @@ -133,7 +155,7 @@ def lifetime(self, item_lifetime=0): in seconds. Default lifetime is 0. """ now = time.time() - week = 60*60*24*7 + week = 60 * 60 * 24 * 7 return now - week + item_lifetime def close(self): diff --git a/roundup/backends/sessions_redis.py b/roundup/backends/sessions_redis.py index 87872c24e..8fd948843 100644 --- a/roundup/backends/sessions_redis.py +++ b/roundup/backends/sessions_redis.py @@ -1,3 +1,4 @@ +# ruff: noqa: SIM108 """This module defines a redis based store that's used by the CGI interface to store session and one-time-key information. @@ -19,14 +20,13 @@ __docformat__ = 'restructuredtext' import marshal -import redis import time -from roundup.anypy.html import html_escape as escape - -from roundup.i18n import _ +import redis +from roundup.anypy.html import html_escape as escape from roundup.backends.sessions_common import SessionCommon +from roundup.i18n import _ class BasicDatabase(SessionCommon): @@ -35,7 +35,7 @@ class BasicDatabase(SessionCommon): Keys are id strings, values are automatically marshalled data. ''' name = None - default_lifetime = 60*60*24*7 # 1 week + default_lifetime = 60 * 60 * 24 * 7 # 1 week # FIXME: figure out how to allow admin to change this # to repr/eval using interfaces.py or other method. @@ -98,7 +98,8 @@ def getall(self, infoid): 'database.') % {"name": self.name, "key": escape(infoid)}) - ''' def set_no_tranaction(self, infoid, **newvalues): + ''' + def set_no_transaction(self, infoid, **newvalues): """ this is missing transaction and may be affected by a race condition on update. This will work for redis-like embedded databases that don't support @@ -130,7 +131,7 @@ def getall(self, infoid): self.redis.set(infoid, self.tostr(values)) self.redis.expireat(infoid, int(values['__timestamp'])) - ''' + ''' def set(self, infoid, **newvalues): """ Implement set using watch/multi/exec to get some diff --git a/roundup/cgi/PageTemplates/Expressions.py b/roundup/cgi/PageTemplates/Expressions.py index 1bfd15bdf..78c49733a 100644 --- a/roundup/cgi/PageTemplates/Expressions.py +++ b/roundup/cgi/PageTemplates/Expressions.py @@ -117,7 +117,7 @@ def __init__(self, path): dp.reverse() def _eval(self, econtext, - list=list, isinstance=isinstance, StringType=type('')): + list=list, isinstance=isinstance, StringType=str): vars = econtext.vars path = self._path if self._dp: @@ -171,7 +171,7 @@ def _exists(self, econtext): return 0 def _eval(self, econtext, - isinstance=isinstance, StringType=type(''), render=render): + isinstance=isinstance, StringType=str, render=render): for expr in self._subexprs[:-1]: # Try all but the last subexpression, skipping undefined ones. try: diff --git a/roundup/cgi/PageTemplates/PageTemplate.py b/roundup/cgi/PageTemplates/PageTemplate.py index 13333dc8e..bbc9895d4 100644 --- a/roundup/cgi/PageTemplates/PageTemplate.py +++ b/roundup/cgi/PageTemplates/PageTemplate.py @@ -106,7 +106,7 @@ def pt_errors(self): if not self.expand: return try: self.pt_render(source=1) - except: + except Exception: return ('Macro expansion failed', '%s: %s' % sys.exc_info()[:2]) def pt_warnings(self): @@ -147,7 +147,7 @@ def read(self): return self._text try: return self.pt_render(source=1) - except: + except Exception: return ('%s\n Macro expansion failed\n %s\n-->\n%s' % (self._error_start, "%s: %s" % sys.exc_info()[:2], self._text) ) @@ -177,7 +177,7 @@ def _cook(self): try: parser.parseString(self._text) self._v_program, self._v_macros = parser.getCode() - except: + except Exception: self._v_errors = ["Compilation failed", "%s: %s" % sys.exc_info()[:2]] self._v_warnings = parser.getWarnings() diff --git a/roundup/cgi/PageTemplates/PathIterator.py b/roundup/cgi/PageTemplates/PathIterator.py index 10584978d..ca73d6622 100644 --- a/roundup/cgi/PageTemplates/PathIterator.py +++ b/roundup/cgi/PageTemplates/PathIterator.py @@ -32,7 +32,7 @@ def __bobo_traverse__(self, REQUEST, name): def same_part(self, name, ob1, ob2): if name is None: return ob1 == ob2 - if isinstance(name, type('')): + if isinstance(name, str): name = name.split('/') name = list(filter(None, name)) securityManager = getSecurityManager() diff --git a/roundup/cgi/PageTemplates/PythonExpr.py b/roundup/cgi/PageTemplates/PythonExpr.py index 2243c51f4..b13478270 100644 --- a/roundup/cgi/PageTemplates/PythonExpr.py +++ b/roundup/cgi/PageTemplates/PythonExpr.py @@ -36,7 +36,7 @@ def __init__(self, name, expr, engine): self.f_code = 'def f():\n return %s\n' % expr.strip() exec(self.f_code, d) self._f = d['f'] - except: + except Exception: raise CompilerError(('Python expression error:\n' '%s: %s') % exc_info()[:2]) self._get_used_names() diff --git a/roundup/cgi/PageTemplates/TALES.py b/roundup/cgi/PageTemplates/TALES.py index 63fce8c94..0a86105a5 100644 --- a/roundup/cgi/PageTemplates/TALES.py +++ b/roundup/cgi/PageTemplates/TALES.py @@ -230,7 +230,7 @@ def evaluateText(self, expr): text = self.evaluate(expr) if text is Default or text is None: return text - if isinstance(text, type(u'')): + if isinstance(text, str): return text else: return ustr(text) diff --git a/roundup/cgi/TAL/DummyEngine.py b/roundup/cgi/TAL/DummyEngine.py index 58a5d9415..94137695b 100644 --- a/roundup/cgi/TAL/DummyEngine.py +++ b/roundup/cgi/TAL/DummyEngine.py @@ -118,7 +118,7 @@ def evaluate(self, expression): if type == "python": try: return eval(expr, self.globals, self.locals) - except: + except Exception: raise TALESError("evaluation error in %s" % repr(expr)) if type == "position": # Insert the current source file name, line number, diff --git a/roundup/cgi/TAL/TALInterpreter.py b/roundup/cgi/TAL/TALInterpreter.py index 27d7e6c77..2bbd12d1c 100644 --- a/roundup/cgi/TAL/TALInterpreter.py +++ b/roundup/cgi/TAL/TALInterpreter.py @@ -724,7 +724,7 @@ def do_onError_tal(self, block_handler): self._stream_write = stream.write try: self.interpret(block) - except: + except Exception: exc = sys.exc_info()[1] self.restoreState(state) engine = self.engine diff --git a/roundup/cgi/TAL/talgettext.py b/roundup/cgi/TAL/talgettext.py index 6cb30265b..f81600593 100644 --- a/roundup/cgi/TAL/talgettext.py +++ b/roundup/cgi/TAL/talgettext.py @@ -33,7 +33,6 @@ found. """ -from __future__ import print_function import sys import time import getopt diff --git a/roundup/cgi/ZTUtils/Iterator.py b/roundup/cgi/ZTUtils/Iterator.py index ed1e458a2..225330687 100644 --- a/roundup/cgi/ZTUtils/Iterator.py +++ b/roundup/cgi/ZTUtils/Iterator.py @@ -189,7 +189,7 @@ def _supports(self, ob): try: if hasattr(ob, 'next') and (ob is iter(ob)): return 1 - except: + except Exception: return 0 def prep_next(self, it): diff --git a/roundup/cgi/actions.py b/roundup/cgi/actions.py index 7d12af4a6..0243772c8 100644 --- a/roundup/cgi/actions.py +++ b/roundup/cgi/actions.py @@ -92,9 +92,9 @@ def examine_url(self, url): Finally paste the whole thing together and return the new url. ''' - parsed_url_tuple = urllib_.urlparse(url) + parsed_url_tuple = urllib_.urlsplit(url) if self.base: - parsed_base_url_tuple = urllib_.urlparse(self.base) + parsed_base_url_tuple = urllib_.urlsplit(self.base) else: raise ValueError(self._("Base url not set. Check configuration.")) @@ -106,7 +106,6 @@ def examine_url(self, url): 'url_scheme': parsed_url_tuple.scheme, 'url_netloc': parsed_url_tuple.netloc, 'url_path': parsed_url_tuple.path, - 'url_params': parsed_url_tuple.params, 'url_query': parsed_url_tuple.query, 'url_fragment': parsed_url_tuple.fragment} @@ -142,16 +141,15 @@ def examine_url(self, url): raise ValueError(self._("Path component (%(url_path)s) in %(url)s " "is not properly escaped") % info) - if not allowed_pattern.match(parsed_url_tuple.params): - raise ValueError(self._("Params component (%(url_params)s) in %(url)s is not properly escaped") % info) - if not allowed_pattern.match(parsed_url_tuple.query): raise ValueError(self._("Query component (%(url_query)s) in %(url)s is not properly escaped") % info) if not allowed_pattern.match(parsed_url_tuple.fragment): raise ValueError(self._("Fragment component (%(url_fragment)s) in %(url)s is not properly escaped") % info) - return urllib_.urlunparse(parsed_url_tuple) + return urllib_.urlunparse((*parsed_url_tuple[0:3], + "", # urlsplit has no .params + *parsed_url_tuple[3:])) name = '' permissionType = None @@ -360,6 +358,23 @@ def handle(self): "Please choose another name.") % (queryname) self.client.add_error_message(message) + # Assume we duplicate query "a". When the + # response is generated, @old-queryname is set + # to 'a' in the template. This causes the 'a' + # query to be changed to the new query name + # and values. + + # So we change @queryname by appending ' - + # duplicate'. This way @old-queryname will be + # 'a - duplicate' and will not overwrite the + # query named 'a'. (but it will + # overwrite/change a query named "a - + # duplicate". Hopefully nobody uses that name + # 8-). + self.client.form['@queryname'].value = ( + # .Hint suffix added to queryname when + # a new queryname is already used. + queryname + _(" - duplicate")) return # edit the new way, query name not a key any more @@ -416,7 +431,7 @@ def fakeFilterVars(self): prop = cls.get_transitive_prop(key) if not prop: continue - if isinstance(self.form[key], type([])): + if isinstance(self.form[key], list): # search for at least one entry which is not empty for minifield in self.form[key]: if minifield.value: @@ -549,7 +564,7 @@ def handle(self): # extract the new values d = {} - for name, value in zip(props_without_id, values): + for name, value in zip(props_without_id, values, strict=True): # check permission to edit this property on this item if exists and not self.hasPermission('Edit', itemid=itemid, classname=self.classname, @@ -1278,7 +1293,7 @@ def handle(self): # a new error message clean_url = self.examine_url(self.form['__came_from'].value) - redirect_url_tuple = urllib_.urlparse(clean_url) + redirect_url_tuple = urllib_.urlsplit(clean_url) # now I have a tuple form for the __came_from url try: query = urllib_.parse_qs(redirect_url_tuple.query) @@ -1300,7 +1315,7 @@ def handle(self): (redirect_url_tuple.scheme, redirect_url_tuple.netloc, redirect_url_tuple.path, - redirect_url_tuple.params, + "", # urlsplit() has no .params urllib_.urlencode(list(sorted(query.items())), doseq=True), redirect_url_tuple.fragment)) @@ -1318,7 +1333,7 @@ def handle(self): (redirect_url_tuple.scheme, redirect_url_tuple.netloc, redirect_url_tuple.path, - redirect_url_tuple.params, + "", # urlsplit() has no .params urllib_.urlencode(list(sorted(query.items())), doseq=True), redirect_url_tuple.fragment)) raise exceptions.Redirect(redirect_url) @@ -1341,7 +1356,7 @@ def handle(self): (redirect_url_tuple.scheme, redirect_url_tuple.netloc, redirect_url_tuple.path, - redirect_url_tuple.params, + "", # urlsplit() has no .params urllib_.urlencode(list(sorted(query.items())), doseq=True), redirect_url_tuple.fragment)) raise exceptions.Redirect(redirect_url) @@ -1363,7 +1378,7 @@ def handle(self): redirect_url = urllib_.urlunparse((redirect_url_tuple.scheme, redirect_url_tuple.netloc, redirect_url_tuple.path, - redirect_url_tuple.params, + "", # urlsplit has no .params urllib_.urlencode(list(sorted(query.items())), doseq=True), redirect_url_tuple.fragment)) @@ -1688,7 +1703,9 @@ def fct(arg): if isinstance(props[col], hyperdb.Multilink): cname = props[col].classname cclass = self.db.getclass(cname) - represent[col] = repr_list(cclass, 'name') + # Use id by default to handle cases like messages + # which have no useful label field issue2551413 + represent[col] = repr_list(cclass, 'id') if not self.hasPermission(self.permissionType, classname=cname): represent[col] = repr_no_right(cclass, 'name') else: diff --git a/roundup/cgi/cgitb.py b/roundup/cgi/cgitb.py index a4a14f7ff..012869189 100644 --- a/roundup/cgi/cgitb.py +++ b/roundup/cgi/cgitb.py @@ -4,7 +4,6 @@ """Extended CGI traceback handler by Ka-Ping Yee, . """ -from __future__ import print_function __docformat__ = 'restructuredtext' import inspect diff --git a/roundup/cgi/client.py b/roundup/cgi/client.py index ed091c507..83b414325 100644 --- a/roundup/cgi/client.py +++ b/roundup/cgi/client.py @@ -14,6 +14,7 @@ import socket import stat import sys +import tempfile import time from email.mime.multipart import MIMEMultipart from traceback import format_exc @@ -56,9 +57,9 @@ class SysCallError(Exception): UsageError, ) -from roundup.mlink_expr import ExpressionError - +from roundup.logcontext import gen_trace_id, store_trace_reason from roundup.mailer import Mailer, MessageSendError +from roundup.mlink_expr import ExpressionError logger = logging.getLogger('roundup') @@ -105,6 +106,7 @@ def add_message(msg_list, msg, escape=True): msg_list.append(msg) return msg_list # for unittests + # if set to False via interfaces.py do not log a warning when # xmlrpc is used and defusedxml is not installed. WARN_FOR_MISSING_DEFUSEDXML = True @@ -130,6 +132,12 @@ def seed_pseudorandom(): import random random.seed() +_safe_char_set = {chr(x) for x in range(32,127)} +def are_header_values_safe(header_list): + for header, value in header_list.items(): + if (set(value) - _safe_char_set): + return header, value + return None class LiberalCookie(SimpleCookie): """ Python's SimpleCookie throws an exception if the cookie uses invalid @@ -278,7 +286,6 @@ class BinaryFieldStorage(cgi.FieldStorage, object): ''' def make_file(self, mode=None): ''' work around https://bugs.python.org/issue27777 ''' - import tempfile if self.length >= 0: return tempfile.TemporaryFile("wb+") return super(BinaryFieldStorage, self).make_file() @@ -434,6 +441,8 @@ class Client: # content-type. precompressed_mime_types = ["image/png", "image/jpeg"] + @gen_trace_id() + @store_trace_reason('client', extract="args[3]['PATH_INFO']") def __init__(self, instance, request, env, form=None, translator=None): # re-seed the random number generator. Is this is an instance of # random.SystemRandom it has no effect. @@ -449,9 +458,12 @@ def __init__(self, instance, request, env, form=None, translator=None): self.env = env if translator is not None: self.setTranslator(translator) - # XXX we should set self.language to "translator"'s language, - # but how to get it ? - self.language = "" + # set self.language to "translator"'s language + try: + self.language = translator.info()["language"] + except (AttributeError, KeyError): + # info() missing or no language key + self.language = "" else: self.setTranslator(TranslationService.NullTranslationService()) self.language = "" # as is the default from determine_language @@ -477,7 +489,7 @@ def __init__(self, instance, request, env, form=None, translator=None): # this is the "cookie path" for this tracker (ie. the path part of # the "base" url) - self.cookie_path = urllib_.urlparse(self.base)[2] + self.cookie_path = urllib_.urlsplit(self.base)[2] # cookies to set in http responce # {(path, name): (value, expire)} self._cookies = {} @@ -581,6 +593,8 @@ def setTranslator(self, translator=None): self._ = self.gettext = translator.gettext self.ngettext = translator.ngettext + @gen_trace_id() + @store_trace_reason('client_main', extract="args[0].env['PATH_INFO']") def main(self): """ Wrap the real main in a try/finally so we always close off the db. """ @@ -803,13 +817,18 @@ def handle_rest(self): # Must check supplied Origin header for bad value first. csrf_ok = self.handle_csrf(api=True) except (Unauthorised, UsageError) as msg: + response_code = self.response_code + if response_code < 400: + # set the code to a 400 error as this is an error + # condition. + response_code = 400 # FIXME should format return value according to # client's accept header, so application/xml, text/plain etc.. - output = s2b('{ "error": { "status": 400, "msg": "%s"}}' % - str(msg)) + output = s2b('{ "error": { "status": %s, "msg": "%s"}}' % + (response_code, str(msg))) self.reject_request(output, message_type="application/json", - status=400) + status=response_code) csrf_ok = False # we had an error, failed check return @@ -949,12 +968,40 @@ def inner_main(self): self.serve_file(designator) except SendStaticFile as file: self.serve_static_file(str(file)) - except IOError: - # IOErrors here are due to the client disconnecting before - # receiving the reply. + except ConnectionAbortedError: + # ConnectionAbortedError (subclass of IOErrors which + # is alias for OSError as of python 3.3) here are due + # to the client disconnecting before receiving the + # reply. pass + except IOError as e: + # We report this so other IOErrors aren't silenced. + # https://issues.roundup-tracker.org/issue2551405 + if self.response_code == http_.client.OK: + self.response_code = http_.client.INTERNAL_SERVER_ERROR + # Help the administrator work out what went wrong. + try: + html = ("

                                                  Traceback

                                                  " + + cgitb.html(i18n=self.translator) + + ("

                                                  Environment Variables

                                                  %s
                                                  " + % cgitb.niceDict("", self.env))) + except Exception as e: + # something broke getting a nice formatted traceback. + # use logger.exception to dump something useful to the log. + logger.exception("Unexpected IOError exception %s", e) + # then assign html default value so we return + # something to the client/admin. + html = self._(default_err_msg) + if not self.instance.config.WEB_DEBUG: + exc_info = sys.exc_info() + subject = "Error: %s" % exc_info[1] + self.send_error_to_admin(subject, html, format_exc()) + self.write_html(self._(default_err_msg)) + else: + self.write_html(html) except SysCallError: - # OpenSSL.SSL.SysCallError is similar to IOError above + # OpenSSL.SSL.SysCallError is similar to + # ConnectionAbortedError (IOError) above pass except RateLimitExceeded: raise @@ -1026,9 +1073,11 @@ def inner_main(self): except RateLimitExceeded as e: self.add_error_message(str(e)) self.write_html(self.renderContext()) - except IOError: - # IOErrors here are due to the client disconnecting before - # receiving the reply. + except ConnectionAbortedError: + # ConnectionAbortedError (subclass of IOErrors which + # is alias for OSError as of python 3.3) here are due + # to the client disconnecting before receiving the + # reply. # may happen during write_html and serve_file, too. pass except SysCallError: @@ -1050,10 +1099,19 @@ def inner_main(self): if self.response_code == http_.client.OK: self.response_code = http_.client.INTERNAL_SERVER_ERROR # Help the administrator work out what went wrong. - html = ("

                                                  Traceback

                                                  " - + cgitb.html(i18n=self.translator) - + ("

                                                  Environment Variables

                                                  %s
                                                  " - % cgitb.niceDict("", self.env))) + try: + html = ("

                                                  Traceback

                                                  " + + cgitb.html(i18n=self.translator) + + ("

                                                  Environment Variables

                                                  %s
                                                  " + % cgitb.niceDict("", self.env))) + except Exception: + # something broke getting a nice formatted traceback. + # use logger.exception to dump something useful to the log. + logger.exception("Last Resort Exception handler %s", e) + # then assign html default value so we return + # something to the client/admin. + html = self._(default_err_msg) + if not self.instance.config.WEB_DEBUG: exc_info = sys.exc_info() subject = "Error: %s" % exc_info[1] @@ -1391,8 +1449,9 @@ def check_anonymous_access(self): # allow Anonymous to view the "user" "register" template if they're # allowed to register - if (self.db.security.hasPermission('Register', self.userid, 'user') - and self.classname == 'user' and self.template == 'register'): + if (self.template == 'register' and self.classname == 'user' + and self.db.security.hasPermission('Register', + self.userid, 'user')): return # otherwise for everything else @@ -1422,7 +1481,7 @@ def is_origin_header_ok(self, api=False, credentials=False): try: origin = self.env['HTTP_ORIGIN'] except KeyError: - return self.env['REQUEST_METHOD'] == 'GET' + return self.env['REQUEST_METHOD'] in {"GET", "OPTIONS", "HEAD"} # note base https://host/... ends host with with a /, # so add it to origin. @@ -1450,7 +1509,7 @@ def is_origin_header_ok(self, api=False, credentials=False): def is_referer_header_ok(self, api=False): referer = self.env['HTTP_REFERER'] # parse referer and create an origin - referer_comp = urllib_.urlparse(referer) + referer_comp = urllib_.urlsplit(referer) # self.base always has trailing /, so add trailing / to referer_origin referer_origin = "%s://%s/" % (referer_comp[0], referer_comp[1]) @@ -1476,9 +1535,171 @@ def is_referer_header_ok(self, api=False): return True return False + def expire_exposed_keys(self, method): + """A nonce is used with a method it should not be. If the + nonce exists, report to admin so they can fix the nonce + leakage and destroy it. (Nonces used in a get are more + exposed than those used in a post.) If nonce exists in the + database, report the referer and origin headers to try to + find where this comes from so it can be fixed. If nonce + doesn't exist just ignore it. If we reported invalid + nonces, somebody could spam us with a ton of invalid keys + and fill up the logs. + + Use ?@csrf=key in a GET, HEAD, or OPTIONS request to + test this code. Python's http server library will not parse + Content sent via one of these methods. So smuggle it + via a query string when testing. + """ + came_from = [] + otks = self.db.getOTKManager() + + if 'HTTP_REFERER' in self.env: + came_from.append("Referer(%s)" % self.env['HTTP_REFERER']) + if 'HTTP_ORIGIN' in self.env: + came_from.append("Origin(%s)" % self.env['HTTP_ORIGIN']) + if not came_from: + came_from.append(self._("Request source headers not available.")) + key = self.form['@csrf'].value + if otks.exists(key): + logger.error( + self._("csrf key used with method %(method)s from: %(source)s"), + {"method": method, "source": ", ".join(came_from)}) + otks.destroy(key) + otks.commit() + + def handle_csrf_tokenless(self): + r'''Modern way to handle csrf prevention quoted from: + + https://words.filippo.io/csrf/ + + and is reformatted with added commentary in []'s: + + "In summary, to protect against CSRF applications (or, + rather, libraries and frameworks) should reject + cross-origin non-safe browser requests. The most + developer-friendly way to do so is using primarily Fetch + metadata, which requires no extra instrumentation or + configuration. + + 1. Allow all GET, HEAD, or OPTIONS requests. These are + safe methods, and are assumed not to change state at + various layers of the stack already. + + 2. If the Origin header matches an allow-list [see \*1 below] + of trusted origins, allow the request. + + Trusted origins should be configured as full origins + (e.g. https://example.com) and compared by simple + equality with the header value. + + 3. If the Sec-Fetch-Site header is present: if its value is + same-origin or none, allow the request; otherwise, + reject the request. + + This secures all major up-to-date browsers for sites + hosted on trustworthy (HTTPS or localhost) origins. + + 4. If neither the Sec-Fetch-Site nor the Origin headers are + present, allow the request. + + These requests are not from (post-2020) browsers, and + can't be affected by CSRF. + + 5. If the Origin header's host (including the port) matches + the Host header, allow the request, otherwise reject it. + + This is either a request to an HTTP origin, or by an + out-of-date browser. + + The only false positives (unnecessary blocking) of this + algorithm are requests to non-trustworthy (plain HTTP) + origins that go through a reverse proxy that changes the + Host header. That edge case can be worked around by adding + the origin [see \*2 below] to the allow-list. + + There are no false negatives in modern browsers, but + pre-2023 browsers will be vulnerable to HTTP→HTTPS + requests, because the Origin fallback is + scheme-agnostic. HSTS can be used to mitigate that (in + post-2020 browsers), but note that out-of-date browsers + are likely to have more pressing security issues." + + **Local Notes** + + \*1. The allow list of trusted origins is obtained from + the tracker's config.ini file in two places: + + 1. the web setting of the tracker section + 2. the allowed_api_origins setting in the web section + + \*2. I am not sure what is meant in this section. If the + reverse proxy changes the ORIGIN header, then setting + allowed_api_origins is a remedy. However the HOST header + is only used in step 5 and is compared to the ORIGIN + header not to a list of possible origins so.... + + The GET/HEAD/OPTIONS requests are scanned for @csrf + tokens. If any are found, they are removed from the + database. The @csrf token removal code can be deleted when + @csrf token support is removed. + ''' + found_origin = found_fetch = False + + method = self.env['REQUEST_METHOD'] + if method in {'GET', 'OPTIONS', 'HEAD'}: # list item 1 + # query arguments are mapped into form.list + # so ?@csrf=..... will pass this test. + if (self.form.list is not None) and ("@csrf" in self.form): + self.expire_exposed_keys(method) + # do return here. Keys have been obsoleted. + # we didn't do a expire cycle of session keys, + # but that's ok. + return True + + # local addition to fail fast if invalid method. + if method not in {'POST', 'PUT', 'DELETE', 'PATCH'}: + self.response_code = 405 # bad method + raise UsageError("Bad method: %s" % method) + + if 'HTTP_ORIGIN' in self.env: # list item 2 + found_origin = True + origin = self.env['HTTP_ORIGIN'] + + tracker_web = self.db.config['TRACKER_WEB'] + allowed_api_origins = self.db.config['WEB_ALLOWED_API_ORIGINS'] + + # tracker_web always ends with a /, so include it in + # the find. + if tracker_web.find(origin + '/') == 0: + return True + if origin in allowed_api_origins: + return True + + if 'HTTP_SEC_FETCH_SITE' in self.env: # list item 3 + if self.env['HTTP_SEC_FETCH_SITE'] in ['same-origin', 'none']: + return True + + raise UsageError(self._("Unable to authorize request")) + + if not (found_origin or found_fetch): # list item 4 + # not a browser request so not a CSRF by definition + return True + + parsed_origin = urllib_.urlsplit(self.env['HTTP_ORIGIN']) + if self.env['HTTP_HOST'] == parsed_origin.netloc: # list item 5 + return True + + raise UsageError(self._("Unable to authorize request")) + def handle_csrf(self, api=False): '''Handle csrf token lookup and validate current user and session + If the config.ini setting: + WEB_USE_TOKENLESS_CSRF_PROTECTION is enabled, this routine + returns the result from handle_csrf_tokenless() + and doesn't use Nonces at all. + This implements (or tries to implement) the Session-Dependent Nonce from https://seclab.stanford.edu/websec/csrf/csrf.pdf. @@ -1523,41 +1744,36 @@ def handle_csrf(self, api=False): debugging seems to be an advantage. ''' + + method = self.env['REQUEST_METHOD'] + + # reject api methods used with non-api endpoint. + if not api and method not in {"HEAD", "GET", "POST"}: + self.response_code = 405 + self.additional_headers['Allow'] = "HEAD, GET, POST" + raise UsageError("Bad method: %s" % method) + + if self.db.config['WEB_USE_TOKENLESS_CSRF_PROTECTION']: + return self.handle_csrf_tokenless() + # Create the otks handle here as we need it almost immediately. # If this is perf issue, set to None here and check below # once all header checks have passed if it needs to be opened. otks = self.db.getOTKManager() - # Assume: never allow changes via GET - if self.env['REQUEST_METHOD'] not in ['POST', 'PUT', 'DELETE']: + # Assume: never allow changes via GET/OPTIONS/HEAD + if method in {'GET', 'OPTIONS', 'HEAD'}: if (self.form.list is not None) and ("@csrf" in self.form): - # We have a nonce being used with a method it should - # not be. If the nonce exists, report to admin so they - # can fix the nonce leakage and destroy it. (nonces - # used in a get are more exposed than those used in a - # post.) Note, I don't attempt to validate here since - # existence here is the sign of a failure. If nonce - # exists try to report the referer header to try to - # find where this comes from so it can be fixed. If - # nonce doesn't exist just ignore it. Maybe we should - # report, but somebody could spam us with a ton of - # invalid keys and fill up the logs. - if 'HTTP_REFERER' in self.env: - referer = self.env['HTTP_REFERER'] - else: - referer = self._("Referer header not available.") - key = self.form['@csrf'].value - if otks.exists(key): - logger.error( - self._("csrf key used with wrong method from: %s"), - referer) - otks.destroy(key) - otks.commit() + self.expire_exposed_keys(method) # do return here. Keys have been obsoleted. # we didn't do a expire cycle of session keys, # but that's ok. return True + if method not in {'POST', 'PUT', 'DELETE', 'PATCH'}: + self.response_code = 405 + raise UsageError("Bad method: %s" % method) + config = self.instance.config current_user = self.db.getuid() @@ -1817,10 +2033,10 @@ def determine_context(self, dre=dre_url): is generally only one entry long. - if there is no path, then we are in the "home" context. - - if the path is "_file", then the additional path entry - specifies the filename of a static file we're to serve up - from the instance "html" directory. Raises a SendStaticFile - exception.(*) + - if the path is "@@file" (or "_file", then the additional + path entry specifies the filename of a static file we're to + serve up from the instance "html" directory. Raises a + SendStaticFile exception.(*) - if there is something in the path (eg "issue"), it identifies the tracker class we're to display. - if the path is an item designator (eg "issue123"), then we're @@ -1882,7 +2098,7 @@ def determine_context(self, dre=dre_url): else: self.template = '' return - if path[0] in ('_file', '@@file'): + if path[0] in ('@@file', '_file'): raise SendStaticFile(os.path.join(*path[1:])) self.classname = path[0] @@ -1926,19 +2142,19 @@ def reauth(self, exception): Can be overridden by code in tracker's interfaces.py. """ - - from roundup.anypy.vendored.cgi import MiniFieldStorage + + from roundup.anypy.cgi_ import MiniFieldStorage original_action = self.form['@action'].value if '@action' \ in self.form else "" original_template = self.template self.template = 'reauth' - self.form.list = [ x for x in self.form.list - if x.name not in ('@action', - '@csrf', - '@template' - )] + self.form.list = [x for x in self.form.list + if x.name not in ('@action', + '@csrf', + '@template' + )] # save the action and template used when the Reauth as # triggered. Will be used to resolve the change by the reauth @@ -2307,22 +2523,33 @@ def renderContext(self): if 'Content-Type' not in self.additional_headers: self.additional_headers['Content-Type'] = pt.content_type - if self.env.get('CGI_SHOW_TIMING', ''): + + show_timing = self.env.get('CGI_SHOW_TIMING', '').upper() + + # check content_type so we don't calculate timing if + # we can't display it. This also prevents matching + # '' in js, css, svg or comment strings in + # images that will mangle result. + content_type = (self.additional_headers.get('Content-Type', "") + or pt.content_type) + if (show_timing in ('COMMENT', 'INLINE') and + content_type == "text/html"): + timings = {} if self.env['CGI_SHOW_TIMING'].upper() == 'COMMENT': - timings = {'starttag': ''} + delims = {'starttag': ''} else: - timings = {'starttag': '

                                                  ', 'endtag': '

                                                  '} + delims = {'starttag': '

                                                  ', 'endtag': '

                                                  '} timings['seconds'] = time.time() - self.start s = self._( '%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n' - ) % timings + ) % {**timings, **delims} if hasattr(self.db, 'stats'): timings.update(self.db.stats) - s += self._("%(starttag)sCache hits: %(cache_hits)d," - " misses %(cache_misses)d." - " Loading items: %(get_items)f secs." - " Filtering: %(filtering)f secs." - "%(endtag)s\n") % timings + allstats = ", ".join(["{}: {:.6g}".format(key, value) + for key, value in timings.items() + if key != 'seconds']) + s += '%(starttag)s %(allstats)s %(endtag)s\n' % { + 'allstats': allstats, **delims} s += '' result = result.replace('', s) return result @@ -2348,9 +2575,7 @@ def renderContext(self): # receive an error message, and the adminstrator will # receive a traceback, albeit with less information # than the one we tried to generate above. - if sys.version_info[0] > 2: - raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) - exec('raise exc_info[0], exc_info[1], exc_info[2]') # nosec + raise exc_info[0](exc_info[1]).with_traceback(exc_info[2]) def renderError(self, error, response_code=400, use_template=True): self.response_code = response_code @@ -2445,7 +2670,7 @@ def handle_action(self): action_klass = self.get_action_class(action) # call the mapped action - if isinstance(action_klass, type('')): + if isinstance(action_klass, str): # old way of specifying actions return getattr(self, action_klass)() diff --git a/roundup/cgi/engine_jinja2.py b/roundup/cgi/engine_jinja2.py index e0f590ffd..7856515d7 100644 --- a/roundup/cgi/engine_jinja2.py +++ b/roundup/cgi/engine_jinja2.py @@ -29,7 +29,6 @@ https://github.com/mitsuhiko/jinja2/issues/174 """ -from __future__ import print_function import jinja2 import mimetypes import sys diff --git a/roundup/cgi/engine_zopetal.py b/roundup/cgi/engine_zopetal.py index 6b8987d6f..f319b3339 100644 --- a/roundup/cgi/engine_zopetal.py +++ b/roundup/cgi/engine_zopetal.py @@ -3,16 +3,14 @@ """ __docformat__ = 'restructuredtext' -import errno import mimetypes import os -import os.path import stat -from roundup.cgi.templating import StringIO, context, TALLoaderBase from roundup.cgi.PageTemplates import PageTemplate from roundup.cgi.PageTemplates.Expressions import getEngine from roundup.cgi.TAL import TALInterpreter +from roundup.cgi.templating import StringIO, TALLoaderBase, context class Loader(TALLoaderBase): @@ -32,9 +30,8 @@ def load(self, tplname): # has it changed? try: stime = os.stat(src)[stat.ST_MTIME] - except os.error as error: - if error.errno != errno.ENOENT: - raise + except FileNotFoundError: + pass if src in self.templates and \ stime <= self.templates[src].mtime: diff --git a/roundup/cgi/form_parser.py b/roundup/cgi/form_parser.py index 24e359a08..5e2802ec5 100644 --- a/roundup/cgi/form_parser.py +++ b/roundup/cgi/form_parser.py @@ -362,13 +362,13 @@ def parse(self, create=0): assert isinstance(proptype, hyperdb.Multilink) # value is a file upload... we *always* handle multiple # files here (html5) - if not isinstance(value, type([])): + if not isinstance(value, list): value = [value] elif isinstance(proptype, hyperdb.Multilink): value = self.extractFormList(value) else: # multiple values are not OK - if isinstance(value, type([])): + if isinstance(value, list): raise FormError(self._( 'You have submitted more than one ' 'value for the %s property') % propname) @@ -397,7 +397,7 @@ def parse(self, create=0): else: raise FormError(self._('Password and confirmation text ' 'do not match')) - if isinstance(confirm, type([])): + if isinstance(confirm, list): raise FormError(self._( 'You have submitted more than one ' 'value for the %s property') % propname) @@ -657,7 +657,7 @@ def extractFormList(self, value): MiniFieldStorage('value') ''' # multiple values are OK - if isinstance(value, type([])): + if isinstance(value, list): # it's a list of MiniFieldStorages - join then into values = ','.join([i.value.strip() for i in value]) else: diff --git a/roundup/cgi/templating.py b/roundup/cgi/templating.py index b0b53f62b..175bcce16 100644 --- a/roundup/cgi/templating.py +++ b/roundup/cgi/templating.py @@ -27,7 +27,6 @@ import textwrap from roundup import date, hyperdb, support -from roundup.anypy import scandir_ from roundup.anypy import urllib_ from roundup.anypy.cgi_ import cgi from roundup.anypy.html import html_escape @@ -40,6 +39,7 @@ try: from docutils.core import publish_parts as ReStructuredText + from docutils.writers.html4css1 import Writer as html_writer except ImportError: ReStructuredText = None try: @@ -240,11 +240,19 @@ def _options(config): def anti_csrf_nonce(client, lifetime=None): ''' Create a nonce for defending against CSRF attack. - Then it stores the nonce, the session id for the user - and the user id in the one time key database for use - by the csrf validator that runs in the client::inner_main + If tokenless/nonceless CSRF is activated, return 0 and + continue. 0 should never be a value in the otks db, but even + if it is, it will never be checked if tokenless csrf is used. + + If the nonce is used, store the nonce, the session id for the + user and the user id in the one time key database for use by + the csrf validator that runs in the client::inner_main module/function. + ''' + if client.db.config['WEB_USE_TOKENLESS_CSRF_PROTECTION']: + return "0" + otks = client.db.getOTKManager() key = otks.getUniqueKey() # lifetime is in minutes. @@ -776,7 +784,7 @@ def getItem(self, itemid, num_re=num_re): """ Get an item of this class by its item id. """ # make sure we're looking at an itemid - if not isinstance(itemid, type(1)) and not num_re.match(itemid): + if not isinstance(itemid, int) and not num_re.match(itemid): itemid = self._klass.lookup(itemid) return HTMLItem(self._client, self.classname, itemid) @@ -846,7 +854,7 @@ def csv(self): value = self._klass.get(nodeid, name) if value is None: l.append('') - elif isinstance(value, type([])): + elif isinstance(value, list): l.append(':'.join(map(str, value))) else: l.append(str(self._klass.get(nodeid, name))) @@ -1265,7 +1273,7 @@ def history(self, direction='descending', dre=re.compile(r'^\d+$'), if isinstance(prop, hyperdb.Multilink) and args[k]: ml = [] for linkid in args[k]: - if isinstance(linkid, type(())): + if isinstance(linkid, tuple): sublabel = linkid[0] + ' ' linkids = linkid[1] else: @@ -1887,7 +1895,7 @@ def rst(self, hyperlink=1): raise return u2s(ReStructuredText( - s, writer_name="html", + s, writer=html_writer(), settings_overrides=self.rst_defaults)["html_body"]) def markdown(self, hyperlink=1): @@ -2717,7 +2725,7 @@ def __init__(self, *args, **kwargs): # ignore these errors to preserve user input try: display_value.sort(key=keyfun) - except: + except Exception: pass self._value = display_value @@ -3034,7 +3042,7 @@ def handleListCGIValue(value): """ Value is either a single item or a list of items. Each item has a .value that we're actually interested in. """ - if isinstance(value, type([])): + if isinstance(value, list): return [value.value for value in value] else: value = value.value.strip() @@ -3200,7 +3208,7 @@ def _post_init(self): self.filterspec[name] = lookupIds(db, prop, handleListCGIValue(fv)) else: - if isinstance(fv, type([])): + if isinstance(fv, list): self.filterspec[name] = [v.value for v in fv] elif name == 'id': # special case "id" property @@ -3439,6 +3447,9 @@ def base_javascript(self): alert("Your request is being processed.\\nPlease be patient."); return false; } + + window.setTimeout("submitted = false;", 5000) + submitted = true; return true; } diff --git a/roundup/cgi/wsgi_handler.py b/roundup/cgi/wsgi_handler.py index f730503dc..50ffec43d 100644 --- a/roundup/cgi/wsgi_handler.py +++ b/roundup/cgi/wsgi_handler.py @@ -13,6 +13,7 @@ from roundup.anypy.strings import s2b from roundup.cgi import TranslationService from roundup.cgi.client import BinaryFieldStorage +from roundup.logcontext import gen_trace_id, set_processName, store_trace_reason BaseHTTPRequestHandler = http_.server.BaseHTTPRequestHandler DEFAULT_ERROR_MESSAGE = http_.server.DEFAULT_ERROR_MESSAGE @@ -96,12 +97,21 @@ def __init__(self, home, debug=False, timing=False, lang=None, else: self.translator = None - if "cache_tracker" not in self.feature_flags or \ - self.feature_flags["cache_tracker"] is not False: + if self.use_cached_tracker(): self.tracker = roundup.instance.open(self.home, not self.debug) else: self.preload() + def use_cached_tracker(self): + return ( + "cache_tracker" not in self.feature_flags or + self.feature_flags["cache_tracker"] is not False) + + # Client entry point strips initial / from PATH_INFO so + # We need to do it here as well to prevent mismatch. + @set_processName("wsgi_handler") + @gen_trace_id() + @store_trace_reason("wsgi", extract="args[1]['PATH_INFO'][1:]") def __call__(self, environ, start_response): """Initialize with `apache.Request` object""" request = RequestHandler(environ, start_response) @@ -112,7 +122,7 @@ def __call__(self, environ, start_response): # This I hope will result in self.form=None environ['CONTENT_LENGTH'] = 0 else: - code = 501 + code = 405 message, explain = BaseHTTPRequestHandler.responses[code] request.start_response([('Content-Type', 'text/html')], code) @@ -132,8 +142,7 @@ def __call__(self, environ, start_response): else: form = BinaryFieldStorage(fp=environ['wsgi.input'], environ=environ) - if "cache_tracker" not in self.feature_flags or \ - self.feature_flags["cache_tracker"] is not False: + if self.use_cached_tracker(): client = self.tracker.Client(self.tracker, request, environ, form, self.translator) try: diff --git a/roundup/configuration.py b/roundup/configuration.py index 421d91bcd..a278c221d 100644 --- a/roundup/configuration.py +++ b/roundup/configuration.py @@ -8,7 +8,6 @@ # where not expected by the Python code. Thus, a version check is # used here instead of try/except. import binascii -import errno import getopt import logging import logging.config @@ -17,12 +16,14 @@ import smtplib import sys import time +import traceback import roundup.date from roundup.anypy import random_ from roundup.anypy.strings import b2s from roundup.backends import list_backends from roundup.i18n import _ +from roundup.logcontext import gen_trace_id, get_context_info if sys.version_info[0] > 2: import configparser # Python 3 @@ -43,6 +44,16 @@ def __str__(self): return self.args[0] +class LoggingConfigError(ConfigurationError): + def __init__(self, message, **attrs): + super().__init__(message) + for key, value in attrs.items(): + self.__setattr__(key, value) + + def __str__(self): + return self.args[0] + + class NoConfigError(ConfigurationError): """Raised when configuration loading fails @@ -263,7 +274,8 @@ def load_ini(self, config): try: if config.has_option(self.section, self.setting): self.set(config.get(self.section, self.setting)) - except configparser.InterpolationSyntaxError as e: + except (configparser.InterpolationSyntaxError, + configparser.InterpolationMissingOptionError) as e: raise ParsingOptionError( _("Error in %(filepath)s with section [%(section)s] at " "option %(option)s: %(message)s") % { @@ -286,7 +298,7 @@ def _value2str(self, value): return "no" def str2value(self, value): - if isinstance(value, type("")): + if isinstance(value, str): _val = value.lower() if _val in ("yes", "true", "on", "1"): _val = 1 @@ -371,17 +383,17 @@ class HtmlToTextOption(Option): """What module should be used to convert emails with only text/html parts into text for display in roundup. Choose from beautifulsoup - 4, dehtml - the internal code or none to disable html to text - conversion. If beautifulsoup chosen but not available, dehtml will - be used. + 4, justhtml, dehtml - the internal code or none to disable html to + text conversion. If beautifulsoup or justhtml is chosen but not + available, dehtml will be used. """ - class_description = "Allowed values: beautifulsoup, dehtml, none" + class_description = "Allowed values: beautifulsoup, justhtml, dehtml, none" def str2value(self, value): _val = value.lower() - if _val in ("beautifulsoup", "dehtml", "none"): + if _val in ("beautifulsoup", "justhtml", "dehtml", "none"): return _val else: raise OptionValueError(self, value, self.class_description) @@ -565,6 +577,52 @@ def get(self): return None +class LoggingFormatOption(Option): + """Escape/unescape logging format string '%(' <-> '%%(' + + Config file parsing allows variable interpolation using + %(keyname)s. However this is exactly the format that we need + for creating a logging format string. So we tell the user to + quote the string using %%(...). Then we turn %%( -> %( when + retrieved and turn %( into %%( when saving the file. + """ + + class_description = ("Allowed value: Python LogRecord attribute named " + "formats with % *sign doubled*.\n" + "Also you can include the following attributes:\n" + " %%(trace_id)s %%(trace_reason)s and %%(pct_char)s" + ) + + def str2value(self, value): + """Validate and convert value of logging format string. + + This does a dirty check to see if a token is missing a + specifier. So "%%(ascdate)s %%(level) " would fail because of + the 's' missing after 'level)'. But "%%(ascdate)s %%(level)s" + would pass. + + Note that '%(foo)s' (i.e. unescaped substitution) generates + a error from the ini parser with a less than wonderful message. + """ + unquoted_val = value.replace("%%(", "%(") + + # regexp matches all current logging record object attribute names. + scanned_result = re.sub(r'%\([A-Za-z_]+\)\S', '', unquoted_val) + if scanned_result.find('%(') != -1: + raise OptionValueError( + self, unquoted_val, + "Check that all substitution tokens have a format " + "specifier after the ). Unrecognized use of %%(...) in: " + "%s" % scanned_result) + + return str(unquoted_val) + + def _value2str(self, value): + """Replace %( with %%( to quote the format substitution param. + """ + return value.replace("%(", "%%(") + + class OriginHeadersListOption(Option): """List of space seperated origin header values. @@ -727,16 +785,11 @@ def get(self): try: with open(filepath) as f: _val = f.readline().rstrip() - # except FileNotFoundError: py2/py3 - # compatible version - except EnvironmentError as e: - if e.errno != errno.ENOENT: - raise - else: - raise OptionValueError( - self, _val, - "Unable to read value for %s. Error opening " - "%s: %s." % (self.name, e.filename, e.args[1])) + except FileNotFoundError as e: + raise OptionValueError( + self, _val, + "Unable to read value for %s. Error opening " + "%s: %s." % (self.name, e.filename, e.args[1])) return self.str2value(_val) def validate(self, options): @@ -988,9 +1041,9 @@ def _value2str(self, value): return value.pattern def str2value(self, value): - if not isinstance(value, type(u'')): + if not isinstance(value, str): value = str(value) - if not isinstance(value, type(u'')): + if not isinstance(value, str): # if it is 7-bit ascii, use it as string, # otherwise convert to unicode. try: @@ -1316,6 +1369,31 @@ def str2value(self, value): "Defines the interval in seconds over which api login failures\n" "are recorded. It allows api_failed_login_limit login failures\n" "in this time interval. Tune this as needed.\n"), + (BooleanOption, 'use_tokenless_csrf_protection', 'no', + "Use a more modern CSRF protection method. If enabled, the\n" + "other CSRF settings below are disabled and a CSRF token is\n" + "not needed when creating your forms.\n"), + (OriginHeadersListOption, 'allowed_api_origins', "", + """A comma separated list of additonal valid Origin header +values used when enforcing the origin header. If token style CSRF +protection is enabled, it is used only for the api URLs (/rest and +/xmlrpc). It is not used for the standard html URL's. If tokenless +style csrf protection is enabled, it is used for URLs. + +These strings must precisely match the value of the Origin header. For +example, 'https://bar.edu' and 'https://Bar.edu' are two different +Origin values. Note origin values consist of scheme://host without any +path component. Thus 'https://bar.edu/' is not valid. The value '*' +can be used to match any origin when token style CSRF is enabled. It +must be placed first in the list if used. Note that the '*' value +allows any web page on the internet to make anonymous requests against +your Roundup tracker. + +You must configure this if you have a web application on a different +origin that accesses your Roundup instance. + +(The origin from the tracker.web setting in config.ini is +always valid and does not need to be specified.)"""), (CsrfSettingOption, 'csrf_enforce_token', "yes", """How do we deal with @csrf fields in posted forms. Set this to 'required' to block the post and notify @@ -1366,25 +1444,6 @@ def str2value(self, value): log if the header is invalid or missing, but accept the post. Set this to 'no' to ignore the header and accept the post."""), - (OriginHeadersListOption, 'allowed_api_origins', "", - """A comma separated list of additonal valid Origin header -values used when enforcing the header origin. They are used -only for the api URL's (/rest and /xmlrpc). They are not -used for the usual html URL's. These strings must match the -value of the Origin header exactly. So 'https://bar.edu' and -'https://Bar.edu' are two different Origin values. Note that -the origin value is scheme://host. There is no path -component. So 'https://bar.edu/' would never be valid. -The value '*' can be used to match any origin. It must be -first in the list if used. Note that this value allows -any web page on the internet to make anonymous requests -against your Roundup tracker. - -You need to set these if you have a web application on a -different origin accessing your Roundup instance. - -(The origin from the tracker.web setting in config.ini is -always valid and does not need to be specified.)"""), (CsrfSettingOption, 'csrf_enforce_header_x-forwarded-host', "yes", """Verify that the X-Forwarded-Host http header matches the host part of the tracker.web setting in config.ini. @@ -1604,6 +1663,10 @@ def str2value(self, value): "Minimal severity level of messages written to log file.\n" "If above 'config' option is set, this option has no effect.\n" "Allowed values: DEBUG, INFO, WARNING, ERROR"), + (LoggingFormatOption, "format", + "%(asctime)s %(trace_id)s %(levelname)s %(message)s", + "Format of the logging messages with all '%' signs\n" + "doubled so they are not interpreted by the config file."), (BooleanOption, "disable_loggers", "no", "If set to yes, only the loggers configured in this section will\n" "be used. Yes will disable gunicorn's --access-logfile.\n"), @@ -1748,11 +1811,11 @@ def str2value(self, value): (HtmlToTextOption, "convert_htmltotext", "none", "If an email has only text/html parts, use this module\n" "to convert the html to text. Choose from beautifulsoup 4,\n" - "dehtml - (internal code), or none to disable conversion.\n" - "If 'none' is selected, email without a text/plain part\n" - "will be returned to the user with a message. If\n" - "beautifulsoup is selected but not installed dehtml will\n" - "be used instead."), + "justhtml, dehtml - (internal code), or none to disable\n" + "conversion. If 'none' is selected, email without a text/plain\n" + "part will be returned to the user with a message. If\n" + "beautifulsoup or justhtml is selected but not installed\n" + "dehtml will be used instead."), (BooleanOption, "keep_real_from", "no", "When handling emails ignore the Resent-From:-header\n" "and use the original senders From:-header instead.\n" @@ -2322,6 +2385,18 @@ def _get_unset_options(self): def _get_name(self): return self["TRACKER_NAME"] + @gen_trace_id() + def _logging_test(self, sinfo, msg="test %(a)s\n%(sinfo)s", args=None): + """Test method for logging formatting. + + Not used in production. + """ + logger = logging.getLogger('roundup') + if args: + logger.info(msg, *args) + else: + logger.info(msg, extra={"a": "a_var", "sinfo": sinfo}) + def reset(self): Config.reset(self) if self.ext: @@ -2330,22 +2405,324 @@ def reset(self): self.detectors.reset() self.init_logging() + def gather_callstack(self, keep_full_stack=False): + # Locate logging call in stack + stack = traceback.extract_stack() + if keep_full_stack: + last_frame_index = len(stack) + else: + for last_frame_index, frame in enumerate(stack): + # Walk from the top of stack looking for + # "logging" in filename (really + # filepath). Can't use /logging/ as + # windows uses \logging\. + # + # Filtering by looking for "logging" in + # the filename isn't great. + if "logging" in frame.filename: + break + if not keep_full_stack: + stack = stack[0:last_frame_index] + return (stack, last_frame_index) + + def context_filter(self, record): + """Add context to record, expand context references in record.msg + Define pct_char as '%' + """ + + # This method can be called multiple times on different handlers. + # However it modifies the record on the first call and the changes + # persist in the record. So we only want to be called once per + # record. + if hasattr(record, "ROUNDUP_CONTEXT_FILTER_CALLED"): + return True + + for name, value in get_context_info(): + if not hasattr(record, name): + setattr(record, name, value) + continue + if (name == "processName" and + isinstance(value, str) and + getattr(record, name) == "MainProcess"): + setattr(record, name, value) + + record.pct_char = "%" + record.ROUNDUP_CONTEXT_FILTER_CALLED = True + + if hasattr(record, "sinfo"): + # sinfo has to be set via extras argument to logging commands + # to activate this. + # + # sinfo value can be: + # non-integer: "", None etc. Print 5 elements of + # stack before logging call + # integer N > 0: print N elements of stack before + # logging call + # 0: print whole stack before logging call + # integer N < 0: undocumented print stack starting at + # extract_stack() below. I.E. do not set bottom of + # stack to the logging call. + # if |N| is greater than stack height, print whole stack. + stack_height = record.sinfo + keep_full_stack = False + + if isinstance(stack_height, int): + if stack_height < 0: + keep_full_stack = True + stack_height = abs(stack_height) + if stack_height == 0: + # None will set value to actual stack height. + stack_height = None + else: + stack_height = 5 + + stack, last_frame_index = self.gather_callstack(keep_full_stack) + + if stack_height is None: + stack_height = last_frame_index + elif stack_height > last_frame_index: + stack_height = last_frame_index # start at frame 0 + + # report the stack info + record.sinfo = "".join( + traceback.format_list( + stack[last_frame_index - stack_height:last_frame_index] + ) + ) + + # if args are present, just return. Logging will + # expand the arguments. + if record.args: + return True + + # Since args not present, try formatting msg using + # named arguments. + try: + record.msg = record.msg % record.__dict__ + except (ValueError, TypeError): + # ValueError: means there is a % sign in the msg + # somewhere that is not meant to be a format token. So + # just leave msg unexpanded. + # + # TypeError - a positional format string is being + # handled without setting record.args. E.G. + # .info("result is %f") + # Leave message unexpanded. + pass + return True + + def add_logging_context_filter(self): + """Update log record with contextvar values and expand msg + + The contextvar values are stored as attributes on the log + record object in record.__dict__. They should not exist + when this is called. Do not overwrite them if they do exist + as they can be set in a logger call using:: + + logging.warning("a message", extra = {"trace_id": foo}) + + the extra argument/parameter. + + Attempt to expand msg using the variables in + record.__dict__. This makes:: + + logging.warning("the URL was: %(trace_reason)s") + + work and replaces the ``%(trace_reason)s`` token with the value. + Note that you can't use positional params and named params + together. For example:: + + logging.warning("user = %s and URL was: %(trace_reason)s", user) + + will result in an exception in logging when it formats the + message. + + Also ``%(pct_char)`` is defined to allow the addition of % + characters in the format string as bare % chars can't make + it past the configparser and %% encoded ones run into issue + with the format verifier. + + Calling a logger (.warning() etc.) with the argument:: + + extra={"sinfo": an_int} + + will result in a stack trace starting at the logger call + and going up the stack for `an_int` frames. Using "True" + in place of `an_int` will print only the call to the logger. + + Note that logging untrusted strings in the msg set by user + (untrusted) may be an issue. So don't do something like: + + .info("%s" % web_url) + + as web_url could include '%(trace_id)s'. Instead use: + + .info("%(url)s", extra=("url": web_url)) + + Even in the problem case, I think the damage is contained since: + + * data doesn't leak as the log string is not exposed to the + user. + + * the log string isn't executed or used internally. + + * log formating can raise an exception. But this won't + affect the application as the exception is swallowed in + the logging package. The raw message would be printed by + the fallback logging handler. + + but if it is a concern, make sure user data is added using + the extra dict when calling one of the logging functions. + """ + loggers = [logging.getLogger(name) for name in + logging.root.manager.loggerDict] + # append the root logger as it is not listed in loggerDict + loggers.append(logging.getLogger()) + for logger in loggers: + for hdlr in logger.handlers: + hdlr.addFilter(self.context_filter) + + def load_config_dict_from_json_file(self, filename): + import json + comment_re = re.compile( + r"""^\s*//#.* # comment at beginning of line possibly indented. + | # or + ^(.*)\s\s\s\//.* # comment char preceeded by at least three spaces. + """, re.VERBOSE) + + config_list = [] + with open(filename) as config_file: + for line in config_file: + match = comment_re.search(line) + if match: + if match.lastindex: + config_list.append(match.group(1) + "\n") + else: + # insert blank line for comment line to + # keep line numbers in sync. + config_list.append("\n") + continue + config_list.append(line) + + try: + config_dict = json.loads("".join(config_list)) + except json.decoder.JSONDecodeError as e: + error_at_doc_line = e.lineno + # subtract 1 - zero index on config_list + # remove '\n' for display + try: + line = config_list[error_at_doc_line - 1][:-1] + except IndexError: + line = _("Error found at end of file. Maybe missing a " + "block closing '}'.") + + hint = "" + if line.find('//') != -1: + hint = "\nMaybe bad inline comment, 3 spaces needed before //." + + raise LoggingConfigError( + 'Error parsing json logging dict (%(file)s) ' + 'near \n\n %(line)s\n\n' + '%(msg)s: line %(lineno)s column %(colno)s.%(hint)s' % + {"file": filename, + "line": line, + "msg": e.msg, + "lineno": error_at_doc_line, + "colno": e.colno, + "hint": hint}, + config_file=self.filepath, + source="json.loads" + ) + + return config_dict + def init_logging(self): _file = self["LOGGING_CONFIG"] if _file and os.path.isfile(_file): - logging.config.fileConfig( - _file, - disable_existing_loggers=self["LOGGING_DISABLE_LOGGERS"]) + if _file.endswith(".ini"): + try: + logging.config.fileConfig( + _file, + disable_existing_loggers=self[ + "LOGGING_DISABLE_LOGGERS"]) + except (ValueError, RuntimeError, configparser.ParsingError, + KeyError, NameError, ModuleNotFoundError) as e: + # configparser.DuplicateOptionError includes + # filename, line number and a useful error. + # so we don't have to augment it. + context = [] + if hasattr(e, '__context__') and e.__context__: + # get additional error info. + context.append(str(e.__context__)) + if hasattr(e, '__doc__') and e.__doc__: + context.append(e.__doc__) + + if isinstance(e, KeyError): + context.append("No section found with this name.") + if not context: + context = ["No additional information available."] + + raise LoggingConfigError( + "Error loading logging config from %(file)s.\n\n" + " %(msg)s\n\n%(context)s\n" % { + "file": _file, + "msg": type(e).__name__ + ": " + str(e), + "context": " ".join(context), + } + ) + elif _file.endswith(".json"): + config_dict = self.load_config_dict_from_json_file(_file) + try: + logging.config.dictConfig(config_dict) + except ValueError as e: + # docs say these exceptions: + # ValueError, TypeError, AttributeError, ImportError + # could be raised, but + # looking through the code, it looks like + # configure() maps all exceptions (including + # ImportError, TypeError) raised by functions to + # ValueError. + context = "No additional information available." + if hasattr(e, '__context__') and e.__context__: + # get additional error info. E.G. if INFO + # is replaced by MANGO, context is: + # ValueError("Unknown level: 'MANGO'") + # while str(e) is "Unable to configure handler 'access'" + context = e.__context__ + + raise LoggingConfigError( + 'Error loading logging dict from %(file)s.\n' + '%(msg)s\n%(context)s\n' % { + "file": _file, + "msg": type(e).__name__ + ": " + str(e), + "context": context + }, + config_file=self.filepath, + source="dictConfig" + ) + else: + raise OptionValueError( + self.options['LOGGING_CONFIG'], + _file, + "Unable to load logging config file. " + "File extension must be '.ini' or '.json'.\n" + ) + + self.add_logging_context_filter() return + if _file: + raise OptionValueError(self.options['LOGGING_CONFIG'], + _file, + "Unable to find logging config file.") + _file = self["LOGGING_FILENAME"] # set file & level on the roundup logger logger = logging.getLogger('roundup') hdlr = logging.FileHandler(_file) if _file else \ logging.StreamHandler(sys.stdout) - formatter = logging.Formatter( - '%(asctime)s %(levelname)s %(message)s') + formatter = logging.Formatter(self["LOGGING_FORMAT"]) hdlr.setFormatter(formatter) # no logging API to remove all existing handlers!?! for h in logger.handlers: @@ -2353,6 +2730,15 @@ def init_logging(self): logger.removeHandler(hdlr) logger.handlers = [hdlr] logger.setLevel(self["LOGGING_LEVEL"] or "ERROR") + if 'pytest' not in sys.modules: + # logger.propatgate is True by default. This is + # needed so that pytest caplog code will work. In + # production leaving it set to True relogs everything + # using the root logger with logging BASIC_FORMAT: + # "%(level)s:%(name)s:%(message)s + logger.propagate = False + + self.add_logging_context_filter() def validator(self, options): """ Validate options once all options are loaded. diff --git a/roundup/date.py b/roundup/date.py index 6515ee320..eda57407f 100644 --- a/roundup/date.py +++ b/roundup/date.py @@ -17,7 +17,6 @@ """Date, time and time interval handling. """ -from __future__ import print_function __docformat__ = 'restructuredtext' import calendar @@ -324,6 +323,9 @@ class Date: >>> test_fin(u) ''' + __slots__ = ("year", "month", "day", "hour", "minute", "second", + "_", "ngettext", "translator") + def __init__(self, spec='.', offset=0, add_granularity=False, translator=i18n): """Construct a date given a specification and a time zone offset. @@ -355,7 +357,7 @@ def __init__(self, spec='.', offset=0, add_granularity=False, self.second += spec.microsecond/1000000. return - if isinstance(spec, type('')): + if isinstance(spec, str): self.set(spec, offset=offset, add_granularity=add_granularity) return elif hasattr(spec, 'tuple'): @@ -962,7 +964,7 @@ def __add__(self, other): asgn = a[0] b = other.get_tuple() bsgn = b[0] - i = [asgn*x + bsgn*y for x, y in zip(a[1:], b[1:])] + i = [asgn*x + bsgn*y for x, y in zip(a[1:], b[1:], strict=True)] i.insert(0, 1) i = fixTimeOverflow(i) return Interval(i, translator=self.translator) @@ -982,7 +984,7 @@ def __sub__(self, other): asgn = a[0] b = other.get_tuple() bsgn = b[0] - i = [asgn*x - bsgn*y for x, y in zip(a[1:], b[1:])] + i = [asgn*x - bsgn*y for x, y in zip(a[1:], b[1:], strict=True)] i.insert(0, 1) i = fixTimeOverflow(i) return Interval(i, translator=self.translator) diff --git a/roundup/dehtml.py b/roundup/dehtml.py index cd913a0d1..9a58733ea 100644 --- a/roundup/dehtml.py +++ b/roundup/dehtml.py @@ -1,10 +1,12 @@ -from __future__ import print_function - import sys from roundup.anypy.strings import u2s, uchr +# ruff PLC0415 ignore imports not at top of file +# ruff RET505 ignore else after return +# ruff: noqa: PLC0415 RET505 + _pyver = sys.version_info[0] @@ -28,6 +30,108 @@ def html2text(html): return u2s(soup.get_text("\n", strip=True)) + self.html2text = html2text + elif converter == "justhtml": + from justhtml import stream + + def html2text(html): + # The below does not work. + # Using stream parser since I couldn't seem to strip + # 'script' and 'style' blocks. But stream doesn't + # have error reporting or stripping of text nodes + # and dropping empty nodes. Also I would like to try + # its GFM markdown output too even though it keeps + # tables as html and doesn't completely covert as + # this would work well for those supporting markdown. + # + # ctx used for for testing since I have a truncated + # test doc. It eliminates error from missing DOCTYPE + # and head. + # + #from justhtml import JustHTML + # from justhtml.context import FragmentContext + # + #ctx = FragmentContext('html') + #justhtml = JustHTML(html,collect_errors=True, + # fragment_context=ctx) + # I still have the text output inside style/script tags. + # with :not(style, script). I do get text contents + # with query("style, script"). + # + #return u2s("\n".join( + # [elem.to_text(separator="\n", strip=True) + # for elem in justhtml.query(":not(style, script)")]) + # ) + + # define inline elements so I can accumulate all unbroken + # text in a single line with embedded inline elements. + # 'br' is inline but should be treated it as a line break + # and element before/after should not be accumulated + # together. + inline_elements = ( + "a", + "address", + "b", + "cite", + "code", + "em", + "i", + "img", + "mark", + "q", + "s", + "small", + "span", + "strong", + "sub", + "sup", + "time") + + # each line is appended and joined at the end + text = [] + # the accumulator for all text in inline elements + text_accumulator = "" + # if set skip all lines till matching end tag found + # used to skip script/style blocks + skip_till_endtag = None + # used to force text_accumulator into text with added + # newline so we have a blank line between paragraphs. + _need_parabreak = False + + for event, data in stream(html): + if event == "end" and skip_till_endtag == data: + skip_till_endtag = None + continue + if skip_till_endtag: + continue + if (event == "start" and + data[0] in ('script', 'style')): + skip_till_endtag = data[0] + continue + if (event == "start" and + text_accumulator and + data[0] not in inline_elements): + # add accumulator to "text" + text.append(text_accumulator) + text_accumulator = "" + _need_parabreak = False + elif event == "text": + if not data.isspace(): + text_accumulator = text_accumulator + data + _need_parabreak = True + elif (_need_parabreak and + event == "start" and + data[0] == "p"): + text.append(text_accumulator + "\n") + text_accumulator = "" + _need_parabreak = False + + # save anything left in the accumulator at end of document + if text_accumulator: + # add newline to match dehtml and beautifulsoup + text.append(text_accumulator + "\n") + return u2s("\n".join(text)) + self.html2text = html2text else: raise ImportError @@ -96,6 +200,16 @@ def html2text(html): if __name__ == "__main__": + # ruff: noqa: B011 S101 + + try: + assert False + except AssertionError: + pass + else: + print("Error, assertions turned off. Test fails") + sys.exit(1) + html = """ #\n #' html/search.html # sphinx inserts \: for : in meta tags. Get rid of the \ in @@ -26,7 +28,6 @@ html: doc_links ## make standalone HTML files (KEEP_HTML=1 speeds build) cp robots.txt html/robots.txt mkdir -p html/signatures && cp signatures/*.asc html/signatures cp --no-clobber -r docs/html_extra/. html/docs/. - cp htaccess html/.htaccess @echo; \ l=$$(find html -name '*.orig' -o -name '*~' | tee /dev/tty | wc -l);\ if [ $$l -ne 0 ]; then echo "Garbage files found" && false; fi @@ -39,7 +40,7 @@ clean: ## remove all produced files linkcheck: ## check external links for existence mkdir -p $(TMP)/linkcheck $(TMP)/doctrees - sphinx-build -b linkcheck -d $(TMP)/doctrees . $(TMP)/linkcheck + $(SPHINX) -b linkcheck -d $(TMP)/doctrees . $(TMP)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in .build/linkcheck/output.txt." @@ -62,23 +63,36 @@ sourceforge_dev_sync: ## sync html directory to sourceforce /dev_docs subdir # --delete-exclude # IS NOT (and must not be) SET read -p "sync to dev_docs y/N? " resp; echo "$$resp" | grep -i "^y" - rsync -av --no-times --delete --exclude 'docs_backup*' \ - --exclude '.buildinfo' \ - --backup --backup-dir docs_backup-`date --iso-8601=seconds` \ + # --mkpath doesn't work for rsync on sourceforge so use scripted sftp + # if it fails (directory exists), that's ok it still exits with 0 + printf 'cd /home/project-web/roundup/htdocs\nmkdir dev_docs' | \ + sftp rouilj@web.sourceforge.net + rsync -avz --no-times --delete \ + --exclude 'docs_backup*' --exclude '.buildinfo' --backup \ + --backup-dir docs_backup-`date --iso-8601=seconds` \ html/. \ web.sourceforge.net:/home/project-web/roundup/htdocs/dev_docs/. sourceforge_prod_sync: ## sync html directory to sourceforce production website read -p "sync to production y/N? " resp; echo "$$resp" | grep -i "^y" - rsync -av --no-times --delete --exclude 'docs_backup*' \ - --backup --backup-dir docs_backup-`date --iso-8601=seconds` \ - html/. \ + rsync -avz --no-times --delete --exclude 'docs_backup*' \ + --exclude 'ahrefs_*' --backup \ + --backup-dir docs_backup-`date --iso-8601=seconds` \ + --checksum html/. \ web.sourceforge.net:/home/project-web/roundup/htdocs/. +sourceforge_prod_pull: ## sync sourceforce production website to local web_html + read -p "pull from production y/N? " resp; echo "$$resp" | grep -i "^y" + test -d web_html || mkdir web_html + rsync -avz --no-times --delete \ + --checksum \ + web.sourceforge.net:/home/project-web/roundup/htdocs/. \ + web_html/. + sourceforge_home_sync: ## sync html directory to sourceforge:~/roundup_docs read -p "sync to home y/N? " resp; echo "$$resp" | grep -i "^y" - rsync -av --no-times --delete --exclude 'docs_backup*' \ + rsync -avz --no-times --delete --exclude 'docs_backup*' \ --backup --backup-dir docs_backup-`date --iso-8601=seconds` \ html/. \ web.sourceforge.net:roundup_docs/. diff --git a/website/www/_static/style.css b/website/www/_static/style.css index aa319c4b2..99d0d7834 100644 --- a/website/www/_static/style.css +++ b/website/www/_static/style.css @@ -186,6 +186,8 @@ div[class^=highlight-], div[class^=highlight-] * { width: /* style */ :link { color: rgb(220,0,0); text-decoration: none;} +/* improve contrast to AA */ +.admonition.note :link { color: rgb(170,1,1); text-decoration: none;} :link:hover { text-decoration: underline solid clamp(1px, .3ex, 4px); text-underline-position: under; @@ -438,6 +440,14 @@ dd > ul:first-child { white-space: break-spaces; }*/ +/* improve color contrast to AA against yellowish highlight bg */ +div.highlight .c1 { + color: rgb(3,114,3); +} +div.highlight .na { + color: rgb(220,2,2); +} + /* Forcing wrap in a pre leads to some confusing line breaks. Use a horizontal scroll. Indicate the scroll by using rounded scroll shadows. @@ -517,6 +527,12 @@ aside.footnote > span + p { margin-block-start: unset; } scroll-margin-block-start: 2em; } +/* Make feature blocks look like raised cards for some variety. */ +div.card { + box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px, rgba(6, 24, 44, 0.65) 0px 4px 6px -1px, rgba(255, 255, 255, 0.08) 0px 1px 0px inset; + padding: 1em; +} + /* website only */ /* assume desktop reader for local html files, also no contact page for local doc files */ @@ -594,3 +610,4 @@ div#contact table td { white-space: nowrap; padding: 1pt 1em; } + diff --git a/website/www/_templates/layout.html b/website/www/_templates/layout.html index e40290fb6..c95fc7338 100644 --- a/website/www/_templates/layout.html +++ b/website/www/_templates/layout.html @@ -5,25 +5,16 @@ '_static/tabs.js', ] %} - + {%- if builder != 'htmlhelp' %} {%- set titlesuffix = docstitle|e %} {%- set titlesuffix = " - " + titlesuffix %} - {%- endif %} + {{ title|striptags }}{{ titlesuffix }} - {%- if builder != 'htmlhelp' %} - {%- if pagename == 'search' %} {%- for scriptfile in script_files %} @@ -111,7 +102,9 @@ -
                                                  + +
                                                  -
                                                  +
                                                  {% block body %} {% endblock %}
                                                  @@ -151,7 +144,7 @@ {%- for cssfile in css_files %} - + {%- endfor %}