diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..7544b4f89 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# https://editorconfig.org/ + +root = true + +[*] +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true +end_of_line = lf +charset = utf-8 + +[*.html] +indent_size = 2 + +[Makefile] +indent_style = tab + +[*.bat] +indent_style = tab diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..fd2dc52cb --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,12 @@ +#### Description + +Please include a summary of the change and which issue is fixed. Please also +include relevant motivation and context. Your commit message should include +this information as well. + +Fixes # (issue) + +#### Checklist: + +- [ ] I have added the relevant tests for this change. +- [ ] I have added an item to the Pending section of ``docs/changes.rst``. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..be006de9a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +# Keep GitHub Actions up to date with GitHub's Dependabot... +# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + groups: + github-actions: + patterns: + - "*" # Group all Actions updates into a single larger pull request + schedule: + interval: weekly diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 000000000..a0722f0ac --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,33 @@ +# .github/workflows/coverage.yml +name: Post coverage comment + +on: + workflow_run: + workflows: ["Test"] + types: + - completed + +jobs: + test: + name: Run tests & display coverage + runs-on: ubuntu-latest + if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' + permissions: + # Gives the action the necessary permissions for publishing new + # comments in pull requests. + pull-requests: write + # Gives the action the necessary permissions for editing existing + # comments (to avoid publishing multiple comments in the same PR) + contents: write + # Gives the action the necessary permissions for looking up the + # workflow that launched this workflow, and download the related + # artifact that contains the comment to be published + actions: read + steps: + # DO NOT run actions/checkout here, for security reasons + # For details, refer to https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ + - name: Post comment + uses: py-cov-action/python-coverage-comment-action@v3 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_RUN_ID: ${{ github.event.workflow_run.id }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..5e61d05bc --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,120 @@ +name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI + +on: push + +env: + PYPI_URL: https://pypi.org/p/django-debug-toolbar + PYPI_TEST_URL: https://test.pypi.org/p/django-debug-toolbar + +jobs: + + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Install pypa/build + run: + python3 -m pip install build --user + - name: Build a binary wheel and a source tarball + run: python3 -m build + - name: Store the distribution packages + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ + + publish-to-pypi: + name: >- + Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: ${{ env.PYPI_URL }} + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1.12 + + github-release: + name: >- + Sign the Python 🐍 distribution 📦 with Sigstore + and upload them to GitHub Release + needs: + - publish-to-pypi + runs-on: ubuntu-latest + + permissions: + contents: write # IMPORTANT: mandatory for making GitHub Releases + id-token: write # IMPORTANT: mandatory for sigstore + + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Sign the dists with Sigstore + uses: sigstore/gh-action-sigstore-python@v3.0.0 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ github.token }} + run: >- + gh release create + '${{ github.ref_name }}' + --repo '${{ github.repository }}' + --notes "" + - name: Upload artifact signatures to GitHub Release + env: + GITHUB_TOKEN: ${{ github.token }} + # Upload to GitHub Release using the `gh` CLI. + # `dist/` contains the built packages, and the + # sigstore-produced signatures and certificates. + run: >- + gh release upload + '${{ github.ref_name }}' dist/** + --repo '${{ github.repository }}' + + publish-to-testpypi: + name: Publish Python 🐍 distribution 📦 to TestPyPI + if: startsWith(github.ref, 'refs/tags/') # only publish to Test PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + + environment: + name: testpypi + url: ${{ env.PYPI_TEST_URL }} + + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1.12 + with: + repository-url: https://test.pypi.org/legacy/ + skip-existing: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..a2ded4678 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,222 @@ +name: Test + +on: + push: + pull_request: + schedule: + # Run weekly on Saturday + - cron: '37 3 * * SAT' + +jobs: + mysql: + runs-on: ubuntu-latest + strategy: + fail-fast: false + max-parallel: 5 + matrix: + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + + services: + mariadb: + image: mariadb + env: + MARIADB_ROOT_PASSWORD: debug_toolbar + options: >- + --health-cmd "mariadb-admin ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 3306:3306 + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Get pip cache dir + id: pip-cache + run: | + echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache + uses: actions/cache@v4 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: + ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} + restore-keys: | + ${{ matrix.python-version }}-v1- + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox tox-gh-actions + + - name: Test with tox + run: tox + env: + DB_BACKEND: mysql + DB_USER: root + DB_PASSWORD: debug_toolbar + DB_HOST: 127.0.0.1 + DB_PORT: 3306 + + + postgres: + runs-on: ubuntu-latest + strategy: + fail-fast: false + max-parallel: 5 + matrix: + # Skip 3.13 here, it needs the psycopg3 / postgis3 database + python-version: ['3.9', '3.10', '3.11', '3.12'] + database: [postgresql, postgis] + # Add psycopg3 to our matrix for modern python versions + include: + - python-version: '3.10' + database: psycopg3 + - python-version: '3.11' + database: psycopg3 + - python-version: '3.12' + database: psycopg3 + - python-version: '3.13' + database: psycopg3 + - python-version: '3.13' + database: postgis3 + + services: + postgres: + image: postgis/postgis:14-3.1 + env: + POSTGRES_DB: debug_toolbar + POSTGRES_USER: debug_toolbar + POSTGRES_PASSWORD: debug_toolbar + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Get pip cache dir + id: pip-cache + run: | + echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache + uses: actions/cache@v4 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: + ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} + restore-keys: | + ${{ matrix.python-version }}-v1- + + - name: Install gdal-bin (for postgis) + run: | + sudo apt-get -qq update + sudo apt-get -y install gdal-bin + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox tox-gh-actions + + - name: Test with tox + run: tox + env: + DB_BACKEND: ${{ matrix.database }} + DB_HOST: localhost + DB_PORT: 5432 + + sqlite: + runs-on: ubuntu-latest + strategy: + fail-fast: false + max-parallel: 5 + matrix: + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Get pip cache dir + id: pip-cache + run: | + echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache + uses: actions/cache@v4 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: + ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} + restore-keys: | + ${{ matrix.python-version }}-v1- + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox tox-gh-actions + + - name: Test with tox + run: tox + env: + DB_BACKEND: sqlite3 + DB_NAME: ":memory:" + + lint: + runs-on: ubuntu-latest + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: 3.9 + + - name: Get pip cache dir + id: pip-cache + run: | + echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache + uses: actions/cache@v4 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: + ${{ matrix.python-version }}-v1-${{ hashFiles('**/pyproject.toml') }}-${{ hashFiles('**/tox.ini') }} + restore-keys: | + ${{ matrix.python-version }}-v1- + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install --upgrade tox + + - name: Test with tox + run: tox -e docs,packaging diff --git a/.gitignore b/.gitignore index 36c0b885a..c89013a11 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,17 @@ *.pyc *.DS_Store *~ -django_debug_toolbar.egg-info \ No newline at end of file +.idea +build +.coverage* +dist +django_debug_toolbar.egg-info +docs/_build +example/db.sqlite3 +htmlcov +.tox +geckodriver.log +coverage.xml +.direnv/ +.envrc +venv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..8c6115813 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,49 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-toml + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: mixed-line-ending + - id: file-contents-sorter + files: docs/spelling_wordlist.txt +- repo: https://github.com/pycqa/doc8 + rev: v1.1.2 + hooks: + - id: doc8 +- repo: https://github.com/adamchainz/django-upgrade + rev: 1.25.0 + hooks: + - id: django-upgrade + args: [--target-version, "4.2"] +- repo: https://github.com/adamchainz/djade-pre-commit + rev: "1.4.0" + hooks: + - id: djade + args: [--target-version, "4.2"] +- repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.10.0 + hooks: + - id: rst-backticks + - id: rst-directive-colons +- repo: https://github.com/biomejs/pre-commit + rev: v2.0.0-beta.5 + hooks: + - id: biome-check + verbose: true +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: 'v0.11.12' + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format +- repo: https://github.com/tox-dev/pyproject-fmt + rev: v2.6.0 + hooks: + - id: pyproject-fmt +- repo: https://github.com/abravalheri/validate-pyproject + rev: v0.24.1 + hooks: + - id: validate-pyproject diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 000000000..794f8b3ed --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,19 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-24.04 + tools: + python: "3.10" + +sphinx: + configuration: docs/conf.py + +python: + install: + - requirements: requirements_dev.txt + - method: pip + path: . diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..15e624db3 --- /dev/null +++ b/.tx/config @@ -0,0 +1,10 @@ +[main] +host = https://www.transifex.com +lang_map = sr@latin: sr_Latn + +[o:django-debug-toolbar:p:django-debug-toolbar:r:main] +file_filter = debug_toolbar/locale//LC_MESSAGES/django.po +source_file = debug_toolbar/locale/en/LC_MESSAGES/django.po +source_lang = en +replace_edited_strings = false +keep_translations = false diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index f605b36af..000000000 --- a/AUTHORS +++ /dev/null @@ -1,33 +0,0 @@ -The Django Debug Toolbar was original created by Rob Hudson in -August 2008. - -The following is a list of much appreciated contributors: - -Reto Aebersold -Andi Albrecht -Chris Beaven -Kenneth Belitzky -Loic Bistuer -Etienne Carrier -David Cramer -Michael Elsdoerfer -Augie Fackler -Dan Fairs -Alex Gaynor -Idan Gazit -Matt George -Adam Gomaa -Daniel Hahler -Jacob Kaplan-Moss -Russell Keith-Magee -Mikhail Korobov -Arthur Koziel -Jannis Leidel -Martin Maney -Percy Perez-Pinedo -Nowell Strite -Malcolm Tredinnick -Bryan Veloso -Simon Willison -Diego Búrigo Zacarão -Philip Zeyliger diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..5fedea529 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# Django Debug Toolbar Code of Conduct + +The django-debug-toolbar project utilizes the [Django Commons Code of Conduct](https://github.com/django-commons/membership/blob/main/CODE_OF_CONDUCT.md). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..efc91ec2a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contributing to Django Debug Toolbar + +This is a [Django Commons](https://github.com/django-commons/) project. By contributing you agree to abide by the [Contributor Code of Conduct](https://github.com/django-commons/membership/blob/main/CODE_OF_CONDUCT.md). + +## Documentation + +For detailed contributing guidelines, please see our [Documentation](https://django-debug-toolbar.readthedocs.io/en/latest/contributing.html). + +## Additional Resources + +Please see the [README](https://github.com/django-commons/membership/blob/main/README.md) for more help. diff --git a/LICENSE b/LICENSE index 15d830926..221d73313 100644 --- a/LICENSE +++ b/LICENSE @@ -4,10 +4,10 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright + + 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 562b44364..000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,5 +0,0 @@ -include AUTHORS -include LICENSE -include README.rst -recursive-include debug_toolbar/media * -recursive-include debug_toolbar/templates * diff --git a/Makefile b/Makefile index 01f598b3d..4d2db27af 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,44 @@ -# Make file to compress and join all JS files -all: compress_js compress_css +.PHONY: example test coverage translatable_strings update_translations help +.DEFAULT_GOAL := help -compress_js: - java -jar ~/bin/yuicompressor.jar debug_toolbar/media/debug_toolbar/js/jquery.js > debug_toolbar/media/debug_toolbar/js/toolbar.min.js - java -jar ~/bin/yuicompressor.jar debug_toolbar/media/debug_toolbar/js/toolbar.js >> debug_toolbar/media/debug_toolbar/js/toolbar.min.js +example: ## Run the example application + python example/manage.py migrate --noinput + -DJANGO_SUPERUSER_PASSWORD=p python example/manage.py createsuperuser \ + --noinput --username="$(USER)" --email="$(USER)@mailinator.com" + python example/manage.py runserver -compress_css: - java -jar ~/bin/yuicompressor.jar --type css debug_toolbar/media/debug_toolbar/css/toolbar.css > debug_toolbar/media/debug_toolbar/css/toolbar.min.css +example_test: ## Run the test suite for the example application + python example/manage.py test example + +test: ## Run the test suite + DJANGO_SETTINGS_MODULE=tests.settings \ + python -m django test $${TEST_ARGS:-tests} + +test_selenium: ## Run frontend tests written with Selenium + DJANGO_SELENIUM_TESTS=true DJANGO_SETTINGS_MODULE=tests.settings \ + python -m django test $${TEST_ARGS:-tests} + +coverage: ## Run the test suite with coverage enabled + python --version + DJANGO_SETTINGS_MODULE=tests.settings \ + python -b -W always -m coverage run -m django test -v2 $${TEST_ARGS:-tests} + coverage report + coverage html + coverage xml + +translatable_strings: ## Update the English '.po' file + cd debug_toolbar && python -m django makemessages -l en --no-obsolete + @echo "Please commit changes and run 'tx push -s' (or wait for Transifex to pick them)" + +update_translations: ## Download updated '.po' files from Transifex + tx pull -a --minimum-perc=10 + cd debug_toolbar && python -m django compilemessages + +.PHONY: example/django-debug-toolbar.png +example/django-debug-toolbar.png: example/screenshot.py ## Update the screenshot in 'README.rst' + python $< --browser firefox --headless -o $@ + optipng $@ + +help: ## Help message for targets + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ + | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/NEWS b/NEWS deleted file mode 100644 index cd13405cb..000000000 --- a/NEWS +++ /dev/null @@ -1,47 +0,0 @@ -News for django-debug-toolbar -============================= - -0.8.5 (2011 Apr 25) -------------------- - -* Ensure if we're overriding the urlconf that we're resetting handler404/500. - -* Updated middleware logic to avoid work if content-type isn't right. - -* Change .load() calls to GET to avoid CSRF protection. - -* Updated SQL panel to match Django's which now includes logging. - -* Added basic multi-db support. - -* Some HTML validation fixes. - -* Added support for `executemany`. Thanks to postal2600. - -* Added support for LogBook. Thanks to Vincent Driessen. - -* Added clean_params method to DatabaseStatTracker to scrub non-unicode - data for displaying on the sql panel. Thanks to Matthew J Morrison - -0.8.4 (2010 Nov 8) ------------------- - -* Added print style to hide the toolbar (issue 90) - -* Fixed "Badly formatted SQL query plan" (issue 86) - -* Fixed "SQL not selectable due to line chart" (issue 85) - -* Fixed "Redirect page does not set cookie" (issue 6) - -* Fixed template block inheritance bug (issues 77 and 97). - -* Fixed flash of unstyled toolbar. - -* Updated to work with old TEMPLATE_LOADERS settings from < 1.2. - -* Updated to stop template loader iteration when template is found. - - -(Note: NEWS was started after the 0.8.3 release and is not complete) - diff --git a/README.rst b/README.rst index 1ea9d2593..6c7da3615 100644 --- a/README.rst +++ b/README.rst @@ -1,204 +1,61 @@ -==================== -Django Debug Toolbar -==================== +===================================== +Django Debug Toolbar |latest-version| +===================================== -The Django Debug Toolbar is a configurable set of panels that display various -debug information about the current request/response and when clicked, display -more details about the panel's content. +|build-status| |coverage| |docs| |python-support| |django-support| + +.. |latest-version| image:: https://img.shields.io/pypi/v/django-debug-toolbar.svg + :target: https://pypi.org/project/django-debug-toolbar/ + :alt: Latest version on PyPI -Currently, the following panels have been written and are working: +.. |build-status| image:: https://github.com/django-commons/django-debug-toolbar/workflows/Test/badge.svg + :target: https://github.com/django-commons/django-debug-toolbar/actions/workflows/test.yml + :alt: Build Status -- Django version -- Request timer -- A list of settings in settings.py -- Common HTTP headers -- GET/POST/cookie/session variable display -- Templates and context used, and their template paths -- SQL queries including time to execute and links to EXPLAIN each query -- List of signals, their args and receivers -- Logging output via Python's built-in logging, or via the `logbook `_ module +.. |coverage| image:: https://img.shields.io/badge/Coverage-94%25-green + :target: https://github.com/django-commons/django-debug-toolbar/actions/workflows/test.yml?query=branch%3Amain + :alt: Test coverage status -There is also one Django management command currently: +.. |docs| image:: https://img.shields.io/readthedocs/django-debug-toolbar/latest.svg + :target: https://readthedocs.org/projects/django-debug-toolbar/ + :alt: Documentation status -- `debugsqlshell`: Outputs the SQL that gets executed as you work in the Python - interactive shell. (See example below) +.. |python-support| image:: https://img.shields.io/pypi/pyversions/django-debug-toolbar + :target: https://pypi.org/project/django-debug-toolbar/ + :alt: Supported Python versions -If you have ideas for other panels please let us know. +.. |django-support| image:: https://img.shields.io/pypi/djversions/django-debug-toolbar + :target: https://pypi.org/project/django-debug-toolbar/ + :alt: Supported Django versions -* Note: The Debug Toolbar only works on Django 1.1 and newer. +The Django Debug Toolbar is a configurable set of panels that display various +debug information about the current request/response and when clicked, display +more details about the panel's content. -Installation -============ +Here's a screenshot of the toolbar in action: -#. Add the `debug_toolbar` directory to your Python path. +.. image:: https://raw.github.com/django-commons/django-debug-toolbar/main/example/django-debug-toolbar.png + :alt: Django Debug Toolbar screenshot -#. Add the following middleware to your project's `settings.py` file: +In addition to the built-in panels, a number of third-party panels are +contributed by the community. - ``'debug_toolbar.middleware.DebugToolbarMiddleware',`` +The current stable version of the Debug Toolbar is 5.2.0. It works on +Django ≥ 4.2.0. - Tying into middleware allows each panel to be instantiated on request and - rendering to happen on response. +The Debug Toolbar has experimental support for `Django's asynchronous views +`_. Please note that +the Debug Toolbar still lacks the capability for handling concurrent requests. +If you find any issues, please report them on the `issue tracker`_. - The order of MIDDLEWARE_CLASSES is important: the Debug Toolbar middleware - must come after any other middleware that encodes the response's content - (such as GZipMiddleware). +Documentation, including installation and configuration instructions, is +available at https://django-debug-toolbar.readthedocs.io/. - Note: The debug toolbar will only display itself if the mimetype of the - response is either `text/html` or `application/xhtml+xml` and contains a - closing `` tag. +The Django Debug Toolbar is released under the BSD license, like Django +itself. If you like it, please consider contributing! - Note: Be aware of middleware ordering and other middleware that may - intercept requests and return responses. Putting the debug toolbar - middleware *after* the Flatpage middleware, for example, means the - toolbar will not show up on flatpages. +The Django Debug Toolbar was originally created by Rob Hudson +in August 2008 and was further developed by many contributors_. -#. Make sure your IP is listed in the `INTERNAL_IPS` setting. If you are - working locally this will be: - - INTERNAL_IPS = ('127.0.0.1',) - - Note: This is required because of the built-in requirements of the - `show_toolbar` method. See below for how to define a method to determine - your own logic for displaying the toolbar. - -#. Add `debug_toolbar` to your `INSTALLED_APPS` setting so Django can find the - template files associated with the Debug Toolbar. - - Alternatively, add the path to the debug toolbar templates - (``'path/to/debug_toolbar/templates'`` to your ``TEMPLATE_DIRS`` setting.) - -Configuration -============= - -The debug toolbar has two settings that can be set in `settings.py`: - -#. Optional: Add a tuple called `DEBUG_TOOLBAR_PANELS` to your ``settings.py`` - file that specifies the full Python path to the panel that you want included - in the Toolbar. This setting looks very much like the `MIDDLEWARE_CLASSES` - setting. For example:: - - DEBUG_TOOLBAR_PANELS = ( - 'debug_toolbar.panels.version.VersionDebugPanel', - 'debug_toolbar.panels.timer.TimerDebugPanel', - 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', - 'debug_toolbar.panels.headers.HeaderDebugPanel', - 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', - 'debug_toolbar.panels.template.TemplateDebugPanel', - 'debug_toolbar.panels.sql.SQLDebugPanel', - 'debug_toolbar.panels.signals.SignalDebugPanel', - 'debug_toolbar.panels.logger.LoggingPanel', - ) - - You can change the ordering of this tuple to customize the order of the - panels you want to display, or add/remove panels. If you have custom panels - you can include them in this way -- just provide the full Python path to - your panel. - -#. Optional: There are a few configuration options to the debug toolbar that - can be placed in a dictionary: - - * `INTERCEPT_REDIRECTS`: If set to True (default), the debug toolbar will - show an intermediate page upon redirect so you can view any debug - information prior to redirecting. This page will provide a link to the - redirect destination you can follow when ready. If set to False, redirects - will proceed as normal. - - * `SHOW_TOOLBAR_CALLBACK`: If not set or set to None, the debug_toolbar - middleware will use its built-in show_toolbar method for determining whether - the toolbar should show or not. The default checks are that DEBUG must be - set to True or the IP of the request must be in INTERNAL_IPS. You can - provide your own method for displaying the toolbar which contains your - custom logic. This method should return True or False. - - * `EXTRA_SIGNALS`: An array of custom signals that might be in your project, - defined as the python path to the signal. - - * `HIDE_DJANGO_SQL`: If set to True (the default) then code in Django itself - won't be shown in SQL stacktraces. - - * `SHOW_TEMPLATE_CONTEXT`: If set to True (the default) then a template's - context will be included with it in the Template debug panel. Turning this - off is useful when you have large template contexts, or you have template - contexts with lazy datastructures that you don't want to be evaluated. - - * `TAG`: If set, this will be the tag to which debug_toolbar will attach the - debug toolbar. Defaults to 'body'. - - Example configuration:: - - def custom_show_toolbar(request): - return True # Always show toolbar, for example purposes only. - - DEBUG_TOOLBAR_CONFIG = { - 'INTERCEPT_REDIRECTS': False, - 'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, - 'EXTRA_SIGNALS': ['myproject.signals.MySignal'], - 'HIDE_DJANGO_SQL': False, - 'TAG': 'div', - } - -`debugsqlshell` -=============== -The following is sample output from running the `debugsqlshell` management -command. Each ORM call that results in a database query will be beautifully -output in the shell:: - - $ ./manage.py debugsqlshell - Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51) - [GCC 4.2.1 (Apple Inc. build 5646)] on darwin - Type "help", "copyright", "credits" or "license" for more information. - (InteractiveConsole) - >>> from page.models import Page - >>> ### Lookup and use resulting in an extra query... - >>> p = Page.objects.get(pk=1) - SELECT "page_page"."id", - "page_page"."number", - "page_page"."template_id", - "page_page"."description" - FROM "page_page" - WHERE "page_page"."id" = 1 - - >>> print p.template.name - SELECT "page_template"."id", - "page_template"."name", - "page_template"."description" - FROM "page_template" - WHERE "page_template"."id" = 1 - - Home - >>> ### Using select_related to avoid 2nd database call... - >>> p = Page.objects.select_related('template').get(pk=1) - SELECT "page_page"."id", - "page_page"."number", - "page_page"."template_id", - "page_page"."description", - "page_template"."id", - "page_template"."name", - "page_template"."description" - FROM "page_page" - INNER JOIN "page_template" ON ("page_page"."template_id" = "page_template"."id") - WHERE "page_page"."id" = 1 - - >>> print p.template.name - Home - -Running the Tests -================= - -The Debug Toolbar includes a limited (and growing) test suite. If you commit code, please consider -adding proper coverage (especially if it has a chance for a regression) in the test suite. - -:: - - python setup.py test - - -3rd Party Panels -================ - -A list of 3rd party panels can be found on the Django Debug Toolbar Github wiki: -https://github.com/django-debug-toolbar/django-debug-toolbar/wiki/3rd-Party-Panels - -TODOs and BUGS -============== -See: https://github.com/django-debug-toolbar/django-debug-toolbar/issues +.. _contributors: https://github.com/django-commons/django-debug-toolbar/graphs/contributors +.. _issue tracker: https://github.com/django-commons/django-debug-toolbar/issues diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..31750a749 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,9 @@ +# Security Policy + +## Supported Versions + +Only the latest version of django-debug-toolbar [![PyPI version](https://badge.fury.io/py/django-debug-toolbar.svg)](https://pypi.python.org/pypi/django-debug-toolbar) is supported. + +## Reporting a Vulnerability + +If you think you have found a vulnerability, and even if you are not sure, please [report it to us in private](https://github.com/django-commons/django-debug-toolbar/security/advisories/new). We will review it and get back to you. Please refrain from public discussions of the issue. diff --git a/biome.json b/biome.json new file mode 100644 index 000000000..dc2776d79 --- /dev/null +++ b/biome.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.0.0-beta.5/schema.json", + "formatter": { + "enabled": true, + "useEditorconfig": true + }, + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "style": { + "useLiteralEnumMembers": "error", + "noCommaOperator": "error", + "useNodejsImportProtocol": "error", + "useAsConstAssertion": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useConst": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "useExponentiationOperator": "error", + "useTemplate": "error", + "noParameterAssign": "error", + "noNonNullAssertion": "error", + "useDefaultParameterLast": "error", + "noArguments": "error", + "useImportType": "error", + "useExportType": "error", + "noUselessElse": "error", + "useShorthandFunctionType": "error" + }, + "suspicious": { + "noDocumentCookie": "off" + }, + "complexity": { + "useNumericLiterals": "error" + } + } + }, + "javascript": { + "formatter": { + "trailingCommas": "es5", + "quoteStyle": "double" + } + } +} diff --git a/debug_toolbar/__init__.py b/debug_toolbar/__init__.py index 48da4a621..770c5eeed 100644 --- a/debug_toolbar/__init__.py +++ b/debug_toolbar/__init__.py @@ -1,7 +1,10 @@ -__all__ = ('VERSION',) +__all__ = ["APP_NAME", "VERSION"] -try: - VERSION = __import__('pkg_resources') \ - .get_distribution('django-debug-toolbar').version -except Exception, e: - VERSION = 'unknown' +APP_NAME = "djdt" + +# Do not use pkg_resources to find the version but set it here directly! +# see issue #1446 +VERSION = "5.2.0" + +# Code that discovers files or modules in INSTALLED_APPS imports this module. +urls = "debug_toolbar.urls", APP_NAME diff --git a/debug_toolbar/_compat.py b/debug_toolbar/_compat.py new file mode 100644 index 000000000..0e0ab8c1b --- /dev/null +++ b/debug_toolbar/_compat.py @@ -0,0 +1,10 @@ +try: + from django.contrib.auth.decorators import login_not_required +except ImportError: + # For Django < 5.1, copy the current Django implementation + def login_not_required(view_func): + """ + Decorator for views that allows access to unauthenticated requests. + """ + view_func.login_required = False + return view_func diff --git a/debug_toolbar/_stubs.py b/debug_toolbar/_stubs.py new file mode 100644 index 000000000..c536a0fe7 --- /dev/null +++ b/debug_toolbar/_stubs.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +from typing import Any, NamedTuple, Optional + +from django import template as dj_template + + +class InspectStack(NamedTuple): + frame: Any + filename: str + lineno: int + function: str + code_context: str + index: int + + +TidyStackTrace = list[tuple[str, int, str, str, Optional[Any]]] + + +class RenderContext(dj_template.context.RenderContext): + template: dj_template.Template + + +class RequestContext(dj_template.RequestContext): + template: dj_template.Template + render_context: RenderContext diff --git a/debug_toolbar/apps.py b/debug_toolbar/apps.py new file mode 100644 index 000000000..a49875bac --- /dev/null +++ b/debug_toolbar/apps.py @@ -0,0 +1,273 @@ +import inspect +import mimetypes + +from django.apps import AppConfig +from django.conf import settings +from django.core.checks import Error, Warning, register +from django.middleware.gzip import GZipMiddleware +from django.urls import NoReverseMatch, reverse +from django.utils.module_loading import import_string +from django.utils.translation import gettext_lazy as _ + +from debug_toolbar import APP_NAME, settings as dt_settings +from debug_toolbar.settings import CONFIG_DEFAULTS + + +class DebugToolbarConfig(AppConfig): + name = "debug_toolbar" + verbose_name = _("Debug Toolbar") + + def ready(self): + from debug_toolbar.toolbar import DebugToolbar + + # Import the panels when the app is ready and call their ready() methods. This + # allows panels like CachePanel to enable their instrumentation immediately. + for cls in DebugToolbar.get_panel_classes(): + cls.ready() + + +def check_template_config(config): + """ + Checks if a template configuration is valid. + + The toolbar requires either the toolbars to be unspecified or + ``django.template.loaders.app_directories.Loader`` to be + included in the loaders. + If custom loaders are specified, then APP_DIRS must be True. + """ + + def flat_loaders(loaders): + """ + Recursively flatten the settings list of template loaders. + + Check for (loader, [child_loaders]) tuples. + Django's default cached loader uses this pattern. + """ + for loader in loaders: + if isinstance(loader, tuple): + yield loader[0] + yield from flat_loaders(loader[1]) + else: + yield loader + + app_dirs = config.get("APP_DIRS", False) + loaders = config.get("OPTIONS", {}).get("loaders", None) + if loaders: + loaders = list(flat_loaders(loaders)) + + # By default the app loader is included. + has_app_loaders = ( + loaders is None or "django.template.loaders.app_directories.Loader" in loaders + ) + return has_app_loaders or app_dirs + + +@register +def check_middleware(app_configs, **kwargs): + from debug_toolbar.middleware import DebugToolbarMiddleware + + errors = [] + gzip_index = None + debug_toolbar_indexes = [] + + if all(not check_template_config(config) for config in settings.TEMPLATES): + errors.append( + Warning( + "At least one DjangoTemplates TEMPLATES configuration needs " + "to use django.template.loaders.app_directories.Loader or " + "have APP_DIRS set to True.", + hint=( + "Include django.template.loaders.app_directories.Loader " + 'in ["OPTIONS"]["loaders"]. Alternatively use ' + "APP_DIRS=True for at least one " + "django.template.backends.django.DjangoTemplates " + "backend configuration." + ), + id="debug_toolbar.W006", + ) + ) + + # If old style MIDDLEWARE_CLASSES is being used, report an error. + if settings.is_overridden("MIDDLEWARE_CLASSES"): + errors.append( + Warning( + "debug_toolbar is incompatible with MIDDLEWARE_CLASSES setting.", + hint="Use MIDDLEWARE instead of MIDDLEWARE_CLASSES", + id="debug_toolbar.W004", + ) + ) + return errors + + # Determine the indexes which gzip and/or the toolbar are installed at + for i, middleware in enumerate(settings.MIDDLEWARE): + if is_middleware_class(GZipMiddleware, middleware): + gzip_index = i + elif is_middleware_class(DebugToolbarMiddleware, middleware): + debug_toolbar_indexes.append(i) + + if not debug_toolbar_indexes: + # If the toolbar does not appear, report an error. + errors.append( + Warning( + "debug_toolbar.middleware.DebugToolbarMiddleware is missing " + "from MIDDLEWARE.", + hint="Add debug_toolbar.middleware.DebugToolbarMiddleware to " + "MIDDLEWARE.", + id="debug_toolbar.W001", + ) + ) + elif len(debug_toolbar_indexes) != 1: + # If the toolbar appears multiple times, report an error. + errors.append( + Warning( + "debug_toolbar.middleware.DebugToolbarMiddleware occurs " + "multiple times in MIDDLEWARE.", + hint="Load debug_toolbar.middleware.DebugToolbarMiddleware only " + "once in MIDDLEWARE.", + id="debug_toolbar.W002", + ) + ) + elif gzip_index is not None and debug_toolbar_indexes[0] < gzip_index: + # If the toolbar appears before the gzip index, report an error. + errors.append( + Warning( + "debug_toolbar.middleware.DebugToolbarMiddleware occurs before " + "django.middleware.gzip.GZipMiddleware in MIDDLEWARE.", + hint="Move debug_toolbar.middleware.DebugToolbarMiddleware to " + "after django.middleware.gzip.GZipMiddleware in MIDDLEWARE.", + id="debug_toolbar.W003", + ) + ) + return errors + + +@register +def check_panel_configs(app_configs, **kwargs): + """Allow each panel to check the toolbar's integration for their its own purposes.""" + from debug_toolbar.toolbar import DebugToolbar + + errors = [] + for panel_class in DebugToolbar.get_panel_classes(): + for check_message in panel_class.run_checks(): + errors.append(check_message) + return errors + + +def is_middleware_class(middleware_class, middleware_path): + try: + middleware_cls = import_string(middleware_path) + except ImportError: + return + return inspect.isclass(middleware_cls) and issubclass( + middleware_cls, middleware_class + ) + + +@register +def check_panels(app_configs, **kwargs): + errors = [] + panels = dt_settings.get_panels() + if not panels: + errors.append( + Warning( + "Setting DEBUG_TOOLBAR_PANELS is empty.", + hint="Set DEBUG_TOOLBAR_PANELS to a non-empty list in your " + "settings.py.", + id="debug_toolbar.W005", + ) + ) + return errors + + +@register +def js_mimetype_check(app_configs, **kwargs): + """ + Check that JavaScript files are resolving to the correct content type. + """ + # Ideally application/javascript is returned, but text/javascript is + # acceptable. + javascript_types = {"application/javascript", "text/javascript"} + check_failed = not set(mimetypes.guess_type("toolbar.js")).intersection( + javascript_types + ) + if check_failed: + return [ + Warning( + "JavaScript files are resolving to the wrong content type.", + hint="The Django Debug Toolbar may not load properly while mimetypes are misconfigured. " + "See the Django documentation for an explanation of why this occurs.\n" + "https://docs.djangoproject.com/en/stable/ref/contrib/staticfiles/#static-file-development-view\n" + "\n" + "This typically occurs on Windows machines. The suggested solution is to modify " + "HKEY_CLASSES_ROOT in the registry to specify the content type for JavaScript " + "files.\n" + "\n" + "[HKEY_CLASSES_ROOT\\.js]\n" + '"Content Type"="application/javascript"', + id="debug_toolbar.W007", + ) + ] + return [] + + +@register +def debug_toolbar_installed_when_running_tests_check(app_configs, **kwargs): + """ + Check that the toolbar is not being used when tests are running + """ + # Check if show toolbar callback has changed + show_toolbar_changed = ( + dt_settings.get_config()["SHOW_TOOLBAR_CALLBACK"] + != CONFIG_DEFAULTS["SHOW_TOOLBAR_CALLBACK"] + ) + try: + # Check if the toolbar's urls are installed + reverse(f"{APP_NAME}:render_panel") + toolbar_urls_installed = True + except NoReverseMatch: + toolbar_urls_installed = False + + # If the user is using the default SHOW_TOOLBAR_CALLBACK, + # then the middleware will respect the change to settings.DEBUG. + # However, if the user has changed the callback to: + # DEBUG_TOOLBAR_CONFIG = {"SHOW_TOOLBAR_CALLBACK": lambda request: DEBUG} + # where DEBUG is not settings.DEBUG, then it won't pick up that Django' + # test runner has changed the value for settings.DEBUG, and the middleware + # will inject the toolbar, while the URLs aren't configured leading to a + # NoReverseMatch error. + likely_error_setup = show_toolbar_changed and not toolbar_urls_installed + + if ( + not settings.DEBUG + and dt_settings.get_config()["IS_RUNNING_TESTS"] + and likely_error_setup + ): + return [ + Error( + "The Django Debug Toolbar can't be used with tests", + hint="Django changes the DEBUG setting to False when running " + "tests. By default the Django Debug Toolbar is installed because " + "DEBUG is set to True. For most cases, you need to avoid installing " + "the toolbar when running tests. If you feel this check is in error, " + "you can set `DEBUG_TOOLBAR_CONFIG['IS_RUNNING_TESTS'] = False` to " + "bypass this check.", + id="debug_toolbar.E001", + ) + ] + else: + return [] + + +@register +def check_settings(app_configs, **kwargs): + errors = [] + USER_CONFIG = getattr(settings, "DEBUG_TOOLBAR_CONFIG", {}) + if "OBSERVE_REQUEST_CALLBACK" in USER_CONFIG: + errors.append( + Warning( + "The deprecated OBSERVE_REQUEST_CALLBACK setting is present in DEBUG_TOOLBAR_CONFIG.", + hint="Use the UPDATE_ON_FETCH and/or SHOW_TOOLBAR_CALLBACK settings instead.", + id="debug_toolbar.W008", + ) + ) + return errors diff --git a/debug_toolbar/decorators.py b/debug_toolbar/decorators.py new file mode 100644 index 000000000..61e46490d --- /dev/null +++ b/debug_toolbar/decorators.py @@ -0,0 +1,48 @@ +import functools + +from asgiref.sync import iscoroutinefunction +from django.http import Http404 +from django.utils.translation import get_language, override as language_override + +from debug_toolbar import settings as dt_settings + + +def require_show_toolbar(view): + """ + Async compatible decorator to restrict access to a view + based on the Debug Toolbar's visibility settings. + """ + from debug_toolbar.middleware import get_show_toolbar + + if iscoroutinefunction(view): + + @functools.wraps(view) + async def inner(request, *args, **kwargs): + show_toolbar = get_show_toolbar(async_mode=True) + if not await show_toolbar(request): + raise Http404 + + return await view(request, *args, **kwargs) + else: + + @functools.wraps(view) + def inner(request, *args, **kwargs): + show_toolbar = get_show_toolbar(async_mode=False) + if not show_toolbar(request): + raise Http404 + + return view(request, *args, **kwargs) + + return inner + + +def render_with_toolbar_language(view): + """Force any rendering within the view to use the toolbar's language.""" + + @functools.wraps(view) + def inner(request, *args, **kwargs): + lang = dt_settings.get_config()["TOOLBAR_LANGUAGE"] or get_language() + with language_override(lang): + return view(request, *args, **kwargs) + + return inner diff --git a/debug_toolbar/forms.py b/debug_toolbar/forms.py new file mode 100644 index 000000000..61444b43c --- /dev/null +++ b/debug_toolbar/forms.py @@ -0,0 +1,51 @@ +import json + +from django import forms +from django.core import signing +from django.core.exceptions import ValidationError +from django.utils.encoding import force_str + + +class SignedDataForm(forms.Form): + """Helper form that wraps a form to validate its contents on post. + + class PanelForm(forms.Form): + # fields + + On render: + form = SignedDataForm(initial=PanelForm(initial=data).initial) + + On POST: + signed_form = SignedDataForm(request.POST) + if signed_form.is_valid(): + panel_form = PanelForm(signed_form.verified_data) + if panel_form.is_valid(): + # Success + """ + + salt = "django_debug_toolbar" + signed = forms.CharField(required=True, widget=forms.HiddenInput) + + def __init__(self, *args, **kwargs): + initial = kwargs.pop("initial", None) + if initial: + initial = {"signed": self.sign(initial)} + super().__init__(*args, initial=initial, **kwargs) + + def clean_signed(self): + try: + verified = json.loads( + signing.Signer(salt=self.salt).unsign(self.cleaned_data["signed"]) + ) + return verified + except signing.BadSignature as exc: + raise ValidationError("Bad signature") from exc + + def verified_data(self): + return self.is_valid() and self.cleaned_data["signed"] + + @classmethod + def sign(cls, data): + return signing.Signer(salt=cls.salt).sign( + json.dumps({key: force_str(value) for key, value in data.items()}) + ) diff --git a/debug_toolbar/locale/bg/LC_MESSAGES/django.mo b/debug_toolbar/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 000000000..ae59298d5 Binary files /dev/null and b/debug_toolbar/locale/bg/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/bg/LC_MESSAGES/django.po b/debug_toolbar/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..d9fd766fe --- /dev/null +++ b/debug_toolbar/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,705 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# arneatec , 2022 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: arneatec , 2022\n" +"Language-Team: Bulgarian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Кеш" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d извикване за %(time).2fms" +msgstr[1] "%(cache_calls)d извиквания за %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Извиквания на кеша от %(count)d бекенд" +msgstr[1] "Извиквания на кеша от %(count)d бекенда" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Хедъри" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "История" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Профилиране" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Прехвани пренасочвания" + +#: panels/request.py:16 +msgid "Request" +msgstr "Заявка" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Настройки" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "Настройки от %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d получател на 1 сигнал" +msgstr[1] "%(num_receivers)d получатели на 1 сигнал" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d приемник на %(num_signals)d сигнала" +msgstr[1] "%(num_receivers)d приемника на %(num_signals)d сигнала" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Сигнали" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Repeatable read" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Незает" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Активен" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "В транзакция" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "В грешка" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Непознато" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)d заявка за %(sql_time).2fms" +msgstr[1] "%(query_count)d заявки за %(sql_time).2fms" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "SQL заявки от %(count)d връзка" +msgstr[1] "SQL заявки от %(count)d връзки" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Статични файлове (%(num_found)s открити, %(num_used)s използвани)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Статични файлове" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s файл използван" +msgstr[1] "%(num_used)s файла са използвани" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Шаблони" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Шаблони (%(num_templates)s рендерирани)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Няма произход" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "Процесор: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Общо: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Време" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Потребителско процесорно време " + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msec" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Системно процесорно време" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msec" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Общо процесорно време" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msec" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Изминало време" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msec" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Контекстни превключвания" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d волеви, %(ivcsw)d неволеви" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Версии" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Скрий лента с инструменти " + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Скрий" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Покажи лента с инструменти" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Деактивирай за следващо и всички последващи заявки" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Активирай за следващо и всички последващи заявки" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Обобщение" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Общо извиквания" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Общо време" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Кеш успехи" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Кеш неуспехи" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Команди" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Извиквания" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Време (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Вид" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Аргументи" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Аргументи с ключови думи" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Бекенд" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Хедъри на заявката" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Ключ" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Стойност" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Хедъри на отговора" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI environ" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Понеже WSGI environ наследява средата на сървъра, е показана само важната част от него по-долу." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Метод" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Път" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Променливи на зявката" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "Състояние" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Действие" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Променлива" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Извикване" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "КумулативноВреме" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "За" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "ОбщоВреме" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Брой" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Информация за изгледа" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Функция на изгледа" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Име на URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Бисквитки" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Няма бисквитки" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Данни на сесията" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Няма данни от сесията" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET данни" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Няма GET данни" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST данни" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Няма POST данни" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Настройка" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Сигнал" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Получатели" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s заявка" +msgstr[1] "%(num)s заявки" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "Включва %(count)s подобни" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "и %(dupes)s повторени" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Заявка" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Във времето" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s подобни заявки." + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "Повторени %(dupes)s пъти." + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Връзка:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Изолационно ниво:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Статус на транзакцията:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(неясен)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Не са записани никакви SQL заявки по време на тази заявка." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL разяснен" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Изпълнен SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "База данни" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL профилиран" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Грешка" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "Избран SQL" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Празно множество" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Път към статичен файл" +msgstr[1] "Пътища към статични файлове" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(префикс %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "None" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Приложение статичен файл" +msgstr[1] "Приложения статично файлове" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Статичен файл" +msgstr[1] "Статични файлове" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s файл" +msgstr[1] "%(payload_count)s файла" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Местоположение" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Произход на шаблона:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Път към шаблон" +msgstr[1] "Пътища към шаблони" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Шаблон" +msgstr[1] "Шаблони" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Превключи контекста" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Контекстен процесор" +msgstr[1] "Контекстни процесори" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Използване на ресурси" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Ресурс" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Време в браузъра" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Атрибут на измерването" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Милисекунди от началото на навигацията (+дължината)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "Пакет" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Име" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Версия" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Местоположение:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar прехвана пренасочване към горния URL с цел преглед за отстраняване на грешки /дебъг/. Можете да кликнете върху връзката по-горе, за да продължите с пренасочването по нормалния начин." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Данните за този панел вече не са налични. Моля, презаредете страницата и опитайте отново. " diff --git a/debug_toolbar/locale/ca/LC_MESSAGES/django.mo b/debug_toolbar/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 000000000..c7e63dbe4 Binary files /dev/null and b/debug_toolbar/locale/ca/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/ca/LC_MESSAGES/django.po b/debug_toolbar/locale/ca/LC_MESSAGES/django.po new file mode 100644 index 000000000..393b74bc1 --- /dev/null +++ b/debug_toolbar/locale/ca/LC_MESSAGES/django.po @@ -0,0 +1,705 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# el_libre como el chaval , 2013 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: el_libre como el chaval , 2013\n" +"Language-Team: Catalan (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Caxè" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Encapçalaments" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" + +#: panels/request.py:16 +msgid "Request" +msgstr "Demanar" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Configuració" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Senyals" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Seriable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Actiu" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "En transacció" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Desconegut" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Plantilles" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Total: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Hora" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Temps emprat" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versions" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Amagar barra d'eina" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Amagar" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Mostrar barra d'eines" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Resum" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Total crides" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Total temps" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Comandes" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Crides" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Temps (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Tipus" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Administració" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Clau" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Valor" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Acció" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variable" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Cridar" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Per" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TempsTotal" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Recomptar" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Veure informació" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Sense dades GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Sense dades POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Configuració" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Senyal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Destinataris" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Petició" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Línia temporal" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Connexió:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(desconegut)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "SQL Executat" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Base de dades" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Error" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Cap" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Ubicació" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "Plantilles" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Font" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nom" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versió" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Ubicació:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/cs/LC_MESSAGES/django.mo b/debug_toolbar/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 000000000..a0daa392e Binary files /dev/null and b/debug_toolbar/locale/cs/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/cs/LC_MESSAGES/django.po b/debug_toolbar/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 000000000..395b6feca --- /dev/null +++ b/debug_toolbar/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,738 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Josef Kolář , 2020 +# kuboja, 2024 +# Vláďa Macek , 2013-2014 +# Vláďa Macek , 2015,2021 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: kuboja, 2024\n" +"Language-Team: Czech (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Mezipaměť" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d volání během %(time).2fms" +msgstr[1] "%(cache_calls)d volání během %(time).2fms" +msgstr[2] "%(cache_calls)d volání během %(time).2fms" +msgstr[3] "%(cache_calls)d volání během %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Volání mezipaměti z %(count)d backendu" +msgstr[1] "Volání mezipaměti z %(count)d backendů" +msgstr[2] "Volání mezipaměti z %(count)d backendů" +msgstr[3] "Volání mezipaměti z %(count)d backendů" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Hlavičky" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "Historie" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilování" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Zachycení přesměrování" + +#: panels/request.py:16 +msgid "Request" +msgstr "Požadavek" + +#: panels/request.py:38 +msgid "" +msgstr "<žádný pohled>" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Nastavení" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d příjemce 1 signálu" +msgstr[1] "%(num_receivers)d příjemci 1 signálu" +msgstr[2] "%(num_receivers)d příjemců 1 signálu" +msgstr[3] "%(num_receivers)d příjemců 1 signálu" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d příjemce %(num_signals)d signálů" +msgstr[1] "%(num_receivers)d příjemci %(num_signals)d signálů" +msgstr[2] "%(num_receivers)d příjemců %(num_signals)d signálů" +msgstr[3] "%(num_receivers)d příjemců %(num_signals)d signálů" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Signály" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Repeatable read" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "V klidu (idle)" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Aktivní" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Uvnitř transakce" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "V chybovém stavu" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Neznámé" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)ddotaz během %(sql_time).2f ms" +msgstr[1] "%(query_count)d dotazy během %(sql_time).2f ms" +msgstr[2] "%(query_count)d dotazů během %(sql_time).2f ms" +msgstr[3] "%(query_count)d dotazů během %(sql_time).2f ms" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "SQL dotazy z %(count)d spojení" +msgstr[1] "SQL dotazy ze %(count)d spojení" +msgstr[2] "SQL dotazy z %(count)d spojení" +msgstr[3] "SQL dotazy z %(count)d spojení" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Statické soubory (nalezeno: %(num_found)s, použito: %(num_used)s)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Statické soubory" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s soubor použit" +msgstr[1] "%(num_used)s soubory použity" +msgstr[2] "%(num_used)s souborů použito" +msgstr[3] "%(num_used)s souborů použito" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Šablony" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Šablony (renderovaných: %(num_templates)s)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Zdroj chybí" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Celkem: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Čas" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Uživatelský čas CPU" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msec" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Systémový čas CPU" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msec" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Celkový čas CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msec" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Uplynulý čas" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msec" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Přepnutí kontextu" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d dobrovolně, %(ivcsw)d nedobrovolně" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Verze" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Skrýt lištu" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Skrýt" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Zobrazit lištu" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Vypnout pro následné požadavky" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Zapnout pro následné požadavky" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Souhrn" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Celkem volání" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Celkový čas" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Nalezení v mezipaměti" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Nebylo v mezipaměti" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Příkazy" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Volání" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Čas (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Typ" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argumenty" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Klíčované argumenty" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Záhlaví požadavku" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Klíč" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Hodnota" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Záhlaví odezvy" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Prostředí WSGI" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Níže je zobrazena pouze podstatná část proměnných prostředí, protože WSGI je dědí od serveru." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Metoda" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Cesta" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Proměnné požadavku" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "Stav" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Akce" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Proměnná" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Volání" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "KumulČas" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Celk. za volání" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "CelkČas" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Počet" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Informace o pohledových funkcích" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Pohledová funkce" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Název URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Soubory cookie" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Žádné soubory cookie" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Data sezení" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Žádná data sezení" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "Data typu GET" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Žádná data typu GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "Data typu POST" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Žádná data typu POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Nastavení" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signál" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Příjemci" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s dotaz" +msgstr[1] "%(num)s dotazy" +msgstr[2] "%(num)s dotazů" +msgstr[3] "%(num)s dotazů" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "včetně %(count)s podobných" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "a %(dupes)s duplicitních" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Dotaz" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Časová osa" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s podobných dotazů." + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Spojení:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Úroveň izolace:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Stav transakce:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(neznámé)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Pro tento požadavek nebyl zaznamenán žádný dotaz SQL." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "Vysvětlené SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Spuštěné SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Databáze" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "Profilované SQL" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Chyba" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "Vybrané SQL" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Prázdná sada" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Cesta ke statickým souborům" +msgstr[1] "Cesty ke statickým souborům" +msgstr[2] "Cesty ke statickým souborům" +msgstr[3] "Cesty ke statickým souborům" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefix %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Žádné" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Aplikace se statickými soubory" +msgstr[1] "Aplikace se statickými soubory" +msgstr[2] "Aplikace se statickými soubory" +msgstr[3] "Aplikace se statickými soubory" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Statický soubor" +msgstr[1] "Statické soubory" +msgstr[2] "Statické soubory" +msgstr[3] "Statické soubory" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s soubor" +msgstr[1] "%(payload_count)s soubory" +msgstr[2] "%(payload_count)s souborů" +msgstr[3] "%(payload_count)s souborů" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Adresa" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Zdroj šablony:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Cesta k šabloně" +msgstr[1] "Cesty k šablonám" +msgstr[2] "Cesty k šablonám" +msgstr[3] "Cesty k šablonám" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Šablona" +msgstr[1] "Šablony" +msgstr[2] "Šablony" +msgstr[3] "Šablony" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Zap./vyp. kontext" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Procesor kontextu" +msgstr[1] "Procesory kontextu" +msgstr[2] "Procesory kontextu" +msgstr[3] "Procesory kontextu" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Využití zdrojů" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Prostředek" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Časování prohlížeče" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Atribut" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Milisekund od začátku navigace (+délka)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "Balíček" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Název" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Verze" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Adresa:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Aplikace Django Debug Toolbar zachytila přesměrování na výše uvedenou adresu URL za účelem ladicího zobrazení. Chcete-li přesměrování dokončit, klepněte na odkaz výše." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Data pro tento panel již nejsou k dispozici. Obnovte stránku a zkuste to znova." diff --git a/debug_toolbar/locale/de/LC_MESSAGES/django.mo b/debug_toolbar/locale/de/LC_MESSAGES/django.mo index 87a276ceb..f62a4baf6 100644 Binary files a/debug_toolbar/locale/de/LC_MESSAGES/django.mo and b/debug_toolbar/locale/de/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/de/LC_MESSAGES/django.po b/debug_toolbar/locale/de/LC_MESSAGES/django.po index f344a3391..18a6be6a8 100644 --- a/debug_toolbar/locale/de/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/de/LC_MESSAGES/django.po @@ -1,266 +1,489 @@ -# Django Debug Toolbar auf Deutsch. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# Jannis Leidel, 2009. # # +# Translators: +# Jannis Leidel , 2012-2014,2021 +# Matthias Kestenholz , 2021 +# Tim Schilling, 2021 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Tim Schilling, 2021\n" +"Language-Team: German (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: panels/cache.py:92 -#, python-format -msgid "Cache: %.2fms" +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." msgstr "" -#: panels/cache.py:95 -msgid "Cache Usage" +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." msgstr "" -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." msgstr "" -#: panels/logger.py:56 -msgid "Logging" -msgstr "Logging" +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" -#: panels/logger.py:63 -#, fuzzy -msgid "Log Messages" -msgstr "Nachricht" +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" -msgstr "" +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d Abfrage in %(time).2fms" +msgstr[1] "%(cache_calls)d Abfragen in %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Cache-Aufrufe von %(count)d Backend" +msgstr[1] "Cache-Aufrufe von %(count)d Backends" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Header" -#: panels/settings_vars.py:16 +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "Geschichte" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profiling" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Umleitungen abfangen" + +#: panels/request.py:16 +msgid "Request" +msgstr "Anfrage" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 msgid "Settings" msgstr "Einstellungen" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 #, python-format -msgid "Settings from %s" -msgstr "" +msgid "Settings from %s" +msgstr "Einstellungen von %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d Empfänger von einem Signal" +msgstr[1] "%(num_receivers)d Empfänger von einem Signal" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d Empfänger von %(num_signals)d Signalen" +msgstr[1] "%(num_receivers)d Empfänger von %(num_signals)d Signalen" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:67 msgid "Signals" -msgstr "Signals" +msgstr "Signale" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Repeatable read" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Wartet" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Aktiv" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "In einer Transaktion" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Fehler" -#: panels/sql.py:146 +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Unbekannt" + +#: panels/sql/panel.py:162 msgid "SQL" -msgstr "" +msgstr "SQL" -#: panels/sql.py:160 -msgid "SQL Queries" -msgstr "" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)d Abfrage in %(sql_time).2f ms" +msgstr[1] "%(query_count)d Abfragen in %(sql_time).2f ms" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "SQL-Abfragen von %(count)d Verbindung" +msgstr[1] "SQL-Abfragen von %(count)d Verbindungen" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Statische Dateien (%(num_found)s gefunden, %(num_used)s benutzt)" -#: panels/template.py:47 +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Statische Dateien" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s Datei benutzt" +msgstr[1] "%(num_used)s Dateien benutzt" + +#: panels/templates/panel.py:101 msgid "Templates" msgstr "Templates" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" -msgstr "" +msgstr "Templates (%(num_templates)s gerendert)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Kein Ursprung" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Gesamt: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Zeit" -#: panels/timer.py:47 -#, fuzzy -msgid "Resource Usage" -msgstr "Ressource" - -#: panels/timer.py:78 +#: panels/timer.py:46 msgid "User CPU time" -msgstr "" +msgstr "CPU-Zeit Benutzer" -#: panels/timer.py:79 +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f ms" + +#: panels/timer.py:47 msgid "System CPU time" -msgstr "" +msgstr "CPU-Zeit System" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f ms" -#: panels/timer.py:80 -#, fuzzy +#: panels/timer.py:48 msgid "Total CPU time" -msgstr "Zeit gesamt" +msgstr "CPU-Zeit gesamt" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f ms" -#: panels/timer.py:81 +#: panels/timer.py:49 msgid "Elapsed time" -msgstr "" +msgstr "Verstrichene Zeit" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f ms" -#: panels/timer.py:82 +#: panels/timer.py:51 msgid "Context switches" -msgstr "" +msgstr "Kontextwechsel" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d freiwillig, %(ivcsw)d unfreiwillig" -#: panels/version.py:20 panels/version.py:29 -#, fuzzy +#: panels/versions.py:19 msgid "Versions" -msgstr "Django-Version" +msgstr "Versionen" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" -msgstr "" +msgid "Hide toolbar" +msgstr "Toolbar ausblenden" #: templates/debug_toolbar/base.html:23 msgid "Hide" -msgstr "Verbergen" +msgstr "Ausblenden" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" msgstr "" -#: templates/debug_toolbar/base.html:54 -msgid "Close" -msgstr "Schließen" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Toolbar einblenden" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" -msgstr "Ort" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Für nächste und die darauffolgenden Anfragen deaktivieren" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Für nächste und die darauffolgenden Anfragen aktivieren" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" msgstr "" -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Zusammenfassung" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" msgstr "Aufrufe gesamt" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" msgstr "Zeit gesamt" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" -msgstr "Aufrufe" +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Cache erfolgreich" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Cache verfehlt" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Befehle" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Aufrufe" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Zeit (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Typ" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" -msgstr "Parameter" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argumente" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Schlüsselwort-Argumente" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" -msgstr "Funktion" +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Anfrage-Header" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Schlüssel" -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Wert" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" -msgstr "Niveau" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Antwort-Header" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" -msgstr "Nachricht" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI-Umgebung" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" -msgstr "Keine Nachricht gespeichert" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Da sich die WSGI-Umgebung von der Umgebung des Servers ableitet, wird nur eine notwendige Teilmenge dargestellt." -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" -msgstr "" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Methode" -#: templates/debug_toolbar/panels/request_vars.html:7 -#, fuzzy -msgid "View Function" -msgstr "Funktion" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Pfad" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" -msgstr "" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Anfrage-Variablen" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" -msgstr "" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "Status" -#: templates/debug_toolbar/panels/request_vars.html:27 -#, fuzzy -msgid "COOKIES Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Aktion" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" -#: templates/debug_toolbar/panels/request_vars.html:50 -msgid "No COOKIE data" -msgstr "Keine COOKIE-Daten" +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Aufruf" -#: templates/debug_toolbar/panels/request_vars.html:53 -#, fuzzy -msgid "SESSION Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "Gesamt" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" -msgstr "Keine SESSION-Daten" +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Per" -#: templates/debug_toolbar/panels/request_vars.html:79 -#, fuzzy -msgid "GET Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "Total" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Anzahl" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "View-Informationen" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "View-Funktion" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL-Name" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Keine Cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Sitzungsdaten" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Keine Sitzungsdaten" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET-Daten" + +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Keine GET-Daten" -#: templates/debug_toolbar/panels/request_vars.html:101 -#, fuzzy -msgid "POST Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST-Daten" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Keine POST-Daten" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Einstellung" @@ -269,47 +492,72 @@ msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" -msgstr "" +msgstr "Empfänger" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" -msgstr "Aktion" - -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" -msgstr "" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s Abfrage" +msgstr[1] "%(num)s Abfragen" #: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "inklusive %(count)s ähnlich" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "und %(dupes)s dupliziert" + +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" -msgstr "" +msgstr "Abfrage" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" -msgstr "Zeile" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Verlauf" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" -msgstr "Methode" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s ähnliche Abfragen." + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "%(dupes)s-mal dupliziert." -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" -msgstr "Datei" +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Verbindung:" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" -msgstr "Zurück" +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Isolationsebene:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Transaktionsstatus:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(unbekannt)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Es wurde keine SQL-Abfrage während dieses Vorgangs aufgezeichnet." #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" -msgstr "" +msgid "SQL explained" +msgstr "SQL erklärt" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 @@ -317,59 +565,143 @@ msgstr "" msgid "Executed SQL" msgstr "Ausgeführtes SQL" +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Datenbank" + #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" -msgstr "" +msgid "SQL profiled" +msgstr "SQL durchleuchtet" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Fehler" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" -msgstr "" +msgid "SQL selected" +msgstr "SQL ausgewählt" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Leeres Set" +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Pfad mit statischen Dateien" +msgstr[1] "Pfade mit statischen Dateien" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(Präfix %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "-" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "App mit statischen Dateien" +msgstr[1] "Apps mit statischen Dateien" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Statische Datei" +msgstr[1] "Statische Dateien" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s Datei" +msgstr[1] "%(payload_count)s Dateien" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Ort" + #: templates/debug_toolbar/panels/template_source.html:4 -#, fuzzy -msgid "Template Source" -msgstr "Template" +msgid "Template source:" +msgstr "Template-Quelle:" #: templates/debug_toolbar/panels/templates.html:2 -#, fuzzy msgid "Template path" -msgstr "Template" +msgid_plural "Template paths" +msgstr[0] "Template-Pfad" +msgstr[1] "Template-Pfade" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" -msgstr "Template" - -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" -msgstr "" +msgid_plural "Templates" +msgstr[0] "Template" +msgstr[1] "Templates" -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" -msgstr "Nichts" +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Context zeigen" -#: templates/debug_toolbar/panels/templates.html:31 +#: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" -msgstr "" +msgid_plural "Context processors" +msgstr[0] "Context-Prozessor" +msgstr[1] "Context-Prozessoren" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Ressourcenverwendung" -#: templates/debug_toolbar/panels/timer.html:9 +#: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ressource" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Browserzeit" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Timing-Attribut" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Millisekunden seit Seitenaufruf (plus Dauer)" + +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" -msgstr "" +msgstr "Paket" -#: templates/debug_toolbar/panels/versions.html:7 -#, fuzzy +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Name" + +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" -msgstr "Django-Version" +msgstr "Version" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Ziel:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Die Django Debug Toolbar hat eine Weiterleitung an die obenstehende URL zur weiteren Überprüfung abgefangen. Klicken Sie den Link, um wie gewohnt weitergeleitet zu werden." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Die Daten für dieses Panel sind nicht mehr verfügbar. Bitte laden Sie die Seite neu." diff --git a/debug_toolbar/locale/en/LC_MESSAGES/django.mo b/debug_toolbar/locale/en/LC_MESSAGES/django.mo index 5ffd385e6..a34e2efe8 100644 Binary files a/debug_toolbar/locale/en/LC_MESSAGES/django.mo and b/debug_toolbar/locale/en/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/en/LC_MESSAGES/django.po b/debug_toolbar/locale/en/LC_MESSAGES/django.po index eaefdc6b7..9dc155bef 100644 --- a/debug_toolbar/locale/en/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/en/LC_MESSAGES/django.po @@ -1,256 +1,485 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# Percy Pérez-Pinedo, 2009. # # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2012-03-31 20:10+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: panels/cache.py:92 +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "" + +#: panels/cache.py:174 #, python-format -msgid "Cache: %.2fms" +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" + +#: panels/headers.py:31 +msgid "Headers" msgstr "" -#: panels/cache.py:95 -msgid "Cache Usage" +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" msgstr "" -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" +#: panels/profiling.py:140 +msgid "Profiling" msgstr "" -#: panels/logger.py:56 -msgid "Logging" +#: panels/redirects.py:17 +msgid "Intercept redirects" msgstr "" -#: panels/logger.py:63 -msgid "Log Messages" +#: panels/request.py:16 +msgid "Request" msgstr "" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" +#: panels/request.py:38 +msgid "" msgstr "" -#: panels/settings_vars.py:16 +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 msgid "Settings" msgstr "" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 #, python-format -msgid "Settings from %s" +msgid "Settings from %s" msgstr "" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:67 msgid "Signals" msgstr "" -#: panels/sql.py:146 +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "" + +#: panels/sql/panel.py:162 msgid "SQL" msgstr "" -#: panels/sql.py:160 -msgid "SQL Queries" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" msgstr "" -#: panels/template.py:47 +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" + +#: panels/templates/panel.py:101 msgid "Templates" msgstr "" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "" -#: panels/timer.py:47 -msgid "Resource Usage" +#: panels/timer.py:46 +msgid "User CPU time" msgstr "" -#: panels/timer.py:78 -msgid "User CPU time" +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" msgstr "" -#: panels/timer.py:79 +#: panels/timer.py:47 msgid "System CPU time" msgstr "" -#: panels/timer.py:80 +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 msgid "Total CPU time" msgstr "" -#: panels/timer.py:81 +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 msgid "Elapsed time" msgstr "" -#: panels/timer.py:82 +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 msgid "Context switches" msgstr "" -#: panels/version.py:20 panels/version.py:29 +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 msgid "Versions" msgstr "" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" +msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" msgstr "" -#: templates/debug_toolbar/base.html:54 -msgid "Close" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" msgstr "" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" msgstr "" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" msgstr "" -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" msgstr "" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" msgstr "" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" msgstr "" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" msgstr "" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" msgstr "" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" msgstr "" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" msgstr "" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "" -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" msgstr "" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" msgstr "" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:7 -msgid "View Function" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:27 -msgid "COOKIES Variables" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:50 -msgid "No COOKIE data" +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:53 -msgid "SESSION Variables" +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:79 -msgid "GET Variables" +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:101 -msgid "POST Variables" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "" @@ -259,46 +488,71 @@ msgid "Signal" msgstr "" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" msgstr "" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" msgstr "" -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" msgstr "" -#: templates/debug_toolbar/panels/sql.html:8 +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" msgstr "" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" msgstr "" -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" msgstr "" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" +msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 @@ -307,56 +561,143 @@ msgstr "" msgid "Executed SQL" msgstr "" +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "" + #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" +msgid "SQL profiled" msgstr "" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" +msgid "SQL selected" msgstr "" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "" +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "" + #: templates/debug_toolbar/panels/template_source.html:4 -msgid "Template Source" +msgid "Template source:" msgstr "" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" -msgstr "" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" msgstr "" -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" msgstr "" -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" msgstr "" -#: templates/debug_toolbar/panels/templates.html:31 -msgid "Context processor" +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" msgstr "" -#: templates/debug_toolbar/panels/timer.html:9 -msgid "Resource" +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" msgstr "" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" -#: templates/debug_toolbar/panels/versions.html:7 +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/es/LC_MESSAGES/django.mo b/debug_toolbar/locale/es/LC_MESSAGES/django.mo index 1770362d9..583f88ef9 100644 Binary files a/debug_toolbar/locale/es/LC_MESSAGES/django.mo and b/debug_toolbar/locale/es/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/es/LC_MESSAGES/django.po b/debug_toolbar/locale/es/LC_MESSAGES/django.po index 844e82d1a..d757cce1f 100644 --- a/debug_toolbar/locale/es/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/es/LC_MESSAGES/django.po @@ -1,269 +1,498 @@ -# Django Debug Toolbar en Español. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# Percy Pérez-Pinedo , 2009. # -# Caracteres especiales: á, é, í, ó, ú, ñ, # +# Translators: +# jcatalan , 2014 +# Daniel Iglesias , 2021 +# Leonardo J. Caballero G. , 2013-2014,2020 +# marcelor , 2013 +# Sergio Infante , 2015 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Daniel Iglesias , 2021\n" +"Language-Team: Spanish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: panels/cache.py:92 -#, python-format -msgid "Cache: %.2fms" +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Barra de herramientas de Depuración" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." msgstr "" -#: panels/cache.py:95 -msgid "Cache Usage" +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." msgstr "" -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" +#: panels/alerts.py:77 +msgid "Alerts" msgstr "" -#: panels/logger.py:56 -msgid "Logging" -msgstr "Registros" +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" -#: panels/logger.py:63 -#, fuzzy -msgid "Log Messages" -msgstr "Mensaje" +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d llamada en %(time).2fms" +msgstr[1] "%(cache_calls)d llamadas en %(time).2fms" +msgstr[2] "%(cache_calls)d llamadas en %(time).2fms" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" -msgstr "" +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "%(count)d llamadas al Cache desde el backend" +msgstr[1] "%(count)d llamadas al Caché desde backends" +msgstr[2] "%(count)d llamadas al Caché desde backends" -#: panels/settings_vars.py:16 +#: panels/headers.py:31 +msgid "Headers" +msgstr "Encabezados" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "Historial" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Análisis de rendimiento" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Interceptar re-direcionamiento" + +#: panels/request.py:16 +msgid "Request" +msgstr "Petición" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 msgid "Settings" msgstr "Configuraciones" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 #, python-format -msgid "Settings from %s" -msgstr "" +msgid "Settings from %s" +msgstr "Valores procedentes de %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d receptor de 1 señal" +msgstr[1] "%(num_receivers)d receptores de 1 señal" +msgstr[2] "%(num_receivers)d receptores de 1 señal" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d receptor de %(num_signals)d señales" +msgstr[1] "%(num_receivers)d receptores de %(num_signals)d señales" +msgstr[2] "%(num_receivers)d receptores de %(num_signals)d señales" + +#: panels/signals.py:67 msgid "Signals" msgstr "Señales" -#: panels/sql.py:146 +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Leer cambios tentativos" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Leer cambios permanentes" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Lectura repetible" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Inactivo" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Activo" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "En transacción" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "En error" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Desconocido" + +#: panels/sql/panel.py:162 msgid "SQL" -msgstr "" +msgstr "SQL" -#: panels/sql.py:160 -msgid "SQL Queries" -msgstr "" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Archivos estáticos (%(num_found)s encontrados, %(num_used)s en uso)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Archivos estáticos" -#: panels/template.py:47 +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s archivo usado" +msgstr[1] "%(num_used)s archivos usados" +msgstr[2] "%(num_used)s archivos usados" + +#: panels/templates/panel.py:101 msgid "Templates" msgstr "Plantillas" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" -msgstr "" +msgstr "Plantillas (%(num_templates)s renderizadas)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Sin origen" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Total: %0.2fms" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Tiempo" -#: panels/timer.py:47 -#, fuzzy -msgid "Resource Usage" -msgstr "Recurso" - -#: panels/timer.py:78 +#: panels/timer.py:46 msgid "User CPU time" -msgstr "" +msgstr "Tiempo en CPU de usuario" -#: panels/timer.py:79 +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f mseg" + +#: panels/timer.py:47 msgid "System CPU time" -msgstr "" +msgstr "Tiempo en CPU del sistema" -#: panels/timer.py:80 -#, fuzzy +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f mseg" + +#: panels/timer.py:48 msgid "Total CPU time" -msgstr "Tiempo Total" +msgstr "Tiempo total de CPU" -#: panels/timer.py:81 +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f mseg" + +#: panels/timer.py:49 msgid "Elapsed time" -msgstr "" +msgstr "Tiempo transcurrido" -#: panels/timer.py:82 +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f mseg" + +#: panels/timer.py:51 msgid "Context switches" -msgstr "" +msgstr "Cambios de contexto" -#: panels/version.py:20 panels/version.py:29 -#, fuzzy +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d voluntario, %(ivcsw)d involuntario" + +#: panels/versions.py:19 msgid "Versions" -msgstr "Versión Django" +msgstr "Versiones" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" -msgstr "" +msgid "Hide toolbar" +msgstr "Ocutar barra de herramientas" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Ocultar" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" msgstr "" -#: templates/debug_toolbar/base.html:54 -msgid "Close" -msgstr "Cerrar" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Mostrar barra de herramientas" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Deshabilitar para el próximo y sucesivos peticiones" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Habilitar para el próximo y sucesivos peticiones" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" msgstr "" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" msgstr "" -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" -msgstr "Total Llamadas" +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Resúmen" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" -msgstr "Tiempo Total" +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Llamadas totales" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" -msgstr "Visitas" +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Tiempo total" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Aciertos de caché" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Errores de caché" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Comandos" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Llamadas" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Tiempo (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Tipo" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" -msgstr "Parámetros" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argumentos" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Argumentos por palabra clave" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" -msgstr "Función" +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Encabezados de peticiones" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" -msgstr "Llave" - -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +msgstr "Clave" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valor" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" -msgstr "Nivel" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Encabezados de respuesta" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" -msgstr "Mensaje" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Entorno WSGI" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" -msgstr "No hay mensajes registrados" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Ya que el entorno WSGI hereda el entorno del servidor, solo un subconjunto significativo es mostrado más abajo." -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" -msgstr "" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Método" -#: templates/debug_toolbar/panels/request_vars.html:7 -#, fuzzy -msgid "View Function" -msgstr "Función" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Ruta" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" -msgstr "" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Variables de la petición" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" -msgstr "" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "Estado" -#: templates/debug_toolbar/panels/request_vars.html:27 -#, fuzzy -msgid "COOKIES Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Acción" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 -#, fuzzy +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" -#: templates/debug_toolbar/panels/request_vars.html:50 -#, fuzzy -msgid "No COOKIE data" -msgstr "No GET datos" +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Llamar" -#: templates/debug_toolbar/panels/request_vars.html:53 -#, fuzzy -msgid "SESSION Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "TiempoAcum" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" -msgstr "No SESSION datos" +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Por" -#: templates/debug_toolbar/panels/request_vars.html:79 -#, fuzzy -msgid "GET Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TiempoTot" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Contar" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Información de Vista" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Función vista" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Nombre de dirección URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Sin cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Datos de sesión" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Sin datos de sesión" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "Datos del GET" + +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" -msgstr "No GET datos" +msgstr "Sin datos GET" -#: templates/debug_toolbar/panels/request_vars.html:101 -#, fuzzy -msgid "POST Variables" -msgstr "Variable" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "Datos del POST" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" -msgstr "No POST datos" +msgstr "Sin datos POST" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Configuración" @@ -272,47 +501,73 @@ msgid "Signal" msgstr "Señal" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" -msgstr "" +msgstr "Receptores" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" -msgstr "Acción" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s consulta" +msgstr[1] "%(num)s consultas" +msgstr[2] "%(num)s consultas" -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" msgstr "" -#: templates/debug_toolbar/panels/sql.html:8 +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "y %(dupes)s repetidos" + +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" -msgstr "" +msgstr "Query" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" -msgstr "Línea" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Línea de tiempo" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" -msgstr "Método" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s consultas similares. " + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "Repetidas %(dupes)s veces." + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Conexión:" -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" -msgstr "Archivo" +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Nivel de aislamiento:" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" -msgstr "Regresar" +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Estado de la transacción:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(desconocido)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "No se registraron consultas SQL durante ésta petición." #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" -msgstr "" +msgid "SQL explained" +msgstr "SQL explicado" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 @@ -320,59 +575,150 @@ msgstr "" msgid "Executed SQL" msgstr "SQL Ejecutado" +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Base de datos" + #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" -msgstr "" +msgid "SQL profiled" +msgstr "SQL analizado" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" -msgstr "" +msgstr "Error" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" -msgstr "" +msgid "SQL selected" +msgstr "SQL seleccionado" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" -msgstr "Set Vacío" +msgstr "Establecer Vacío" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Ruta a archivos estático" +msgstr[1] "Rutas a archivos estáticos" +msgstr[2] "Rutas a archivos estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefijo %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Ninguno" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Aplicación a archivos estáticos" +msgstr[1] "Aplicaciones de archivos estáticos" +msgstr[2] "Aplicaciones de archivos estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Archivo estático" +msgstr[1] "Archivos estáticos" +msgstr[2] "Archivos estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s archivo" +msgstr[1] "%(payload_count)s archivos" +msgstr[2] "%(payload_count)s archivos" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Ubicación" #: templates/debug_toolbar/panels/template_source.html:4 -#, fuzzy -msgid "Template Source" -msgstr "Plantilla" +msgid "Template source:" +msgstr "Fuente de plantilla:" #: templates/debug_toolbar/panels/templates.html:2 -#, fuzzy msgid "Template path" -msgstr "Plantilla" +msgid_plural "Template paths" +msgstr[0] "Ruta de plantilla" +msgstr[1] "Rutas de plantillas" +msgstr[2] "Rutas de plantillas" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" -msgstr "Plantilla" - -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" -msgstr "" +msgid_plural "Templates" +msgstr[0] "Plantilla" +msgstr[1] "Plantillas" +msgstr[2] "Plantillas" -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" -msgstr "Ninguno" +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Mostrar/Ocultar contexto" -#: templates/debug_toolbar/panels/templates.html:31 +#: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" -msgstr "" +msgid_plural "Context processors" +msgstr[0] "Procesador de contexto" +msgstr[1] "Procesadores de contexto" +msgstr[2] "Procesadores de contexto" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Uso de recursos" -#: templates/debug_toolbar/panels/timer.html:9 +#: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Recurso" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Distribución de tiempos de navegador" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Atributo de tiempo" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Milisegundos desde inicio de la navegación (+longitud)" + +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" -msgstr "" +msgstr "Paquete" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nombre" -#: templates/debug_toolbar/panels/versions.html:7 -#, fuzzy +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" -msgstr "Versión Django" +msgstr "Versión" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Ubicación:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "El Django Debug Toolbar ha interceptado un re-direccionamiento a la dirección de Internet mostrada arriba, con el propósito de inspeccionarla. Usted puede hacer clic en el vínculo de arriba para continuar con el re-direccionamiento normalmente." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "La información de este panel ya no se encuentra disponible. Por favor recargue la página y pruebe nuevamente." diff --git a/debug_toolbar/locale/fa/LC_MESSAGES/django.mo b/debug_toolbar/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 000000000..fa30fd402 Binary files /dev/null and b/debug_toolbar/locale/fa/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/fa/LC_MESSAGES/django.po b/debug_toolbar/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 000000000..edb202e62 --- /dev/null +++ b/debug_toolbar/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,706 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Ali Soltani , 2021 +# Elyas Ebrahimpour , 2024 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Elyas Ebrahimpour , 2024\n" +"Language-Team: Persian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "نوار ابزار دیباگ" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه" +msgstr[1] "%(cache_calls)d فراخوان در %(time).2f میلی‌ثانیه" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "فراخوان‌های کش از %(count)d بک‌اند" +msgstr[1] "فراخوان‌های کش از %(count)d بک‌اندها" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "هدر ها" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "تاریخچه" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "نمایه سازی" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "رهگیری تغییر مسیرها" + +#: panels/request.py:16 +msgid "Request" +msgstr "ریکوئست" + +#: panels/request.py:38 +msgid "" +msgstr "<بدون نمایش>" + +#: panels/request.py:55 +msgid "" +msgstr "<در دسترس نیست>" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "تنظیمات" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "تنظیمات از %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d گیرنده از 1 سیگنال" +msgstr[1] "%(num_receivers)d گیرنده از 1 سیگنال" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d گیرنده از %(num_signals)d سیگنال" +msgstr[1] "%(num_receivers)d گیرنده از %(num_signals)d سیگنال" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "سیگنال‌ها" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "خواندن بدون تاثیر" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "خواندن با تاثیر" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "خواندن تکرارپذیر" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "قابل سریالایز شدن" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "کامیت خودکار" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "IDLE" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "فعال" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "در تراکنش" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "در خطا" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "ناشناخته" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "اس کیو ال" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه" +msgstr[1] "%(query_count)d کوئری در %(sql_time).2f میلی‌ثانیه" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "کوئری‌های SQL از %(count)d اتصال" +msgstr[1] "کوئری‌های SQL از %(count)d اتصال" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "فایل‌های استاتیک (%(num_found)s یافته شده، %(num_used)s استفاده شده)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "فایل های استاتیک" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s فایل استفاده شده" +msgstr[1] "%(num_used)s فایل استفاده شده" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "تمپلیت ها" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "تمپلیت ها (%(num_templates)s rendered)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "بدون origin" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "پردازنده: %(cum)0.2f میلی‌ثانیه (%(total)0.2f میلی‌ثانیه)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "مجموع: %0.2f میلی‌ثانیه" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "زمان" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "زمان سی پی یو کاربر" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f میلی‌ثانیه" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "زمان CPU سیستم" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f میلی‌ثانیه" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "زمان کل سی پی یو" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f میلی ثانیه" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "زمان سپری شده" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f میلی‌ثانیه" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "تغییرات زمینه" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d اختیاری، %(ivcsw)d غیراختیاری" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "ورژن ها" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "پنهان کردن toolbar" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "پنهان کردن" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "نمایش toolbar" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "غیر فعال کردن برای ریکوئست های پی در پی" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "فعال کردن برای ریکوئست های بعدی و پی در پی" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "خلاصه" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "تعداد نهایی کال کردن ها" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "زمان نهایی" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Cache hits" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "عدم دسترسی به کش" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "دستورات" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "فراخوانی ها" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "زمان (میلی ثانیه)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "نوع" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "آرگومان ها" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "آرگومان های کیورد" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "بک اند" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "هدر های ریکوئست" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "کلید" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "مقدار" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "هدر های ریسپانس" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "محیط WSGI" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "از آنجا که محیط WSGI محیط سرور را به ارث می برد ، فقط یک زیر مجموعه مهم در زیر نشان داده شده است." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "متد" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Path" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "متغیر های ریکوئست" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "وضعیت" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "اکشن" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "متغیر" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Call" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "بر" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "زمان نهایی" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "تعداد" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "اطلاعات View" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "تابع Viw" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "نام URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "کوکی ها" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "کوکی ای وجود ندارد" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "دیتای سشن" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "دیتای سشن وجود ندارد" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "دیتای GET" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "دیتای GET وجود ندارد" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "دیتای POST" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "دیتای POST وجود ندارد" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "تنظیمات" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Receiver ها" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "کوئری" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "تایملاین" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s کوئری مشابه" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "%(dupes)s بار تکرار شده" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "کانکشن:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "سطح isolation:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "وضعیت تراکنش" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(ناشناخته)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "کوئری SQL ای در این ریکوئست ثبت نشده است" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "توضیح SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "کوئری اجرا شده" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "دیتابیس" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL profiled" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "خطا" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "انتخاب شده SQL" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "set خالی" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefix %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "خالی" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "مکان" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "منبع تمپلیت:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "تغییر متن" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "پردازشگر محیط" +msgstr[1] "پردازشگرهای محیط" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "استفاده منابع" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "منابع" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "زمان بندی مرورگر" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "ویژگی زمان بندی" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "میلی‌ثانیه از آغاز ناوبری (+length)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "پکیج" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "نام" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "ورژن" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "مکان:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "نوار ابزار اشکال‌زدای Django یک هدایت به URL بالا را به منظور مشاهده اشکال توسط ابزار اشکال‌زدای افزونه کرده است. می‌توانید بر روی پیوند بالا کلیک کنید تا با هدایت به صورت عادی ادامه دهید." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "دیتا برای نمایش در دسترس نیست. لطفا صفحه را ریفرش کنید." diff --git a/debug_toolbar/locale/fi/LC_MESSAGES/django.mo b/debug_toolbar/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 000000000..3c0054dc7 Binary files /dev/null and b/debug_toolbar/locale/fi/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/fi/LC_MESSAGES/django.po b/debug_toolbar/locale/fi/LC_MESSAGES/django.po new file mode 100644 index 000000000..fed2c9759 --- /dev/null +++ b/debug_toolbar/locale/fi/LC_MESSAGES/django.po @@ -0,0 +1,705 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Klaus Dahlén, 2012 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Klaus Dahlén, 2012\n" +"Language-Team: Finnish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Välimuisti" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d kutsu %(time).2fms" +msgstr[1] "%(cache_calls)d kutsua %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilointi" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" + +#: panels/request.py:16 +msgid "Request" +msgstr "" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Asetukset" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d vastaanotin 1 signaalille" +msgstr[1] "%(num_receivers)d vastaanotinta 1 signaalille" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d vastaanotin %(num_signals)d signaalille" +msgstr[1] "%(num_receivers)d vastaanotinta %(num_signals)d signaalille" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Signaalit" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Muuttuja" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Tapahtuma" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Tapahtuman tila:" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Virhe" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "(tuntematon)" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Staattiset tiedostot" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Asettelupohjat" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Asetttelupohjat (%(num_templates)s renderöity)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Aika" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Käyttäjän CPU-aika" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msek" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Järjestelmän CPU-aika" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msek" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "CPU-aika yhteensä" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msek" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Kulunut aika" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msek" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Kontekstin vivut" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versiot" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Piilota" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Aika (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Tyyppi" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Avain" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Arvo" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Polku" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Tapahtuma" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Muuttuja" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Kutsu" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "CumTime" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "/" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTime" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Määrä" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Näkymän tiedot" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Ei GET-dataa" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Ei POST-dataa" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Asetus" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signaali" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Vastaanottimet" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s kysely" +msgstr[1] "%(num)s kyselyä" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Kysely" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Aikajana" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Yhteys:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Eristystaso:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Tapahtuman status:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(tuntematon)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Tämän pyynnön aikana ei tehty yhtään SQL-kyselyä." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Suoritettu SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Tietokanta" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Virhe" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Tyhjä joukko" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "None" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "Staattiset tiedostot" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Sijainti" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Sivupohjan polku" +msgstr[1] "Sivupohjan polku" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Sivupohja" +msgstr[1] "Sivupohja" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Kontekstiprosessori" +msgstr[1] "Kontekstiprosessori" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Resurssi" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nimi" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versio" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/fr/LC_MESSAGES/django.mo b/debug_toolbar/locale/fr/LC_MESSAGES/django.mo index dd507c37f..559e2d847 100644 Binary files a/debug_toolbar/locale/fr/LC_MESSAGES/django.mo and b/debug_toolbar/locale/fr/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/fr/LC_MESSAGES/django.po b/debug_toolbar/locale/fr/LC_MESSAGES/django.po index a571bb1e4..88c04b0c5 100644 --- a/debug_toolbar/locale/fr/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/fr/LC_MESSAGES/django.po @@ -1,270 +1,500 @@ -# Django Debug Toolbar in French. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# David Paccoud, 2009. # # +# Translators: +# Anthony Jorion , 2013 +# c1b16e6c929c50740e884a23aafc8829_00449d9 , 2014 +# Claude Paroz , 2013 +# Colin O'Brien , 2021 +# David Paccoud, 2009 +# Dominick Rivard , 2013 +# Maxime Abry , 2016 msgid "" msgstr "" -"Project-Id-Version: Django Debug Toolbar 0.8.0\n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: 2009-10-14 22:53+0200\n" -"Last-Translator: David Paccoud \n" -"Language-Team: French \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Colin O'Brien , 2021\n" +"Language-Team: French (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: panels/cache.py:92 -#, python-format -msgid "Cache: %.2fms" +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Barre d'outils de débogage" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." msgstr "" -#: panels/cache.py:95 -msgid "Cache Usage" -msgstr "Usage du cache" +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" -msgstr "En-têtes HTTP" +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" -#: panels/logger.py:56 -msgid "Logging" -msgstr "Journaux" +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" -#: panels/logger.py:63 -#, fuzzy -msgid "Log Messages" -msgstr "Message" +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" -msgstr "Variables de requête" +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d appel en %(time).2fms" +msgstr[1] "%(cache_calls)d appels en %(time).2fms" +msgstr[2] "%(cache_calls)d appels en %(time).2fms" -#: panels/settings_vars.py:16 +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Appels au cache depuis %(count)d moteur" +msgstr[1] "Appels au cache depuis %(count)d moteurs" +msgstr[2] "Appels au cache depuis %(count)d moteurs" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "En-têtes" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "Historique" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilage" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Interception des redirections" + +#: panels/request.py:16 +msgid "Request" +msgstr "Requête" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 msgid "Settings" msgstr "Paramètres" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "Paramètres de %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d receveur d'un signal" +msgstr[1] "%(num_receivers)d receveurs d'un signal" +msgstr[2] "%(num_receivers)d receveurs d'un signal" + +#: panels/signals.py:62 #, python-format -msgid "Settings from %s" -msgstr "Paramètres de %s" +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d receveur de %(num_signals)d signaux" +msgstr[1] "%(num_receivers)d receveurs de %(num_signals)d signaux" +msgstr[2] "%(num_receivers)d receveurs de %(num_signals)d signaux" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:67 msgid "Signals" msgstr "Signaux" -#: panels/sql.py:146 +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Lecture non validée" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Lecture validée" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Lecture répétable" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Sérialisable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Auto validation" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Inactif" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Actif" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Transaction en cours" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Erreur" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Indéterminé" + +#: panels/sql/panel.py:162 msgid "SQL" msgstr "SQL" -#: panels/sql.py:160 -#, fuzzy -msgid "SQL Queries" -msgstr "Requêtes SQL" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)d requête en %(sql_time).2f ms" +msgstr[1] "%(query_count)d requêtes en %(sql_time).2f ms" +msgstr[2] "%(query_count)d requêtes en %(sql_time).2f ms" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "requêtes SQL venant de %(count)d connexion" +msgstr[1] "Requêtes SQL venant de %(count)d connexions" +msgstr[2] "Requêtes SQL venant de %(count)d connexions" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Fichiers statiques (%(num_found)s trouvé(s), %(num_used)s utilisé(s))" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Fichiers statiques" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s fichier utilisé" +msgstr[1] "%(num_used)s fichiers utilisés" +msgstr[2] "%(num_used)s fichiers utilisés" -#: panels/template.py:47 +#: panels/templates/panel.py:101 msgid "Templates" msgstr "Gabarits" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "Gabarits (%(num_templates)s affichés)" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Sans Origine" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Total : %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Temps" -#: panels/timer.py:47 -#, fuzzy -msgid "Resource Usage" -msgstr "Usage des ressources" - -#: panels/timer.py:78 +#: panels/timer.py:46 msgid "User CPU time" -msgstr "Temps CPU utilisateur" +msgstr "Temps CPU de l'utilisateur" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f ms" -#: panels/timer.py:79 +#: panels/timer.py:47 msgid "System CPU time" -msgstr "Temps CPU système" +msgstr "Temps CPU du système" -#: panels/timer.py:80 -#, fuzzy +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f ms" + +#: panels/timer.py:48 msgid "Total CPU time" -msgstr "Temps CPU Total" +msgstr "Temps total du CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f ms" -#: panels/timer.py:81 +#: panels/timer.py:49 msgid "Elapsed time" msgstr "Temps écoulé" -#: panels/timer.py:82 -#, fuzzy +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f ms" + +#: panels/timer.py:51 msgid "Context switches" -msgstr "Changements de contexte" +msgstr "Basculements de contexte" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d volontaire, %(ivcsw)d involontaire" -#: panels/version.py:20 panels/version.py:29 -#, fuzzy +#: panels/versions.py:19 msgid "Versions" msgstr "Versions" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" -msgstr "Masquer la barre" +msgid "Hide toolbar" +msgstr "Masquer la barre d'outils" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Masquer" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" -msgstr "Afficher la barre" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" -#: templates/debug_toolbar/base.html:54 -msgid "Close" -msgstr "Fermer" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Afficher la barre d'outils" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" -msgstr "Emplacement" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Désactiver pour les requêtes suivantes" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Activer pour les requêtes suivantes" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" msgstr "" -"La barre de Debug Django a intercepté une redirection vers l'adresse ci-" -"dessous afin de permettre la consultation des messages de debug. Vous " -"pouvez cliquer sur le lien ci-dessus pour continuer normalement avec la " -"redirection. Si vous voulez désactiver cette fonctionnalité, paramétrez la " -"valeur de la clé INTERCEPT_REDIRECTS du dictionnaire " -"DEBUG_TOOLBAR_CONFIG à False." - -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Résumé" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" msgstr "Nombre total d'appels" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" -msgstr "Temps Total" +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Temps total" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Succès de cache" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Défauts de cache" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" -msgstr "Requêtes" +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Commandes" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" -msgstr "Ratés" +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Appels" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" -msgstr "Cassé" +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Temps (ms)" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "Type" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" msgstr "Paramètres" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" -msgstr "Fonction" +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Paramètres nommés" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Moteur" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "En-têtes de requête" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Clé" -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Valeur" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" -msgstr "Niveau" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "En-têtes de réponse" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" -msgstr "Message" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Environnement WSGI" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" -msgstr "Aucun message dans le journal" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Comme l'environnement WSGI hérite de celui du serveur, seul un sous-ensemble pertinent est affiché ci-dessous." -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" -msgstr "" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Méthode" -#: templates/debug_toolbar/panels/request_vars.html:7 -#, fuzzy -msgid "View Function" -msgstr "Fonction" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Chemin" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" -msgstr "" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Variables de Requête" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" -msgstr "" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "État" -#: templates/debug_toolbar/panels/request_vars.html:27 -msgid "COOKIES Variables" -msgstr "Variables des COOKIES" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Action" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Variable" -#: templates/debug_toolbar/panels/request_vars.html:50 -msgid "No COOKIE data" -msgstr "Aucune donnée de COOKIE" +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Appel" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "Temps cumulé" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Par" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "Temps total" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Compte" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Afficher l'information" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Fonction de vue" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Nom d'URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Pas de cookies" -#: templates/debug_toolbar/panels/request_vars.html:53 -msgid "SESSION Variables" -msgstr "Variables de SESSION" +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Données de session" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" -msgstr "Aucune donnée de SESSION" +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Pas de données de session" -#: templates/debug_toolbar/panels/request_vars.html:79 -msgid "GET Variables" -msgstr "Variables GET" +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "Données GET" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" msgstr "Aucune donnée GET" -#: templates/debug_toolbar/panels/request_vars.html:101 -msgid "POST Variables" -msgstr "Variables POST" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "Données POST" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" msgstr "Aucune donnée POST" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Paramètre" @@ -273,47 +503,73 @@ msgid "Signal" msgstr "Signal" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" msgstr "Receveurs" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" -msgstr "Action" - -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" -msgstr "Pile d'appel" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s requête" +msgstr[1] "%(num)s requêtes" +msgstr[2] "%(num)s requêtes" #: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "comprenant %(count)s similaires" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "et %(dupes)s en double" + +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Requête" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" -msgstr "Ligne" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Chronologie" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" -msgstr "Méthode" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s requêtes similaires." + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "Dupliqué %(dupes)s fois." -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" -msgstr "Fichier" +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Connexion :" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" -msgstr "Retour" +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Niveau d'isolation :" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "État de la transaction :" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(indéterminé)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Aucune requête SQL n'a été enregistrée durant cette requête." #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" -msgstr "SQL Expliqué" +msgid "SQL explained" +msgstr "SQL expliqué" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 @@ -321,56 +577,150 @@ msgstr "SQL Expliqué" msgid "Executed SQL" msgstr "SQL Exécuté" +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Base de données" + #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" -msgstr "SQL Profilé" +msgid "SQL profiled" +msgstr "SQL profilé" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Erreur" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" -msgstr "SQL Sélectionné" +msgid "SQL selected" +msgstr "SQL sélectionné" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" msgstr "Ensemble vide" +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Chemin de fichier statique" +msgstr[1] "Chemins de fichiers statiques" +msgstr[2] "Chemins de fichiers statiques" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(préfixe %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Aucun" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Application de fichiers statiques" +msgstr[1] "Applications de fichiers statiques" +msgstr[2] "Applications de fichiers statiques" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "Fichiers statiques" +msgstr[2] "Fichiers statiques" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s fichier" +msgstr[1] "%(payload_count)s fichiers" +msgstr[2] "%(payload_count)s fichiers" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Emplacement" + #: templates/debug_toolbar/panels/template_source.html:4 -msgid "Template Source" -msgstr "Source du gabarit" +msgid "Template source:" +msgstr "Source du gabarit :" #: templates/debug_toolbar/panels/templates.html:2 msgid "Template path" -msgstr "Chemin du gabarit" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "Chemin du gabarit" +msgstr[2] "Chemin du gabarit" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" -msgstr "Gabarit" - -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" -msgstr "Afficher/Masquer le contexte" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "Gabarit" +msgstr[2] "Gabarit" -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" -msgstr "Aucun" +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Afficher/masquer le contexte" -#: templates/debug_toolbar/panels/templates.html:31 +#: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" -msgstr "Processeur de contexte" +msgid_plural "Context processors" +msgstr[0] "Processeur de contexte" +msgstr[1] "Processeurs de contexte" +msgstr[2] "Processeurs de contexte" -#: templates/debug_toolbar/panels/timer.html:9 +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Utilisation des ressources" + +#: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" -msgstr "Ressources" +msgstr "Ressource" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Chronologie du navigateur" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Attribut mesuré" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Millisecondes depuis le début de la navigation (+longueur)" + +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "Paquet" -#: templates/debug_toolbar/panels/versions.html:7 +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nom" + +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" msgstr "Version" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Emplacement :" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "La barre de débogage Django a intercepté une redirection vers l'URL ci-dessus afin de permettre la consultation des messages de débogage. Vous pouvez cliquer sur le lien ci-dessus pour continuer normalement avec la redirection." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Les données de ce panneau ne sont plus disponibles. Rechargez la page et essayez à nouveau." diff --git a/debug_toolbar/locale/he/LC_MESSAGES/django.mo b/debug_toolbar/locale/he/LC_MESSAGES/django.mo index 4236dd535..4f680148c 100644 Binary files a/debug_toolbar/locale/he/LC_MESSAGES/django.mo and b/debug_toolbar/locale/he/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/he/LC_MESSAGES/django.po b/debug_toolbar/locale/he/LC_MESSAGES/django.po index 11fbb261d..c766a77a7 100644 --- a/debug_toolbar/locale/he/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/he/LC_MESSAGES/django.po @@ -1,372 +1,720 @@ -# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. # +# +# Translators: +# shaib , 2012 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: 2009-08-24 23:08-0600\n" -"Last-Translator: Alex \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: shaib , 2012\n" +"Language-Team: Hebrew (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: he\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "" -#: panels/cache.py:92 +#: panels/cache.py:174 #, python-format -msgid "Cache: %.2fms" +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/headers.py:31 +msgid "Headers" msgstr "" -#: panels/cache.py:95 -msgid "Cache Usage" +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" msgstr "" -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" +#: panels/profiling.py:140 +msgid "Profiling" msgstr "" -#: panels/logger.py:56 -msgid "Logging" -msgstr "רישום יומן" +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" -#: panels/logger.py:63 -#, fuzzy -msgid "Log Messages" -msgstr "הודעה" +#: panels/request.py:16 +msgid "Request" +msgstr "" + +#: panels/request.py:38 +msgid "" +msgstr "" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" +#: panels/request.py:55 +msgid "" msgstr "" -#: panels/settings_vars.py:16 +#: panels/settings.py:17 msgid "Settings" msgstr "" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 #, python-format -msgid "Settings from %s" +msgid "Settings from %s" msgstr "" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/signals.py:67 msgid "Signals" -msgstr "סימנים" +msgstr "סיגנלים" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "משתנה" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "פעילות" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "שגיאה" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "" -#: panels/sql.py:146 +#: panels/sql/panel.py:162 msgid "SQL" msgstr "" -#: panels/sql.py:160 -msgid "SQL Queries" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" msgstr "" -#: panels/template.py:47 +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/templates/panel.py:101 msgid "Templates" msgstr "תבניות" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" msgstr "" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "זמן" -#: panels/timer.py:47 -msgid "Resource Usage" +#: panels/timer.py:46 +msgid "User CPU time" msgstr "" -#: panels/timer.py:78 -msgid "User CPU time" +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" msgstr "" -#: panels/timer.py:79 +#: panels/timer.py:47 msgid "System CPU time" msgstr "" -#: panels/timer.py:80 -#, fuzzy +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 msgid "Total CPU time" -msgstr "זמן" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" -#: panels/timer.py:81 +#: panels/timer.py:49 msgid "Elapsed time" msgstr "" -#: panels/timer.py:82 +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 msgid "Context switches" msgstr "" -#: panels/version.py:20 panels/version.py:29 -#, fuzzy +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 msgid "Versions" -msgstr "ג 'נגו גירסה" +msgstr "גירסאות" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" +msgid "Hide toolbar" msgstr "" #: templates/debug_toolbar/base.html:23 msgid "Hide" -msgstr "הסתיר" +msgstr "הסתר" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" msgstr "" -#: templates/debug_toolbar/base.html:54 -msgid "Close" -msgstr "סגור" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" -msgstr "מקום" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" msgstr "" -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" msgstr "" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" -msgstr "זמן" +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" -msgstr "הצלחות" +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" msgstr "" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" msgstr "" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" msgstr "סוג" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" msgstr "" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" msgstr "" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "מפתח" -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "ערך" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" -msgstr "רמה" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" -msgstr "הודעה" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" -msgstr "אין הודעות" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:7 -msgid "View Function" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:27 -#, fuzzy -msgid "COOKIES Variables" -msgstr "מזהה" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "פעילות" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" -msgstr "מזהה" +msgstr "משתנה" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:50 -msgid "No COOKIE data" -msgstr "אין נתונים לעוגיות" +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:53 -#, fuzzy -msgid "SESSION Variables" -msgstr "מזהה" +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" -msgstr "אין נתונים להתחברות" +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:79 -#, fuzzy -msgid "GET Variables" -msgstr "מזהה" +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" -msgstr "שום דבר עבור GET" +msgstr "אין נתוני GET" -#: templates/debug_toolbar/panels/request_vars.html:101 -#, fuzzy -msgid "POST Variables" -msgstr "מזהה" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" -msgstr "שום דבר עבור POST" +msgstr "אין נתוני POST" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" -msgstr "סימן" +msgstr "סיגנל" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" msgstr "" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" -msgstr "פעילות" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" msgstr "" -#: templates/debug_toolbar/panels/sql.html:8 +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" -msgstr "שורה" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." msgstr "" -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" -msgstr "קובץ" +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" -msgstr "חזרה" +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" +msgid "SQL explained" msgstr "" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 #: templates/debug_toolbar/panels/sql_select.html:9 msgid "Executed SQL" -msgstr "הסבר עבור SQL" +msgstr "SQL שבוצע" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "" #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" +msgid "SQL profiled" msgstr "" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "שגיאה" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" +msgid "SQL selected" msgstr "" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" -msgstr "תוצאות ריק" +msgstr "קבוצה ריקה" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "מקום" #: templates/debug_toolbar/panels/template_source.html:4 -#, fuzzy -msgid "Template Source" -msgstr "תבנית" +msgid "Template source:" +msgstr "" #: templates/debug_toolbar/panels/templates.html:2 -#, fuzzy msgid "Template path" -msgstr "תבנית" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" -msgstr "תבנית" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "תבנית" +msgstr[2] "תבנית" -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" msgstr "" -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" -msgstr "" - -#: templates/debug_toolbar/panels/templates.html:31 +#: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" msgstr "" -#: templates/debug_toolbar/panels/timer.html:9 +#: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" msgstr "" -#: templates/debug_toolbar/panels/versions.html:7 -#, fuzzy +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" -msgstr "ג 'נגו גירסה" +msgstr "" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/id/LC_MESSAGES/django.mo b/debug_toolbar/locale/id/LC_MESSAGES/django.mo new file mode 100644 index 000000000..4439e2c4d Binary files /dev/null and b/debug_toolbar/locale/id/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/id/LC_MESSAGES/django.po b/debug_toolbar/locale/id/LC_MESSAGES/django.po new file mode 100644 index 000000000..f206c0b61 --- /dev/null +++ b/debug_toolbar/locale/id/LC_MESSAGES/django.po @@ -0,0 +1,690 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Muhammad Panji , 2012 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Muhammad Panji , 2012\n" +"Language-Team: Indonesian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" + +#: panels/request.py:16 +msgid "Request" +msgstr "" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Pengaturan" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Sinyal" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Variabel" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Aksi" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Status transaksi:" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "(tidak diketahui)" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Berkas statik" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Template" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Waktu" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "CPU time pengguna" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "CPU time sistem" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "CPU time total" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Waktu terlampaui" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versi" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Menyembunyikan" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Waktu (milidetik)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Jenis" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Kunci" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Nilai" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Aksi" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variabel" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Panggil" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "CumTime" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Per" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTime" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Hitung" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Lihat informasi" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Tidak ada data GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Tidak ada data POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Pengaturan" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Sinyal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Penerima" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Koneksi:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Tingkat isolasi:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Status transaksi:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(tidak diketahui)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "SQL Tereksekusi" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Basis data" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Himpunan kosong" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Tidak ada" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Berkas statik" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Lokasi" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Template path" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Sumber daya" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versi" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/it/LC_MESSAGES/django.mo b/debug_toolbar/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 000000000..4294f8993 Binary files /dev/null and b/debug_toolbar/locale/it/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/it/LC_MESSAGES/django.po b/debug_toolbar/locale/it/LC_MESSAGES/django.po new file mode 100644 index 000000000..97ee9c3e4 --- /dev/null +++ b/debug_toolbar/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,722 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Dario Agliottone , 2012 +# Flavio Curella , 2013 +# yakky , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: yakky , 2013-2014\n" +"Language-Team: Italian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d chiamata in %(time).2fms" +msgstr[1] "%(cache_calls)d chiamate in %(time).2fms" +msgstr[2] "%(cache_calls)d chiamate in %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Chiamate alla cache da %(count)d backend" +msgstr[1] "Chiamate alla cache da %(count)d backend" +msgstr[2] "Chiamate alla cache da %(count)d backend" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Intestazioni" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilazione" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Intercetta ridirezioni" + +#: panels/request.py:16 +msgid "Request" +msgstr "Request" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Impostazioni" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d ricevitore di 1 segnale" +msgstr[1] "%(num_receivers)d ricevitori di 1 segnale" +msgstr[2] "%(num_receivers)d ricevitori di 1 segnale" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d ricevitore di %(num_signals)d segnali" +msgstr[1] "%(num_receivers)d ricevitori di %(num_signals)d segnali" +msgstr[2] "%(num_receivers)d ricevitori di %(num_signals)d segnali" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Segnali" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Repeatable read" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Idle" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Azione" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Stato transazione:" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Errore" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "(sconosciuto)" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "File statici (%(num_found)s trovati, %(num_used)s usati)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Files statici" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s file usato" +msgstr[1] "%(num_used)s file usati" +msgstr[2] "%(num_used)s file usati" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Template" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Templates (%(num_templates)s rendered)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Totale: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Tempo" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Tempo CPU utente" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msec" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Tempo CPU sistema" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msec" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Tempo Totale CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msec" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Tempo Trascorso" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msec" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Cambi di contesto" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d volontario, %(ivcsw)d involontario" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versioni" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Nascondi Toolbar" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Nascondi" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Mostra Toolbar" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Disattiva per la prossima requests e le successive" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Abilita per la prossima requests e le successive" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Sommario" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Chiamate totali" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Tempo Totale" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Trovati in cache" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Non trovati in cache" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Comandi" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Chiamate" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Durata (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Tipo" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argomenti" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Parole chiave" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Header della request" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Nome" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Valore" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Header della response" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Ambiente WSGI" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Visto che l'ambiente WSGI è ereditato dal server, sotto è mostrata solo la parte significativa." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Percorso" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Azione" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variabile" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Chiamata" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "CumTime" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Per" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTime" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Numero" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Vedi Informazioni" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Funzione View" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Nome URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Nessun cookie" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Dati di sessione" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Nessun dato in sessione" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "Dati GET" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Nessun dato in GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "Dati POST" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Nessuno dato in POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Impostazione" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Segnale" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Ricevitori" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s query" +msgstr[1] "%(num)s query" +msgstr[2] "%(num)s query" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Query" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Timeline" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Connessione:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Isolation level:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Stato transazione:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(sconosciuto)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Nessuna Query SQL è stata registrata durante questa richiesta" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL spigato" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "SQL eseguita" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Database" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL profilato" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Errore" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "SQL selezionato" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Insieme vuoto" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Percorso file statici" +msgstr[1] "Percorsi file statici" +msgstr[2] "Percorsi file statici" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefisso %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Nessuno" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "App file statici" +msgstr[1] "App file statici" +msgstr[2] "App file statici" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "Files statici" +msgstr[2] "Files statici" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s file" +msgstr[1] "%(payload_count)s file" +msgstr[2] "%(payload_count)s file" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Location" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Sorgente del template" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Percorso dei template" +msgstr[1] "Percorsi dei template" +msgstr[2] "Percorsi dei template" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "Template" +msgstr[2] "Template" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Cambia contesto" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Context processor" +msgstr[1] "Context processors" +msgstr[2] "Context processors" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Uso risorsa" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Risorsa" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Tempo browser" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Attributo" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Millisecondi dall'inizio della navigazione (+lunghezza)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nome" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versione" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Location:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar ha intercettato un redirect verso la URL indicata per visualizzare il debug, Puoi cliccare sul link sopra per continuare normalmente con la redirezione." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Non sono più disponibili dati per questo pannello. Ricarica la pagina e riprova." diff --git a/debug_toolbar/locale/ja/LC_MESSAGES/django.mo b/debug_toolbar/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 000000000..55377e981 Binary files /dev/null and b/debug_toolbar/locale/ja/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/ja/LC_MESSAGES/django.po b/debug_toolbar/locale/ja/LC_MESSAGES/django.po new file mode 100644 index 000000000..e985d55f5 --- /dev/null +++ b/debug_toolbar/locale/ja/LC_MESSAGES/django.po @@ -0,0 +1,690 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Shinya Okano , 2012,2014,2020 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Shinya Okano , 2012,2014,2020\n" +"Language-Team: Japanese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "デバッグツールバー" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "キャッシュ" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "ヘッダー" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "プロファイル" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "リダイレクトに割込み" + +#: panels/request.py:16 +msgid "Request" +msgstr "リクエスト" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "<利用不可>" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "設定" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "シグナル" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "静的ファイル" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "テンプレート" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "時間" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "バージョン" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "ツールバーを隠す" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "隠す" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "ツールバーを表示" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "時間 (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "引数" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "キーワード引数" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "バックエンド" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "リクエストヘッダー" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "キー" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "値" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "レスポンスヘッダー" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "パス" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "変数" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "ビューの情報" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "ビュー関数" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL名" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "クッキー" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "クッキーはありません" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "セッションデータ" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "セッションデータはありません" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "設定項目" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "シグナル" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "レシーバー" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "タイムライン" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "実行されたSQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "データベース" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "エラー" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "静的ファイルのパス" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "ありません" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "静的ファイルを含むアプリケーション" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "静的ファイル" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "テンプレート" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "コンテキストプロセッサー" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "リソース" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "名前" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "バージョン" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/ko/LC_MESSAGES/django.mo b/debug_toolbar/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 000000000..592198de1 Binary files /dev/null and b/debug_toolbar/locale/ko/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/ko/LC_MESSAGES/django.po b/debug_toolbar/locale/ko/LC_MESSAGES/django.po new file mode 100644 index 000000000..97cdf8c61 --- /dev/null +++ b/debug_toolbar/locale/ko/LC_MESSAGES/django.po @@ -0,0 +1,690 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# yeongkwang, 2022 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: yeongkwang, 2022\n" +"Language-Team: Korean (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "캐시" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(time).2f 밀리초 동안 %(cache_calls)d번 호출" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "백엔드에서 %(count)d개의 캐시 호출" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "헤더" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "히스토리" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "프로파일링" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "리다이렉션 가로채기" + +#: panels/request.py:16 +msgid "Request" +msgstr "요청" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "<사용할 수 없음>" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "설정" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "설정 %s" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "1개의 시그널 %(num_receivers)d개의 리시버" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_signals)d개의 시그널 %(num_receivers)d개의 리시버" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "시그널" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "유휴" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "활성" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "트랜잭션" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "에러" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "알 수 없음" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(sql_time).2f 밀리초 동안 %(query_count)d개의 쿼리" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "SQL 쿼리 %(count)d개의 커넥션" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "정적 파일 (%(num_found)s개 찾음, %(num_used)s개 사용됨)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "정적 파일" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s개의 파일 사용됨" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "템플릿" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "템플릿 (%(num_templates)s개 렌더링)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "시각" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "경과 시간" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "컨텍스트 스위치" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "버전" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "툴바 숨기기" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "숨기기" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "툴바 열기" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "다음 요청부터 비활성화 됩니다." + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "다음 요청부터 활성화 됩니다." + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "개요" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "총 요청 개수" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "총 소요 시간" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "캐시 적중" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "캐시 비적중" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "명령" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "호출" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "시간 (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "타입" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "매개변수" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "키워드 매개변수" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "백엔드" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "요청 헤더" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "키" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "값" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "응답 헤더" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI 환경" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "WSGI 환경이 서버 환경을 상속하므로 아래에는 중요한 하위 집합만 표시됩니다." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "메서드" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "경로" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "요청 변수" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "상태 코드" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "액션" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "변수" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "호출" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "개수" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "View 정보" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "View 함수" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL 명칭" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "쿠키" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "쿠키 없음" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "세션 데이터" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "세션 데이터 없음" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET 요청 데이터" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "GET 요청 데이터 없음" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST 요청 데이터" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "POST 요청 데이터 없음" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "설정" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "시그널" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "리시버" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s개의 쿼리" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "%(count)s 개의 유사한 쿼리 포함" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "그리고 %(dupes)s개의 중복" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "쿼리" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "타임라인" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s개의 유사한 쿼리" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "%(dupes)s번 중복됩니다." + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "커넥션:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "격리 수준:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "트랜잭션 상태:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(알 수 없음)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "이 요청을 처리하는 동안 기록된 SQL 쿼리가 없습니다." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL 설명" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "실행된 SQL 구문" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "데이터베이스" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL 성능 분석" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "에러" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "선택된 SQL 구문" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "빈 셋" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "정적 파일 경로" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "정적 파일 앱" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "정적 파일" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s개 파일" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "위치" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "템플릿 소스:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "템플릿 경로" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "템플릿" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "컨텍스트 토글" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "컨텍스트 프로세서" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "리소스 사용량" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "리소스" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "브라우저 타이밍" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "타이밍 속성" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "탐색 시작후 밀리초 소요 (+길이)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "패키지" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "이름" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "버전" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "위치:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar는 디버그 보기를 제공하기 위해 위 URL으로 리다이렉션을 가로챘습니다. 위 링크를 클릭하여 정상적으로 리다이렉션을 계속 할수 있습니다." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "이 패널의 데이터는 더이상 사용할 수 없습니다. 페이지를 새로고침한 뒤 다시 시도하십시오." diff --git a/debug_toolbar/locale/nl/LC_MESSAGES/django.mo b/debug_toolbar/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..173e26b10 Binary files /dev/null and b/debug_toolbar/locale/nl/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/nl/LC_MESSAGES/django.po b/debug_toolbar/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 000000000..b7a9bd730 --- /dev/null +++ b/debug_toolbar/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,705 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Ingo Berben , 2012-2013 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Ingo Berben , 2012-2013\n" +"Language-Team: Dutch (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilering" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" + +#: panels/request.py:16 +msgid "Request" +msgstr "" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Instellingen" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d ontvanger van 1 signaal" +msgstr[1] "%(num_receivers)d ontvangers van 1 signaal" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d ontvanger van %(num_signals)d signalen" +msgstr[1] "%(num_receivers)d ontvangers van %(num_signals)d signalen" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Signalen" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializeerbaar" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Actief" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Foutief" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Niet gekend" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Templates" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Templates (%(num_templates)s gerenderd)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Totaal: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Tijd" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Gebruikers CPU tijd" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msec" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Systeem CPU tijd" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msec" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Totaal CPU tijd" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msec" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Verlopen tijd" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msec" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d vrijwillig, %(ivcsw)d niet vrijwillig" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versies" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Verberg toolbar" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Verbergen" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Bekijk toolbar" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Samenvatting" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Tijd (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Type" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Sleutel" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Waarde" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Methode" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Actie" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Parameter" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Oproepen" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTijd" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Aantal" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Bekijk informatie" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET data" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Geen GET data" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST data" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Geen POST data" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Instelling" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signaal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Ontvangers" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Query" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Tijdslijn" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Verbinding:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Transactiestatus:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(niet gekend)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL uitgelegd" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Uitgevoerde SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Database" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Fout" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Lege set" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "None" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Locatie" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Templatepad" +msgstr[1] "Templatepaden" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Template" +msgstr[1] "Templates" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Bron" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "Pakket" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Naam" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versie" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/pl/LC_MESSAGES/django.mo b/debug_toolbar/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 000000000..839619342 Binary files /dev/null and b/debug_toolbar/locale/pl/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/pl/LC_MESSAGES/django.po b/debug_toolbar/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 000000000..337ad376e --- /dev/null +++ b/debug_toolbar/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,735 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Konrad Mosoń , 2013,2015 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Konrad Mosoń , 2013,2015\n" +"Language-Team: Polish (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d wywołanie w %(time).2fms" +msgstr[1] "%(cache_calls)d wywołania w %(time).2fms" +msgstr[2] "%(cache_calls)d wywołań w %(time).2fms" +msgstr[3] "%(cache_calls)d wywołań w %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Wywołań z cache z %(count)d backendu" +msgstr[1] "Wywołań z cache z %(count)d backendów" +msgstr[2] "Wywołań z cache z %(count)d backendów" +msgstr[3] "Wywołań z cache z %(count)d backendów" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Nagłówki" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilowanie" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Przechwycone przekierowania" + +#: panels/request.py:16 +msgid "Request" +msgstr "Zapytania" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Ustawienia" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d orbiorca 1 sygnału" +msgstr[1] "%(num_receivers)d odbiorców 1 sygnału" +msgstr[2] "%(num_receivers)d odbiorców 1 sygnału" +msgstr[3] "%(num_receivers)d odbiorców 1 sygnału" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d odbiora %(num_signals)d sygnału" +msgstr[1] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" +msgstr[2] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" +msgstr[3] "%(num_receivers)d odbiorców %(num_signals)d sygnałów" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Sygnały" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Przeczaj niepopełnione" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Przeczytaj popełnione" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Bezczynny" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Aktywne" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "W transakcji" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "W błędzie" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Nieznane" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Pliki statyczne (znaleziono %(num_found)s, użyto %(num_used)s)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Pliki statyczne" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s użyty plików" +msgstr[1] "%(num_used)s użyte plików" +msgstr[2] "%(num_used)s użytych plików" +msgstr[3] "%(num_used)s użytych plików" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Templatki" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Templatki (%(num_templates)s wyrenderowano)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Całkowity czas: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Czas" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msec" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msec" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msec" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Całkowity czas" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msec" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Przełączenia kontekstu" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Wersje" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Ukryj toolbar" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Ukryj" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Podsumowanie" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Polecenia" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Wywołania" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Czas (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Typ" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Klucz" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Wartość" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Akcja" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Zmienna" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Wywołanie" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Ilość" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Pokaż informacje" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Brak danych GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Brak danych POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Ustawienie" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Sygnał" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Odbiorcy" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s zapytanie" +msgstr[1] "%(num)s zapytania" +msgstr[2] "%(num)s zapytań" +msgstr[3] "%(num)s zapytań" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Zapytanie" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Oś czasu" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Połączenie:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Poziom izolacji:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Status transakcji:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(nieznany)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Żadne zapytania SQL nie zostały odnotowane podczas tego zapytania." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Wykonane zapytanie SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Baza danych" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Błąd" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Pusty zbiór" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Brak" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Lokalizacja" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Ścieżka templatki" +msgstr[1] "Ścieżki templatek" +msgstr[2] "Ścieżki templatek" +msgstr[3] "Ścieżki templatek" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Templatki" +msgstr[1] "Templatki" +msgstr[2] "Templatki" +msgstr[3] "Templatki" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Zasób" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nazwa" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Wersja" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/pt/LC_MESSAGES/django.mo b/debug_toolbar/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 000000000..b08e0d39d Binary files /dev/null and b/debug_toolbar/locale/pt/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/pt/LC_MESSAGES/django.po b/debug_toolbar/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 000000000..b1b0f5b77 --- /dev/null +++ b/debug_toolbar/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,720 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# José Durães , 2014 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: José Durães , 2014\n" +"Language-Team: Portuguese (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Intercetar redirecionamentos" + +#: panels/request.py:16 +msgid "Request" +msgstr "Pedido" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Configurações" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Sinais" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Variável" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Acção" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Erro" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Desconhecido" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Ficheiros estáticos" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Templates" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Templates (%(num_templates)s renderizados)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Total: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Tempo" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versões" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Ocultar barra" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Ocultar" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Mostrar barra" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Desactivar para o seguinte e sucessivos pedidos" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Activar para o próximo e sucessivos pedidos" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Resumo" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Comandos" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Tipo" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Chave" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Valor" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Método" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Acção" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variável" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Sem dados GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "dados POST" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Sem variáveis POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Configurações" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Sinal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Receptores" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Estado da transacção:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(desconhecido)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Nenhuma query SQL foi registada durante este pedido." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "SQL Executado" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Erro" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Set vazio" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefixo %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Nenhum" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Ficheiro estático" +msgstr[1] "Ficheiros estáticos" +msgstr[2] "Ficheiros estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Localização" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "Caminho da Template" +msgstr[2] "Caminho da Template" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "Processador de Contexto" +msgstr[2] "Processador de Contexto" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Recurso" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "Pacote" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nome" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versão" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Localização" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo b/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 000000000..24c3060e6 Binary files /dev/null and b/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po b/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 000000000..2ec8be420 --- /dev/null +++ b/debug_toolbar/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,722 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Fábio C. Barrionuevo da Luz , 2013-2014 +# Gladson , 2017 +# Percy Pérez-Pinedo, 2009 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Gladson , 2017\n" +"Language-Team: Portuguese (Brazil) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d chamada em %(time).2fms" +msgstr[1] "%(cache_calls)d chamadas em %(time).2fms" +msgstr[2] "%(cache_calls)d chamadas em %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Chamadas ao cache de %(count)d backend" +msgstr[1] "Chamadas ao cache de %(count)d backends" +msgstr[2] "Chamadas ao cache de %(count)d backends" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Cabeçalhos" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profiling" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Interceptar redirecionamentos" + +#: panels/request.py:16 +msgid "Request" +msgstr "Requisição" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Configurações" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d receptor de 1 sinal" +msgstr[1] "%(num_receivers)d receptores de 1 sinal" +msgstr[2] "%(num_receivers)d receptores de 1 sinal" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d receptor de %(num_signals)d sinais" +msgstr[1] "%(num_receivers)d receptores de %(num_signals)d sinais" +msgstr[2] "%(num_receivers)d receptores de %(num_signals)d sinais" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Sinais" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Leitura repetida" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Variável" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Ocioso" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Ação" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Na transação" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Erro" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Desconhecido" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Arquivos estáticos (%(num_found)s encontrados, %(num_used)s sendo utilizados)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Arquivos estáticos" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s arquivo utilizado" +msgstr[1] "%(num_used)s arquivos utilizados" +msgstr[2] "%(num_used)s arquivos utilizados" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Templates" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Templates (%(num_templates)s renderizados)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Sem origem" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Total: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Tempo" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Tempo de CPU do usuário" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f ms" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Tempo de CPU do sistema" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f ms" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Tempo total de CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f ms" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Tempo decorrido" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f ms" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Mudanças de contexto" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d voluntário, %(ivcsw)d involuntário" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versões" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Ocultar barra de ferramentas" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Esconder" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Mostrar barra de ferramentas" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Desativar para próximas requisições" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Habilitar para próximas requisições" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Resumo" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Total de chamadas" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Tempo total" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Acessos ao cache" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Falhas de cache" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Comandos" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Chamadas" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Tempo (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Tipo" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argumentos" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Argumentos" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Cabeçalhos de Requisição" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Chave" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Valor" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Cabeçalhos de Resposta" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Ambiente WSGI" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Uma vez que o ambiente WSGI herda o ambiente do servidor, apenas um subconjunto significativo é mostrado abaixo." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Caminho" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Ação" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variável" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Chamar" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "CumTime" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Per" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTime" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Contagem" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Ver informação" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Função View" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Nome da URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Sem Cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Dados de Sessão" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Sem dados de Sessão" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "Dados de GET" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Não há dados de GET" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "Dados de POST" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Não há dados de POST" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Configuração" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Sinais" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Recebedores" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s consulta" +msgstr[1] "%(num)s consultas" +msgstr[2] "%(num)s consultas" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Query" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Linha do tempo" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Conexão:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Nível de isolamento:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Status da transação:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(unknown)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Nenhuma consulta SQL foi registrada durante esta requisição." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL explicada" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "SQL Executada" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Banco de dados" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL perfilado" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Erro" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "SQL selecionada" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Conjunto vazio" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Caminho do arquivo estático" +msgstr[1] "Caminho dos arquivos estáticos" +msgstr[2] "Caminho dos arquivos estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefixo %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Nenhum" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Arquivo estático de app" +msgstr[1] "Arquivos estáticos de apps" +msgstr[2] "Arquivos estáticos de apps" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Arquivo estático" +msgstr[1] "Arquivos estáticos" +msgstr[2] "Arquivos estáticos" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s arquivo" +msgstr[1] "%(payload_count)s arquivos" +msgstr[2] "%(payload_count)s arquivos" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Localização" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Origem do Template:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Caminho do Template" +msgstr[1] "Caminho do Templates" +msgstr[2] "Caminho do Templates" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Template" +msgstr[1] "Templates" +msgstr[2] "Templates" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Alternar contexto" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "Processador do Contexto" +msgstr[2] "Processador do Contexto" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Uso de recursos" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Recurso" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Cronometragem do Navegador" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Atributo de Cronometragem" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Milissegundos desde início de navegação (+length)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "Pacote" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Nome" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Versão" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Localização:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "O Django Debug Toolbar interceptou um redirecionamento para a URL acima para fins de visualização de depuração. Você pode clicar no link acima para continuar com o redirecionamento normalmente." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Os dados para este painel não está mais disponível. Por favor, recarregue a página e tente novamente." diff --git a/debug_toolbar/locale/ru/LC_MESSAGES/django.mo b/debug_toolbar/locale/ru/LC_MESSAGES/django.mo index e9b0f1bd9..b388ed98d 100644 Binary files a/debug_toolbar/locale/ru/LC_MESSAGES/django.mo and b/debug_toolbar/locale/ru/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/ru/LC_MESSAGES/django.po b/debug_toolbar/locale/ru/LC_MESSAGES/django.po index a0a199631..28cc6b947 100644 --- a/debug_toolbar/locale/ru/LC_MESSAGES/django.po +++ b/debug_toolbar/locale/ru/LC_MESSAGES/django.po @@ -1,319 +1,581 @@ -# Django Debug Toolbar in Russian. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# Mikhail Korobov, 2009. # # +# Translators: +# Andrei Satsevich, 2025 +# Dmitri Bogomolov <4glitch@gmail.com>, 2014 +# Ilya Baryshev , 2013 +# Mikhail Korobov, 2009 +# Алексей Борискин , 2013,2015,2024 msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: Django Debug Toolbar\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-18 08:06-0800\n" -"PO-Revision-Date: \n" -"Last-Translator: Mikhail Korobov \n" -"Language-Team: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Andrei Satsevich, 2025\n" +"Language-Team: Russian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: panels/cache.py:92 -#, python-format -msgid "Cache: %.2fms" -msgstr "" +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Панель отладки" -#: panels/cache.py:95 -msgid "Cache Usage" -msgstr "" +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "Форма с идентификатором \"{form_id}\" содержит файл, но не имеет атрибута enctype=\"multipart/form-data\"." -#: panels/headers.py:36 panels/headers.py:39 -msgid "HTTP Headers" -msgstr "Заголовки HTTP" +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "Форма содержит файл, но не имеет атрибута enctype=\"multipart/form-data\"." -#: panels/logger.py:56 -msgid "Logging" -msgstr "Журналирование" +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "Элемент ввода ссылается на форму с id \"{form_id}\", но форма не имеет атрибута enctype=\"multipart/form-data\"." -#: panels/logger.py:63 -#, fuzzy -msgid "Log Messages" -msgstr "Сообщение" +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "Оповещения" -#: panels/request_vars.py:13 panels/request_vars.py:16 -msgid "Request Vars" +#: panels/cache.py:168 +msgid "Cache" +msgstr "Кэш" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d обращение за %(time).2fms" +msgstr[1] "%(cache_calls)d обращения за %(time).2fms" +msgstr[2] "%(cache_calls)d обращений за %(time).2fms" +msgstr[3] "%(cache_calls)d обращений за %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Обращения к кэшу от %(count)d бэкенда" +msgstr[1] "Обращения к кэшу от %(count)d бэкендов" +msgstr[2] "Обращения к кэшу от %(count)d бэкендов" +msgstr[3] "Обращения к кэшу от %(count)d бэкендов" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Заголовки" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "История" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Профилирование" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Перехват редиректов" + +#: panels/request.py:16 +msgid "Request" msgstr "Запрос" -#: panels/settings_vars.py:16 +#: panels/request.py:38 +msgid "" +msgstr "<нет view>" + +#: panels/request.py:55 +msgid "" +msgstr "<недоступно>" + +#: panels/settings.py:17 msgid "Settings" msgstr "Настройки" -#: panels/settings_vars.py:19 +#: panels/settings.py:20 #, python-format -msgid "Settings from %s" -msgstr "" +msgid "Settings from %s" +msgstr "Настройки из %s" -#: panels/signals.py:39 panels/signals.py:42 +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d получатель 1 сигнала" +msgstr[1] "%(num_receivers)d получателя 1 сигнала" +msgstr[2] "%(num_receivers)d получателей 1 сигнала" +msgstr[3] "%(num_receivers)d получателей 1 сигнала" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d получатель %(num_signals)d сигнала(ов)" +msgstr[1] "%(num_receivers)d получателя %(num_signals)d сигнала(ов)" +msgstr[2] "%(num_receivers)d получателей %(num_signals)d сигнала(ов)" +msgstr[3] "%(num_receivers)d получателей %(num_signals)d сигнала(ов)" + +#: panels/signals.py:67 msgid "Signals" msgstr "Сигналы" -#: panels/sql.py:146 +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Repeatable read" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Serializable" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Ожидание" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Действие" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "В транзакции" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Ошибка" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "Неизвестно" + +#: panels/sql/panel.py:162 msgid "SQL" -msgstr "" +msgstr "SQL" -#: panels/sql.py:160 -msgid "SQL Queries" -msgstr "" +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "%(query_count)d запрос за %(sql_time).2f мс " +msgstr[1] "%(query_count)d запросов за %(sql_time).2f мс" +msgstr[2] "%(query_count)d запросов за %(sql_time).2f мс" +msgstr[3] "%(query_count)d запросов за %(sql_time).2f мс" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "SQL-запросы из %(count)d соединения" +msgstr[1] "SQL-запросы из %(count)d соединений" +msgstr[2] "SQL-запросы из %(count)d соединений" +msgstr[3] "SQL-запросы из %(count)d соединений" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Статические файлы (найдено %(num_found)s, используется %(num_used)s)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Статические файлы" -#: panels/template.py:47 +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s файл используется" +msgstr[1] " %(num_used)s файла используется" +msgstr[2] "%(num_used)s файлов используется" +msgstr[3] "%(num_used)s файлов используется" + +#: panels/templates/panel.py:101 msgid "Templates" msgstr "Шаблоны" -#: panels/template.py:52 +#: panels/templates/panel.py:106 #, python-format msgid "Templates (%(num_templates)s rendered)" -msgstr "" +msgstr "Шаблоны (обработано %(num_templates)s)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Без происхождения" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" -#: panels/timer.py:35 templates/debug_toolbar/panels/cache.html:39 -#: templates/debug_toolbar/panels/logger.html:7 -#: templates/debug_toolbar/panels/sql.html:5 +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Итого: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 #: templates/debug_toolbar/panels/sql_explain.html:11 #: templates/debug_toolbar/panels/sql_profile.html:12 #: templates/debug_toolbar/panels/sql_select.html:11 msgid "Time" msgstr "Время" -#: panels/timer.py:47 -#, fuzzy -msgid "Resource Usage" -msgstr "Ресурс" - -#: panels/timer.py:78 +#: panels/timer.py:46 msgid "User CPU time" -msgstr "" +msgstr "User CPU time" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f мс" -#: panels/timer.py:79 +#: panels/timer.py:47 msgid "System CPU time" -msgstr "" +msgstr "System CPU time" -#: panels/timer.py:80 -#, fuzzy +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f мс" + +#: panels/timer.py:48 msgid "Total CPU time" -msgstr "Общее время" +msgstr "Total CPU time" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f мс" -#: panels/timer.py:81 +#: panels/timer.py:49 msgid "Elapsed time" -msgstr "" +msgstr "Затраченное время" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f мс" -#: panels/timer.py:82 +#: panels/timer.py:51 msgid "Context switches" -msgstr "" +msgstr "Переключений контекста" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d намеренных, %(ivcsw)d вынужденных" -#: panels/version.py:20 panels/version.py:29 -#, fuzzy +#: panels/versions.py:19 msgid "Versions" -msgstr "Версия Django" +msgstr "Версии" #: templates/debug_toolbar/base.html:23 -msgid "Hide Toolbar" -msgstr "" +msgid "Hide toolbar" +msgstr "Скрыть панель" #: templates/debug_toolbar/base.html:23 msgid "Hide" msgstr "Скрыть" -#: templates/debug_toolbar/base.html:48 -msgid "Show Toolbar" -msgstr "" +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "Переключатель темы" -#: templates/debug_toolbar/base.html:54 -msgid "Close" -msgstr "Закрыть" +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Показать панель" -#: templates/debug_toolbar/redirect.html:7 -#: templates/debug_toolbar/panels/logger.html:9 -msgid "Location" -msgstr "Место" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Отключить для последующих запросов" -#: templates/debug_toolbar/redirect.html:9 -msgid "" -"The Django Debug Toolbar has intercepted a redirect to the above URL for " -"debug viewing purposes. You can click the above link to continue with the " -"redirect as normal. If you'd like to disable this feature, set the " -"DEBUG_TOOLBAR_CONFIG dictionary's key " -"INTERCEPT_REDIRECTS to False." -msgstr "" -"Django Debug Toolbar в отладочных целях перехватила редирект на адрес, " -"указанный выше. Вы можете нажать на ссылку, чтобы продолжить обычное " -"выполнение. Если хотите отключить это поведение, установите в словаре " -"DEBUG_TOOLBAR_CONFIG ключ INTERCEPT_REDIRECTS " -"равным False." - -#: templates/debug_toolbar/panels/cache.html:14 -msgid "Total Calls" +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Включить для последующих запросов" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "Найдены оповещения" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "Оповещения не найдены" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Сводка" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" msgstr "Всего вызовов" -#: templates/debug_toolbar/panels/cache.html:16 -msgid "Total Time" +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" msgstr "Общее время" -#: templates/debug_toolbar/panels/cache.html:18 -msgid "Hits" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Cache хитов" -#: templates/debug_toolbar/panels/cache.html:20 -msgid "Misses" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Промахи кэша" -#: templates/debug_toolbar/panels/cache.html:35 -msgid "Breakdown" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Команды" -#: templates/debug_toolbar/panels/cache.html:40 +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Вызовы" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Время (мс)" + +#: templates/debug_toolbar/panels/cache.html:44 msgid "Type" -msgstr "" +msgstr "Тип" -#: templates/debug_toolbar/panels/cache.html:41 -msgid "Parameters" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Аргументы" -#: templates/debug_toolbar/panels/cache.html:42 -msgid "Function" -msgstr "" +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Именованные аргументы" -#: templates/debug_toolbar/panels/headers.html:5 +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Бэкенд" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Заголовки запроса" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 msgid "Key" msgstr "Заголовок" -#: templates/debug_toolbar/panels/headers.html:6 -#: templates/debug_toolbar/panels/request_vars.html:37 -#: templates/debug_toolbar/panels/request_vars.html:63 -#: templates/debug_toolbar/panels/request_vars.html:85 -#: templates/debug_toolbar/panels/request_vars.html:107 -#: templates/debug_toolbar/panels/settings_vars.html:6 -#: templates/debug_toolbar/panels/timer.html:10 +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 msgid "Value" msgstr "Значение" -#: templates/debug_toolbar/panels/logger.html:6 -msgid "Level" -msgstr "Уровень" +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Заголовки ответа" -#: templates/debug_toolbar/panels/logger.html:8 -msgid "Message" -msgstr "Сообщение" +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI-окружение" -#: templates/debug_toolbar/panels/logger.html:24 -msgid "No messages logged" -msgstr "Сообщений нет" +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Так как WSGI-окружение наследует окружение сервера, ниже отображены лишь те из переменных, которые важны для нужд отладки." -#: templates/debug_toolbar/panels/request_vars.html:3 -msgid "View information" -msgstr "" +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "Метод" -#: templates/debug_toolbar/panels/request_vars.html:7 -msgid "View Function" -msgstr "" +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Путь" -#: templates/debug_toolbar/panels/request_vars.html:8 -msgid "args" -msgstr "" +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "Запрос переменных" -#: templates/debug_toolbar/panels/request_vars.html:9 -msgid "kwargs" -msgstr "" +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "Статус" -#: templates/debug_toolbar/panels/request_vars.html:27 -#, fuzzy -msgid "COOKIES Variables" -msgstr "Переменная" +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Действие" -#: templates/debug_toolbar/panels/request_vars.html:36 -#: templates/debug_toolbar/panels/request_vars.html:62 -#: templates/debug_toolbar/panels/request_vars.html:84 -#: templates/debug_toolbar/panels/request_vars.html:106 +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 msgid "Variable" msgstr "Переменная" -#: templates/debug_toolbar/panels/request_vars.html:50 -msgid "No COOKIE data" -msgstr "" +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Вызов" -#: templates/debug_toolbar/panels/request_vars.html:53 -#, fuzzy -msgid "SESSION Variables" -msgstr "Переменная" +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "КумулВрем" -#: templates/debug_toolbar/panels/request_vars.html:76 -msgid "No SESSION data" -msgstr "" +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "ЗаВызов" -#: templates/debug_toolbar/panels/request_vars.html:79 -#, fuzzy -msgid "GET Variables" -msgstr "Переменная" +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "ИтогВремя" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Кол-во" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "View" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "View функция" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL Name" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Нет cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Сессия" -#: templates/debug_toolbar/panels/request_vars.html:98 +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Нет данных в сессии" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET" + +#: templates/debug_toolbar/panels/request.html:41 msgid "No GET data" -msgstr "" +msgstr "Нет GET данных" -#: templates/debug_toolbar/panels/request_vars.html:101 -#, fuzzy -msgid "POST Variables" -msgstr "Переменная" +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST" -#: templates/debug_toolbar/panels/request_vars.html:120 +#: templates/debug_toolbar/panels/request.html:48 msgid "No POST data" -msgstr "" +msgstr "Нет POST данных" -#: templates/debug_toolbar/panels/settings_vars.html:5 +#: templates/debug_toolbar/panels/settings.html:5 msgid "Setting" msgstr "Параметр" #: templates/debug_toolbar/panels/signals.html:5 msgid "Signal" -msgstr "Сигналы" +msgstr "Сигнал" #: templates/debug_toolbar/panels/signals.html:6 -msgid "Providing Args" -msgstr "" - -#: templates/debug_toolbar/panels/signals.html:7 msgid "Receivers" -msgstr "" +msgstr "Получатели сигнала" #: templates/debug_toolbar/panels/sql.html:6 -msgid "Action" -msgstr "Действие" - -#: templates/debug_toolbar/panels/sql.html:7 -msgid "Stacktrace" -msgstr "" +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s запрос" +msgstr[1] "%(num)s запроса" +msgstr[2] "%(num)s запросов" +msgstr[3] "%(num)s запросов" #: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "включая %(count)s похожий" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "и %(dupes)s дубликаты" + +#: templates/debug_toolbar/panels/sql.html:34 msgid "Query" msgstr "Запрос" -#: templates/debug_toolbar/panels/sql.html:38 -msgid "Line" -msgstr "Строка" +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Временная диаграмма" -#: templates/debug_toolbar/panels/sql.html:39 -msgid "Method" -msgstr "Метод" +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "%(count)s похожих запросов." + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "Дублируется %(dupes)s раз." + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Соединение:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Уровень изоляции:" -#: templates/debug_toolbar/panels/sql.html:40 -msgid "File" -msgstr "Файл" +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Статус транзакции:" -#: templates/debug_toolbar/panels/sql_explain.html:3 -#: templates/debug_toolbar/panels/sql_profile.html:3 -#: templates/debug_toolbar/panels/sql_select.html:3 -#: templates/debug_toolbar/panels/template_source.html:3 -msgid "Back" -msgstr "Назад" +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(неизвестно)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Во время обработки этого HTTP-запроса не было записано ни одного SQL-запроса." #: templates/debug_toolbar/panels/sql_explain.html:4 -msgid "SQL Explained" -msgstr "" +msgid "SQL explained" +msgstr "SQL Explain" #: templates/debug_toolbar/panels/sql_explain.html:9 #: templates/debug_toolbar/panels/sql_profile.html:10 @@ -321,59 +583,157 @@ msgstr "" msgid "Executed SQL" msgstr "Запрос" +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "База данных" + #: templates/debug_toolbar/panels/sql_profile.html:4 -msgid "SQL Profiled" -msgstr "" +msgid "SQL profiled" +msgstr "Профилирование SQL" -#: templates/debug_toolbar/panels/sql_profile.html:35 +#: templates/debug_toolbar/panels/sql_profile.html:37 msgid "Error" msgstr "Ошибка" #: templates/debug_toolbar/panels/sql_select.html:4 -msgid "SQL Selected" -msgstr "" +msgid "SQL selected" +msgstr "Выбранные SQL-запросы" -#: templates/debug_toolbar/panels/sql_select.html:34 +#: templates/debug_toolbar/panels/sql_select.html:36 msgid "Empty set" -msgstr "Ничего" +msgstr "Ничего, ноль строк" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Путь к статическим файлам" +msgstr[1] "Пути к статическим файлам" +msgstr[2] "Пути к статическим файлам" +msgstr[3] "Пути к статическим файлам" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(префикс %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Нет" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Приложение, использующее статические файлы" +msgstr[1] "Приложения, использующие статические файлы" +msgstr[2] "Приложения, использующие статические файлы" +msgstr[3] "Приложения, использующие статические файлы" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Статический файл" +msgstr[1] "Статические файлы" +msgstr[2] "Статические файлы" +msgstr[3] "Статические файлы" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s файл" +msgstr[1] "%(payload_count)s файла" +msgstr[2] "%(payload_count)s файлов" +msgstr[3] "%(payload_count)s файлов" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Место" #: templates/debug_toolbar/panels/template_source.html:4 -#, fuzzy -msgid "Template Source" -msgstr "Шаблоны" +msgid "Template source:" +msgstr "Источник шаблона:" #: templates/debug_toolbar/panels/templates.html:2 -#, fuzzy msgid "Template path" -msgstr "Шаблоны" +msgid_plural "Template paths" +msgstr[0] "Путь к шаблонам" +msgstr[1] "Пути к шаблонам" +msgstr[2] "Пути к шаблонам" +msgstr[3] "Пути к шаблонам" #: templates/debug_toolbar/panels/templates.html:13 msgid "Template" -msgstr "" - -#: templates/debug_toolbar/panels/templates.html:21 -#: templates/debug_toolbar/panels/templates.html:37 -msgid "Toggle Context" -msgstr "" - -#: templates/debug_toolbar/panels/templates.html:28 -#: templates/debug_toolbar/panels/templates.html:43 -msgid "None" -msgstr "" - -#: templates/debug_toolbar/panels/templates.html:31 +msgid_plural "Templates" +msgstr[0] "Шаблон" +msgstr[1] "Шаблоны" +msgstr[2] "Шаблоны" +msgstr[3] "Шаблоны" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Контекст" + +#: templates/debug_toolbar/panels/templates.html:33 msgid "Context processor" -msgstr "" +msgid_plural "Context processors" +msgstr[0] "Контекст процессор" +msgstr[1] "Контекст процессоры" +msgstr[2] "Контекст процессоры" +msgstr[3] "Контекст процессоры" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Потребление ресурсов" -#: templates/debug_toolbar/panels/timer.html:9 +#: templates/debug_toolbar/panels/timer.html:10 msgid "Resource" msgstr "Ресурс" -#: templates/debug_toolbar/panels/versions.html:6 +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Браузерное время" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Событие" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "С начала навигации в мс (+продолжительность)" + +#: templates/debug_toolbar/panels/versions.html:10 msgid "Package" -msgstr "" +msgstr "Пакет" -#: templates/debug_toolbar/panels/versions.html:7 -#, fuzzy +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Название" + +#: templates/debug_toolbar/panels/versions.html:12 msgid "Version" -msgstr "Версия Django" +msgstr "Версия" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Адрес:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar в перехватил редирект на адрес, указанный выше. Вы можете нажать на ссылку, чтобы выполнить переход самостоятельно." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Данные этой панели больше недоступны. Пожалуйста, перезагрузите страницу и попробуйте ещё раз." diff --git a/debug_toolbar/locale/sk/LC_MESSAGES/django.mo b/debug_toolbar/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..52934bf7a Binary files /dev/null and b/debug_toolbar/locale/sk/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/sk/LC_MESSAGES/django.po b/debug_toolbar/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 000000000..d5c5b722b --- /dev/null +++ b/debug_toolbar/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,737 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# 18f25ad6fa9930fc67cb11aca9d16a27, 2012 +# 18f25ad6fa9930fc67cb11aca9d16a27, 2013 +# Rastislav Kober , 2012 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: 18f25ad6fa9930fc67cb11aca9d16a27, 2013\n" +"Language-Team: Slovak (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d volanie za %(time).2fms" +msgstr[1] "%(cache_calls)d volaní za %(time).2fms" +msgstr[2] "%(cache_calls)d volaní za %(time).2fms" +msgstr[3] "%(cache_calls)d volaní za %(time).2fms" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Cache volania z %(count)d backendu" +msgstr[1] "Cache volania z %(count)d backendov" +msgstr[2] "Cache volania z %(count)d backendov" +msgstr[3] "Cache volania z %(count)d backendov" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Hlavičky" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Analýza" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Zachytiť presmerovania" + +#: panels/request.py:16 +msgid "Request" +msgstr "Požiadavka" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Nastavenia" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d príjemca 1 signálu" +msgstr[1] "%(num_receivers)d príjemcov 1 signálu" +msgstr[2] "%(num_receivers)d príjemcov 1 signálu" +msgstr[3] "%(num_receivers)d príjemcov 1 signálu" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d príjemca %(num_signals)d signálov" +msgstr[1] "%(num_receivers)d príjemcov %(num_signals)d signálov" +msgstr[2] "%(num_receivers)d príjemcov %(num_signals)d signálov" +msgstr[3] "%(num_receivers)d príjemcov %(num_signals)d signálov" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Signály" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "Read uncommitted" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "Read committed" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "Opakovateľné čítanie" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Premenná" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Autocommit" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "Nečinný" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Akcia" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "Stav transakcie:" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Chyba" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "(neznámy)" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Statické súbory (%(num_found)s nájdených, %(num_used)s použitých)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Statické súbory" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s použitý súbor" +msgstr[1] "%(num_used)s použitých súborov" +msgstr[2] "%(num_used)s použitých súborov" +msgstr[3] "%(num_used)s použitých súborov" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Šablóny" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Šablóny (%(num_templates)s spracovaných)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2fms (%(total)0.2fms)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Celkovo: %0.2fms" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Čas" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Užívateľský čas CPU" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f msek" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Systémový čas CPU" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f msek" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Celkový čas CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f msek" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Uplynutý čas" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f msek" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Prepnutí kontextu" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d dobrovoľných, %(ivcsw)d nedobrovoľných" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Verzie" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Skryť panel nástrojov" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Skryť" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Zobraziť panel nástrojov" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Zakázať pre ďalšie a nasledujúce požiadavky" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Povoliť pre ďalšie a nasledujúce požiadavky" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Zhrnutie" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Celkovo volaní" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Celkový čas" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Volaní cache" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Vynechania cache" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Príkazy" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Volania" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Čas (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Typ" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Argumenty" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Kľúčové argumenty" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Backend" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Hlavičky požiadavky" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Kľúč" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Hodnota" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Hlavičky odpovede" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI prostredie" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Keďže WSGI prostredie dedí z prostredia servera, je nižšie zobrazená iba významná podmnožina." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Cesta" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Akcia" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Premenná" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Volanie" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "CumTime" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "Za" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "TotTime" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Počet" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Zobraziť informácie" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "View funkcia" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL meno" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Žiadne cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Dáta relácie" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Žiadne dáta relácie" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET dáta" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Žiadne GET dáta" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST dáta" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Žiadne POST dáta" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Nastavenie" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signál" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Príjemcovia" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s dopyt" +msgstr[1] "%(num)s dopytov" +msgstr[2] "%(num)s dopytov" +msgstr[3] "%(num)s dopytov" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Dopyt" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Časová os" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Pripojenie:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Úroveň izolácie:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Stav transakcie:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(neznámy)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "V priebehu tejto požiadavky neboli zaznamenané žiadne SQL dopyty." + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL vysvetlené" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Vykonané SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Databáza" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL profilované" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Chyba" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "SQL označené" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Prázdny rad" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Cesta k statickému súboru" +msgstr[1] "Cesty k statickým súborom" +msgstr[2] "Cesty k statickým súborom" +msgstr[3] "Cesty k statickým súborom" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(prefix %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Žiadny" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Aplikácia pre statické súbory" +msgstr[1] "Aplikácie pre statické súbory" +msgstr[2] "Aplikácie pre statické súbory" +msgstr[3] "Aplikácie pre statické súbory" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "Statické súbory" +msgstr[3] "Statické súbory" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s súbor" +msgstr[1] "%(payload_count)s súborov" +msgstr[2] "%(payload_count)s súborov" +msgstr[3] "%(payload_count)s súborov" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Poloha" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Zdrojový kód šablóny:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Cesta k šablóne" +msgstr[1] "Cesta k šablóne" +msgstr[2] "Cesta k šablóne" +msgstr[3] "Cesta k šablóne" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Šablóna" +msgstr[1] "Šablóna" +msgstr[2] "Šablóna" +msgstr[3] "Šablóna" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Prepnúť kontext" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Spracovateľ kontextu" +msgstr[1] "Spracovateľ kontextu" +msgstr[2] "Spracovateľ kontextu" +msgstr[3] "Spracovateľ kontextu" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Využitie prostriedkov" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Prostriedok" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Čas prehliadača" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Časový atribút" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Milisekúnd od spustenia navigácie (+dĺžka)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Meno" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Verzia" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Poloha:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar zachytil presmerovanie na vyššie uvedenú URL pre účely ladenia. Pre normálne presmerovanie môžete kliknúť na vyššie uvedený odkaz." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Dáta pre tento panel už nie sú k dispozícii. Načítajte si prosím stránku a skúste to znova." diff --git a/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo b/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo new file mode 100644 index 000000000..849592ff0 Binary files /dev/null and b/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po b/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po new file mode 100644 index 000000000..5848929d1 --- /dev/null +++ b/debug_toolbar/locale/sv_SE/LC_MESSAGES/django.po @@ -0,0 +1,706 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Alex Nordlund , 2012-2013 +# Alex Nordlund , 2012 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Alex Nordlund , 2012-2013\n" +"Language-Team: Swedish (Sweden) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/sv_SE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv_SE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Cache" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "" +msgstr[1] "" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Profilering" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "" + +#: panels/request.py:16 +msgid "Request" +msgstr "" + +#: panels/request.py:38 +msgid "" +msgstr "" + +#: panels/request.py:55 +msgid "" +msgstr "" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Inställningar" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "" +msgstr[1] "" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Signaler" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "Variabel" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "Åtgärd" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "Felmeddelande" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "(okänd)" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Statiska filer" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "" +msgstr[1] "" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Mallar" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Tid" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Versioner" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Dölj" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Sammanfattning" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Tid (ms)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Nyckel" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Värde" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Sökväg" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Åtgärd" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Variabel" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Räkna" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Visa informationen" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Ingen GET data" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Ingen POST data" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Inställning" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Signal" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Mottagare" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Fråga" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Anslutning:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(okänd)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Utförd SQL" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "Databas" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Felmeddelande" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Tomt set" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Inget" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "" +msgstr[1] "Statiska filer" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Plats" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Mall" +msgstr[1] "Mallar" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "" +msgstr[1] "" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Resurs" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Namn" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Version" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "" diff --git a/debug_toolbar/locale/uk/LC_MESSAGES/django.mo b/debug_toolbar/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 000000000..0c00501e3 Binary files /dev/null and b/debug_toolbar/locale/uk/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/uk/LC_MESSAGES/django.po b/debug_toolbar/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 000000000..4d752a52d --- /dev/null +++ b/debug_toolbar/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,736 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# Illia Volochii , 2017 +# Sergey Lysach , 2013 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: Illia Volochii , 2017\n" +"Language-Team: Ukrainian (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Панель Інструментів Налагодження" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "Кеш" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(cache_calls)d виклик за %(time).2f мс" +msgstr[1] "%(cache_calls)d виклики за %(time).2f мс" +msgstr[2] "%(cache_calls)d викликів за %(time).2f мс" +msgstr[3] "%(cache_calls)d викликів за %(time).2f мс" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "Виклики кешу з %(count)d бекенду" +msgstr[1] "Виклики кешу із %(count)d бекендів" +msgstr[2] "Виклики кешу із %(count)d бекендів" +msgstr[3] "Виклики кешу із %(count)d бекендів" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "Заголовки" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "Профілювання" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "Переривати запити" + +#: panels/request.py:16 +msgid "Request" +msgstr "Запит" + +#: panels/request.py:38 +msgid "" +msgstr "<немає відображення>" + +#: panels/request.py:55 +msgid "" +msgstr "<відсутнє>" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "Налаштування" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "%(num_receivers)d отримувач 1 сигналу" +msgstr[1] "%(num_receivers)d отримувача 1 сигналу" +msgstr[2] "%(num_receivers)d отримувачів 1 сигналу" +msgstr[3] "%(num_receivers)d отримувачів 1 сигналу" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_receivers)d отримувач %(num_signals)d сигналів" +msgstr[1] "%(num_receivers)d отримувача %(num_signals)d сигналів" +msgstr[2] "%(num_receivers)d отримувачів %(num_signals)d сигналів" +msgstr[3] "%(num_receivers)d отримувачів %(num_signals)d сигналів" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "Сигнали" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "Автофіксація" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "Статичні файли (знайдено %(num_found)s, використано %(num_used)s)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "Статичні файли" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "Використано %(num_used)s файл" +msgstr[1] "Використано %(num_used)s файли" +msgstr[2] "Використано %(num_used)s файлів" +msgstr[3] "Використано %(num_used)s файлів" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "Шаблони" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "Шаблони (оброблено %(num_templates)s)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "Немає походження" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2f мс (%(total)0.2f мс)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "Загалом: %0.2f мс" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "Час" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "Користувацький час CPU" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f мс" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "Системний час CPU" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f мс" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "Загальний час CPU" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f мс" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "Витрачений час" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f мс" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "Перемикачів контексту" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "навмисних - %(vcsw)d, мимовільних - %(ivcsw)d" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "Версії" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "Сховати панель інструментів" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "Сховати" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "Показати панель інструментів" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "Відключити для наступного і подальших запитів" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "Включити для наступного і подальших запитів" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "Резюме" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "Загальна кількість викликів" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "Загальний час" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "Кеш-попадання" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "Кеш-промахи" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "Команди" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "Виклики" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "Час (мс)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "Тип" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "Аргументи" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "Іменовані аргументи" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "Бекенд" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "Заголовки запиту" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "Ключ" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "Значення" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "Заголовки відповіді" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "Середовище WSGI" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "Оскільки середовище WSGI успадковує середовище сервера, тут показано лише найважливішу частину." + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "Шлях" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "Подія" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "Змінна" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "Виклик" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "Кумул. час" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "За виклик" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "Заг. час" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "Кількість" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "Інформація про відображення" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "Функція відображення" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "Імʼя URL" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Куки" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "Немає куків" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Дані сесії" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "Немає даних сесії" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET дані" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "Немає GET даних" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST дані" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "Немає POST даних" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "Налаштування" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "Сигнал" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "Отримувачі сигнала" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s запит" +msgstr[1] "%(num)s запити" +msgstr[2] "%(num)s запитів" +msgstr[3] "%(num)s запитів" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "Запит" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "Лінія часу" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "Підключення:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "Рівень ізоляції:" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "Статус транзакції:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "Жодного SQL запиту не було записано протягом цього запиту" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "Виконаний SQL запит" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "База даних" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "Помилка" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "Порожня множина" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "Шлях до статичних файлів" +msgstr[1] "Шляхи до статичних файлів" +msgstr[2] "Шляхи до статичних файлів" +msgstr[3] "Шляхи до статичних файлів" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(префікс %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "Немає" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "Застосунок, який використовує статичні файли" +msgstr[1] "Застосунки, які використовують статичні файли" +msgstr[2] "Застосунки, які використовують статичні файли" +msgstr[3] "Застосунки, які використовують статичні файли" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "Статичний файл" +msgstr[1] "Статичні файли" +msgstr[2] "Статичні файли" +msgstr[3] "Статичні файли" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s файл" +msgstr[1] "%(payload_count)s файли" +msgstr[2] "%(payload_count)s файлів" +msgstr[3] "%(payload_count)s файлів" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "Місце" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "Джерело шаблону:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "Шлях до шаблонів" +msgstr[1] "Шляхи до шаблонів" +msgstr[2] "Шляхи до шаблонів" +msgstr[3] "Шляхи до шаблонів" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "Шаблон" +msgstr[1] "Шаблони" +msgstr[2] "Шаблонів" +msgstr[3] "Шаблонів" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "Контекст" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Процесор контексту" +msgstr[1] "Процесори контексту" +msgstr[2] "Процесори контексту" +msgstr[3] "Процесори контексту" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "Використання ресурсів" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "Ресурс" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "Хронометраж браузера" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "Атрибут хронометражу" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "Мілісекунд від початку навігації (+тривалість)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "Імʼя" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "Версія" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "Місцезнаходження:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Панель Інструментів Налагодження Django перервала перенаправлення до вищевказаного URL задля налагодження перегляду. Ви можете натиснути на посилання вище, щоб продовжити перенаправлення у звичайному режимі." + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "Дані для цієї панелі більше недоступні. Будь ласка, перезавантажте сторінку і спробуйте знову." diff --git a/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo b/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo new file mode 100644 index 000000000..d0ba24256 Binary files /dev/null and b/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po b/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po new file mode 100644 index 000000000..81e5651d0 --- /dev/null +++ b/debug_toolbar/locale/zh_CN/LC_MESSAGES/django.po @@ -0,0 +1,690 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Translators: +# mozillazg , 2013-2014 +msgid "" +msgstr "" +"Project-Id-Version: Django Debug Toolbar\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-06 07:12-0500\n" +"PO-Revision-Date: 2010-11-30 00:00+0000\n" +"Last-Translator: mozillazg , 2013-2014\n" +"Language-Team: Chinese (China) (http://app.transifex.com/django-debug-toolbar/django-debug-toolbar/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: apps.py:18 +msgid "Debug Toolbar" +msgstr "Debug Toolbar" + +#: panels/alerts.py:67 +#, python-brace-format +msgid "" +"Form with id \"{form_id}\" contains file input, but does not have the " +"attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:70 +msgid "" +"Form contains file input, but does not have the attribute " +"enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:73 +#, python-brace-format +msgid "" +"Input element references form with id \"{form_id}\", but the form does not " +"have the attribute enctype=\"multipart/form-data\"." +msgstr "" + +#: panels/alerts.py:77 +msgid "Alerts" +msgstr "" + +#: panels/cache.py:168 +msgid "Cache" +msgstr "缓存" + +#: panels/cache.py:174 +#, python-format +msgid "%(cache_calls)d call in %(time).2fms" +msgid_plural "%(cache_calls)d calls in %(time).2fms" +msgstr[0] "%(time).2f 毫秒内 %(cache_calls)d 次调用" + +#: panels/cache.py:183 +#, python-format +msgid "Cache calls from %(count)d backend" +msgid_plural "Cache calls from %(count)d backends" +msgstr[0] "来自 %(count)d 个后端的缓存调用" + +#: panels/headers.py:31 +msgid "Headers" +msgstr "HTTP 头" + +#: panels/history/panel.py:19 panels/history/panel.py:20 +msgid "History" +msgstr "" + +#: panels/profiling.py:140 +msgid "Profiling" +msgstr "性能分析" + +#: panels/redirects.py:17 +msgid "Intercept redirects" +msgstr "拦截重定向" + +#: panels/request.py:16 +msgid "Request" +msgstr "请求" + +#: panels/request.py:38 +msgid "" +msgstr "<没有 view>" + +#: panels/request.py:55 +msgid "" +msgstr "<不可用>" + +#: panels/settings.py:17 +msgid "Settings" +msgstr "设置" + +#: panels/settings.py:20 +#, python-format +msgid "Settings from %s" +msgstr "" + +#: panels/signals.py:57 +#, python-format +msgid "%(num_receivers)d receiver of 1 signal" +msgid_plural "%(num_receivers)d receivers of 1 signal" +msgstr[0] "1个信号 %(num_receivers)d 个接收者" + +#: panels/signals.py:62 +#, python-format +msgid "%(num_receivers)d receiver of %(num_signals)d signals" +msgid_plural "%(num_receivers)d receivers of %(num_signals)d signals" +msgstr[0] "%(num_signals)d 个信号 %(num_receivers)d 个接收者" + +#: panels/signals.py:67 +msgid "Signals" +msgstr "信号" + +#: panels/sql/panel.py:30 panels/sql/panel.py:41 +msgid "Read uncommitted" +msgstr "读取未提交的" + +#: panels/sql/panel.py:31 panels/sql/panel.py:43 +msgid "Read committed" +msgstr "读取已提交的" + +#: panels/sql/panel.py:32 panels/sql/panel.py:45 +msgid "Repeatable read" +msgstr "可重复读取" + +#: panels/sql/panel.py:33 panels/sql/panel.py:47 +msgid "Serializable" +msgstr "可序列化" + +#: panels/sql/panel.py:39 +msgid "Autocommit" +msgstr "自动提交" + +#: panels/sql/panel.py:61 panels/sql/panel.py:71 +msgid "Idle" +msgstr "空闲" + +#: panels/sql/panel.py:62 panels/sql/panel.py:72 +msgid "Active" +msgstr "活跃" + +#: panels/sql/panel.py:63 panels/sql/panel.py:73 +msgid "In transaction" +msgstr "事务" + +#: panels/sql/panel.py:64 panels/sql/panel.py:74 +msgid "In error" +msgstr "错误" + +#: panels/sql/panel.py:65 panels/sql/panel.py:75 +msgid "Unknown" +msgstr "未知" + +#: panels/sql/panel.py:162 +msgid "SQL" +msgstr "SQL" + +#: panels/sql/panel.py:168 +#, python-format +msgid "%(query_count)d query in %(sql_time).2fms" +msgid_plural "%(query_count)d queries in %(sql_time).2fms" +msgstr[0] "" + +#: panels/sql/panel.py:180 +#, python-format +msgid "SQL queries from %(count)d connection" +msgid_plural "SQL queries from %(count)d connections" +msgstr[0] "" + +#: panels/staticfiles.py:82 +#, python-format +msgid "Static files (%(num_found)s found, %(num_used)s used)" +msgstr "静态文件 (%(num_found)s 个找到,%(num_used)s 个被使用)" + +#: panels/staticfiles.py:103 +msgid "Static files" +msgstr "静态文件" + +#: panels/staticfiles.py:109 +#, python-format +msgid "%(num_used)s file used" +msgid_plural "%(num_used)s files used" +msgstr[0] "%(num_used)s 个文件被使用" + +#: panels/templates/panel.py:101 +msgid "Templates" +msgstr "模板" + +#: panels/templates/panel.py:106 +#, python-format +msgid "Templates (%(num_templates)s rendered)" +msgstr "模板 (%(num_templates)s 个被渲染)" + +#: panels/templates/panel.py:195 +msgid "No origin" +msgstr "" + +#: panels/timer.py:27 +#, python-format +msgid "CPU: %(cum)0.2fms (%(total)0.2fms)" +msgstr "CPU: %(cum)0.2f 毫秒 (总耗时: %(total)0.2f 毫秒)" + +#: panels/timer.py:32 +#, python-format +msgid "Total: %0.2fms" +msgstr "总共:%0.2f 毫秒" + +#: panels/timer.py:38 templates/debug_toolbar/panels/history.html:9 +#: templates/debug_toolbar/panels/sql_explain.html:11 +#: templates/debug_toolbar/panels/sql_profile.html:12 +#: templates/debug_toolbar/panels/sql_select.html:11 +msgid "Time" +msgstr "时间" + +#: panels/timer.py:46 +msgid "User CPU time" +msgstr "用户 CPU 时间" + +#: panels/timer.py:46 +#, python-format +msgid "%(utime)0.3f msec" +msgstr "%(utime)0.3f 毫秒" + +#: panels/timer.py:47 +msgid "System CPU time" +msgstr "系统 CPU 时间" + +#: panels/timer.py:47 +#, python-format +msgid "%(stime)0.3f msec" +msgstr "%(stime)0.3f 毫秒" + +#: panels/timer.py:48 +msgid "Total CPU time" +msgstr "总的 CPU 时间" + +#: panels/timer.py:48 +#, python-format +msgid "%(total)0.3f msec" +msgstr "%(total)0.3f 毫秒" + +#: panels/timer.py:49 +msgid "Elapsed time" +msgstr "耗时" + +#: panels/timer.py:49 +#, python-format +msgid "%(total_time)0.3f msec" +msgstr "%(total_time)0.3f 毫秒" + +#: panels/timer.py:51 +msgid "Context switches" +msgstr "上下文切换" + +#: panels/timer.py:52 +#, python-format +msgid "%(vcsw)d voluntary, %(ivcsw)d involuntary" +msgstr "%(vcsw)d 主动, %(ivcsw)d 被动" + +#: panels/versions.py:19 +msgid "Versions" +msgstr "版本" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide toolbar" +msgstr "隐藏工具栏" + +#: templates/debug_toolbar/base.html:23 +msgid "Hide" +msgstr "隐藏" + +#: templates/debug_toolbar/base.html:25 templates/debug_toolbar/base.html:26 +msgid "Toggle Theme" +msgstr "" + +#: templates/debug_toolbar/base.html:35 +msgid "Show toolbar" +msgstr "显示工具栏" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Disable for next and successive requests" +msgstr "针对下一个连续的请求禁用该功能" + +#: templates/debug_toolbar/includes/panel_button.html:4 +msgid "Enable for next and successive requests" +msgstr "针对下一个连续的请求启用该功能" + +#: templates/debug_toolbar/panels/alerts.html:4 +msgid "Alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/alerts.html:11 +msgid "No alerts found" +msgstr "" + +#: templates/debug_toolbar/panels/cache.html:2 +msgid "Summary" +msgstr "摘要" + +#: templates/debug_toolbar/panels/cache.html:6 +msgid "Total calls" +msgstr "总调用次数" + +#: templates/debug_toolbar/panels/cache.html:7 +msgid "Total time" +msgstr "总耗时" + +#: templates/debug_toolbar/panels/cache.html:8 +msgid "Cache hits" +msgstr "缓存命中" + +#: templates/debug_toolbar/panels/cache.html:9 +msgid "Cache misses" +msgstr "缓存未命中" + +#: templates/debug_toolbar/panels/cache.html:21 +msgid "Commands" +msgstr "命令" + +#: templates/debug_toolbar/panels/cache.html:39 +msgid "Calls" +msgstr "调用" + +#: templates/debug_toolbar/panels/cache.html:43 +#: templates/debug_toolbar/panels/sql.html:36 +msgid "Time (ms)" +msgstr "时间(毫秒)" + +#: templates/debug_toolbar/panels/cache.html:44 +msgid "Type" +msgstr "类型" + +#: templates/debug_toolbar/panels/cache.html:45 +#: templates/debug_toolbar/panels/request.html:8 +msgid "Arguments" +msgstr "参数" + +#: templates/debug_toolbar/panels/cache.html:46 +#: templates/debug_toolbar/panels/request.html:9 +msgid "Keyword arguments" +msgstr "关键字参数" + +#: templates/debug_toolbar/panels/cache.html:47 +msgid "Backend" +msgstr "后端" + +#: templates/debug_toolbar/panels/headers.html:3 +msgid "Request headers" +msgstr "请求头" + +#: templates/debug_toolbar/panels/headers.html:8 +#: templates/debug_toolbar/panels/headers.html:27 +#: templates/debug_toolbar/panels/headers.html:48 +msgid "Key" +msgstr "键" + +#: templates/debug_toolbar/panels/headers.html:9 +#: templates/debug_toolbar/panels/headers.html:28 +#: templates/debug_toolbar/panels/headers.html:49 +#: templates/debug_toolbar/panels/history_tr.html:23 +#: templates/debug_toolbar/panels/request_variables.html:12 +#: templates/debug_toolbar/panels/settings.html:6 +#: templates/debug_toolbar/panels/timer.html:11 +msgid "Value" +msgstr "值" + +#: templates/debug_toolbar/panels/headers.html:22 +msgid "Response headers" +msgstr "响应头" + +#: templates/debug_toolbar/panels/headers.html:41 +msgid "WSGI environ" +msgstr "WSGI 环境变量" + +#: templates/debug_toolbar/panels/headers.html:43 +msgid "" +"Since the WSGI environ inherits the environment of the server, only a " +"significant subset is shown below." +msgstr "由于 WSGI 的环境变量继承自 server,所以下面只显示了一些重要的子集。" + +#: templates/debug_toolbar/panels/history.html:10 +msgid "Method" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:43 +msgid "Path" +msgstr "路径" + +#: templates/debug_toolbar/panels/history.html:12 +msgid "Request Variables" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:13 +msgid "Status" +msgstr "" + +#: templates/debug_toolbar/panels/history.html:14 +#: templates/debug_toolbar/panels/sql.html:37 +msgid "Action" +msgstr "功能" + +#: templates/debug_toolbar/panels/history_tr.html:22 +#: templates/debug_toolbar/panels/request_variables.html:11 +msgid "Variable" +msgstr "变量" + +#: templates/debug_toolbar/panels/profiling.html:5 +msgid "Call" +msgstr "调用" + +#: templates/debug_toolbar/panels/profiling.html:6 +msgid "CumTime" +msgstr "调用该函数及其内部调用其他函数花费的总时间" + +#: templates/debug_toolbar/panels/profiling.html:7 +#: templates/debug_toolbar/panels/profiling.html:9 +msgid "Per" +msgstr "平均每次调用花费的时间" + +#: templates/debug_toolbar/panels/profiling.html:8 +msgid "TotTime" +msgstr "调用该函数花费的总时间" + +#: templates/debug_toolbar/panels/profiling.html:10 +msgid "Count" +msgstr "总的调用次数" + +#: templates/debug_toolbar/panels/request.html:3 +msgid "View information" +msgstr "View 信息" + +#: templates/debug_toolbar/panels/request.html:7 +msgid "View function" +msgstr "View 函数" + +#: templates/debug_toolbar/panels/request.html:10 +msgid "URL name" +msgstr "URL 名称" + +#: templates/debug_toolbar/panels/request.html:24 +msgid "Cookies" +msgstr "Cookies" + +#: templates/debug_toolbar/panels/request.html:27 +msgid "No cookies" +msgstr "没有 cookies" + +#: templates/debug_toolbar/panels/request.html:31 +msgid "Session data" +msgstr "Session 数据" + +#: templates/debug_toolbar/panels/request.html:34 +msgid "No session data" +msgstr "没有 session 数据" + +#: templates/debug_toolbar/panels/request.html:38 +msgid "GET data" +msgstr "GET 请求数据" + +#: templates/debug_toolbar/panels/request.html:41 +msgid "No GET data" +msgstr "没有 GET 请求数据" + +#: templates/debug_toolbar/panels/request.html:45 +msgid "POST data" +msgstr "POST 请求数据" + +#: templates/debug_toolbar/panels/request.html:48 +msgid "No POST data" +msgstr "没有 POST 请求数据" + +#: templates/debug_toolbar/panels/settings.html:5 +msgid "Setting" +msgstr "设置项" + +#: templates/debug_toolbar/panels/signals.html:5 +msgid "Signal" +msgstr "信号" + +#: templates/debug_toolbar/panels/signals.html:6 +msgid "Receivers" +msgstr "接收者" + +#: templates/debug_toolbar/panels/sql.html:6 +#, python-format +msgid "%(num)s query" +msgid_plural "%(num)s queries" +msgstr[0] "%(num)s 个查询" + +#: templates/debug_toolbar/panels/sql.html:8 +#, python-format +msgid "" +"including %(count)s similar" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:12 +#, python-format +msgid "" +"and %(dupes)s duplicates" +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:34 +msgid "Query" +msgstr "查询" + +#: templates/debug_toolbar/panels/sql.html:35 +#: templates/debug_toolbar/panels/timer.html:36 +msgid "Timeline" +msgstr "时间线" + +#: templates/debug_toolbar/panels/sql.html:52 +#, python-format +msgid "%(count)s similar queries." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:58 +#, python-format +msgid "Duplicated %(dupes)s times." +msgstr "" + +#: templates/debug_toolbar/panels/sql.html:95 +msgid "Connection:" +msgstr "连接:" + +#: templates/debug_toolbar/panels/sql.html:97 +msgid "Isolation level:" +msgstr "隔离级别" + +#: templates/debug_toolbar/panels/sql.html:100 +msgid "Transaction status:" +msgstr "事务状态:" + +#: templates/debug_toolbar/panels/sql.html:114 +msgid "(unknown)" +msgstr "(未知)" + +#: templates/debug_toolbar/panels/sql.html:123 +msgid "No SQL queries were recorded during this request." +msgstr "在处理这个请求期间没有记录到 SQL 查询。" + +#: templates/debug_toolbar/panels/sql_explain.html:4 +msgid "SQL explained" +msgstr "SQL explain 分析" + +#: templates/debug_toolbar/panels/sql_explain.html:9 +#: templates/debug_toolbar/panels/sql_profile.html:10 +#: templates/debug_toolbar/panels/sql_select.html:9 +msgid "Executed SQL" +msgstr "执行的 SQL 语句" + +#: templates/debug_toolbar/panels/sql_explain.html:13 +#: templates/debug_toolbar/panels/sql_profile.html:14 +#: templates/debug_toolbar/panels/sql_select.html:13 +msgid "Database" +msgstr "数据库" + +#: templates/debug_toolbar/panels/sql_profile.html:4 +msgid "SQL profiled" +msgstr "SQL 性能分析" + +#: templates/debug_toolbar/panels/sql_profile.html:37 +msgid "Error" +msgstr "错误" + +#: templates/debug_toolbar/panels/sql_select.html:4 +msgid "SQL selected" +msgstr "选中的 SQL 语句" + +#: templates/debug_toolbar/panels/sql_select.html:36 +msgid "Empty set" +msgstr "空集合" + +#: templates/debug_toolbar/panels/staticfiles.html:3 +msgid "Static file path" +msgid_plural "Static file paths" +msgstr[0] "静态文件路径" + +#: templates/debug_toolbar/panels/staticfiles.html:7 +#, python-format +msgid "(prefix %(prefix)s)" +msgstr "(前缀 %(prefix)s)" + +#: templates/debug_toolbar/panels/staticfiles.html:11 +#: templates/debug_toolbar/panels/staticfiles.html:22 +#: templates/debug_toolbar/panels/staticfiles.html:34 +#: templates/debug_toolbar/panels/templates.html:10 +#: templates/debug_toolbar/panels/templates.html:30 +#: templates/debug_toolbar/panels/templates.html:47 +msgid "None" +msgstr "空" + +#: templates/debug_toolbar/panels/staticfiles.html:14 +msgid "Static file app" +msgid_plural "Static file apps" +msgstr[0] "包含静态文件的应用" + +#: templates/debug_toolbar/panels/staticfiles.html:25 +msgid "Static file" +msgid_plural "Static files" +msgstr[0] "静态文件" + +#: templates/debug_toolbar/panels/staticfiles.html:39 +#, python-format +msgid "%(payload_count)s file" +msgid_plural "%(payload_count)s files" +msgstr[0] "%(payload_count)s 个文件" + +#: templates/debug_toolbar/panels/staticfiles.html:44 +msgid "Location" +msgstr "位置" + +#: templates/debug_toolbar/panels/template_source.html:4 +msgid "Template source:" +msgstr "模板源:" + +#: templates/debug_toolbar/panels/templates.html:2 +msgid "Template path" +msgid_plural "Template paths" +msgstr[0] "模板路径" + +#: templates/debug_toolbar/panels/templates.html:13 +msgid "Template" +msgid_plural "Templates" +msgstr[0] "模板" + +#: templates/debug_toolbar/panels/templates.html:22 +#: templates/debug_toolbar/panels/templates.html:40 +msgid "Toggle context" +msgstr "切换上下文" + +#: templates/debug_toolbar/panels/templates.html:33 +msgid "Context processor" +msgid_plural "Context processors" +msgstr[0] "Context processors" + +#: templates/debug_toolbar/panels/timer.html:2 +msgid "Resource usage" +msgstr "资源使用" + +#: templates/debug_toolbar/panels/timer.html:10 +msgid "Resource" +msgstr "资源" + +#: templates/debug_toolbar/panels/timer.html:26 +msgid "Browser timing" +msgstr "浏览器计时" + +#: templates/debug_toolbar/panels/timer.html:35 +msgid "Timing attribute" +msgstr "计时属性" + +#: templates/debug_toolbar/panels/timer.html:37 +msgid "Milliseconds since navigation start (+length)" +msgstr "导航开始后的毫秒 (+长度)" + +#: templates/debug_toolbar/panels/versions.html:10 +msgid "Package" +msgstr "" + +#: templates/debug_toolbar/panels/versions.html:11 +msgid "Name" +msgstr "名称" + +#: templates/debug_toolbar/panels/versions.html:12 +msgid "Version" +msgstr "版本" + +#: templates/debug_toolbar/redirect.html:10 +msgid "Location:" +msgstr "位置:" + +#: templates/debug_toolbar/redirect.html:12 +msgid "" +"The Django Debug Toolbar has intercepted a redirect to the above URL for " +"debug viewing purposes. You can click the above link to continue with the " +"redirect as normal." +msgstr "Django Debug Toolbar 为了调试目的拦截了一个重定向到上面 URL 的请求。 您可以点击上面的链接继续执行重定向操作。" + +#: views.py:16 +msgid "" +"Data for this panel isn't available anymore. Please reload the page and " +"retry." +msgstr "当前面板的数据暂不可用。请刷新页面并重试。" diff --git a/debug_toolbar/management/commands/debugsqlshell.py b/debug_toolbar/management/commands/debugsqlshell.py index eaeafd497..b80577232 100644 --- a/debug_toolbar/management/commands/debugsqlshell.py +++ b/debug_toolbar/management/commands/debugsqlshell.py @@ -1,76 +1,33 @@ -import os -from optparse import make_option +from time import perf_counter -from django.core.management.base import NoArgsCommand -from django.db.backends import util +import sqlparse +from django.core.management.commands.shell import Command +from django.db import connection -from debug_toolbar.utils import sqlparse +if connection.vendor == "postgresql": + from django.db.backends.postgresql import base as base_module +else: + from django.db.backends import utils as base_module -class PrintQueryWrapper(util.CursorDebugWrapper): +# 'debugsqlshell' is the same as the 'shell'. + + +# Command is required to exist to be loaded via +# django.core.managementload_command_class +__all__ = ["Command", "PrintQueryWrapper"] + + +class PrintQueryWrapper(base_module.CursorDebugWrapper): def execute(self, sql, params=()): + start_time = perf_counter() try: return self.cursor.execute(sql, params) finally: raw_sql = self.db.ops.last_executed_query(self.cursor, sql, params) - print sqlparse.format(raw_sql, reindent=True) - print - -util.CursorDebugWrapper = PrintQueryWrapper - -# The rest is copy/paste from django/core/management/commands/shell.py + end_time = perf_counter() + duration = (end_time - start_time) * 1000 + formatted_sql = sqlparse.format(raw_sql, reindent=True) + print(f"{formatted_sql} [{duration:.2f}ms]") -class Command(NoArgsCommand): - option_list = NoArgsCommand.option_list + ( - make_option('--plain', action='http://github.com/store_true', dest='plain', - help='Tells Django to use plain Python, not IPython.'), - ) - help = "Runs a Python interactive interpreter. Tries to use IPython, if it's available." - - requires_model_validation = False - - def handle_noargs(self, **options): - # XXX: (Temporary) workaround for ticket #1796: force early loading of all - # models from installed apps. - from django.db.models.loading import get_models - loaded_models = get_models() - - use_plain = options.get('plain', False) - - try: - if use_plain: - # Don't bother loading IPython, because the user wants plain Python. - raise ImportError - import IPython - # Explicitly pass an empty list as arguments, because otherwise IPython - # would use sys.argv from this script. - shell = IPython.Shell.IPShell(argv=[]) - shell.mainloop() - except ImportError: - import code - # Set up a dictionary to serve as the environment for the shell, so - # that tab completion works on objects that are imported at runtime. - # See ticket 5082. - imported_objects = {} - try: # Try activating rlcompleter, because it's handy. - import readline - except ImportError: - pass - else: - # We don't have to wrap the following import in a 'try', because - # we already know 'readline' was imported successfully. - import rlcompleter - readline.set_completer(rlcompleter.Completer(imported_objects).complete) - readline.parse_and_bind("tab:complete") - # We want to honor both $PYTHONSTARTUP and .pythonrc.py, so follow system - # conventions and get $PYTHONSTARTUP first then import user. - if not use_plain: - pythonrc = os.environ.get("PYTHONSTARTUP") - if pythonrc and os.path.isfile(pythonrc): - try: - execfile(pythonrc) - except NameError: - pass - # This will import .pythonrc.py as a side-effect - import user - code.interact(local=imported_objects) +base_module.CursorDebugWrapper = PrintQueryWrapper diff --git a/debug_toolbar/media/debug_toolbar/css/toolbar.css b/debug_toolbar/media/debug_toolbar/css/toolbar.css deleted file mode 100644 index 4770adeda..000000000 --- a/debug_toolbar/media/debug_toolbar/css/toolbar.css +++ /dev/null @@ -1,580 +0,0 @@ -/* http://www.positioniseverything.net/easyclearing.html */ -.clearfix:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -.clearfix {display: inline-block;} -/* Hides from IE-mac \*/ -.clearfix {display: block;} -* html .clearfix {height: 1%;} -/* end hide from IE-mac */ - -/* Debug Toolbar CSS Reset, adapted from Eric Meyer's CSS Reset */ -#djDebug {color:#000;background:#FFF;} -#djDebug, #djDebug div, #djDebug span, #djDebug applet, #djDebug object, #djDebug iframe, -#djDebug h1, #djDebug h2, #djDebug h3, #djDebug h4, #djDebug h5, #djDebug h6, #djDebug p, #djDebug blockquote, #djDebug pre, -#djDebug a, #djDebug abbr, #djDebug acronym, #djDebug address, #djDebug big, #djDebug cite, #djDebug code, -#djDebug del, #djDebug dfn, #djDebug em, #djDebug font, #djDebug img, #djDebug ins, #djDebug kbd, #djDebug q, #djDebug s, #djDebug samp, -#djDebug small, #djDebug strike, #djDebug strong, #djDebug sub, #djDebug sup, #djDebug tt, #djDebug var, -#djDebug b, #djDebug u, #djDebug i, #djDebug center, -#djDebug dl, #djDebug dt, #djDebug dd, #djDebug ol, #djDebug ul, #djDebug li, -#djDebug fieldset, #djDebug form, #djDebug label, #djDebug legend, -#djDebug table, #djDebug caption, #djDebug tbody, #djDebug tfoot, #djDebug thead, #djDebug tr, #djDebug th, #djDebug td { - margin:0; - padding:0; - border:0; - outline:0; - font-size:12px; - line-height:1.5em; - color:#000; - vertical-align:baseline; - background:transparent; - font-family:sans-serif; - text-align:left; -} - -#djDebug #djDebugToolbar { - background:#111; - width:200px; - z-index:100000000; - position:fixed; - top:0; - bottom:0; - right:0; - opacity:0.9; -} - -#djDebug #djDebugToolbar small { - color:#999; -} - -#djDebug #djDebugToolbar ul { - margin:0; - padding:0; - list-style:none; -} - -#djDebug #djDebugToolbar li { - border-bottom:1px solid #222; - color:#fff; - display:block; - font-weight:bold; - float:none; - margin:0; - padding:0; - position:relative; - width:auto; -} - -#djDebug #djDebugToolbar li>a, -#djDebug #djDebugToolbar li>div.contentless { - font-weight:normal; - font-style:normal; - text-decoration:none; - display:block; - font-size:16px; - padding:10px 10px 5px 25px; - color:#fff; -} - -#djDebug #djDebugToolbar li a:hover { - color:#111; - background-color:#ffc; -} - -#djDebug #djDebugToolbar li.active { - background-image:url(http://github.com/img/indicator.png); - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgFJREFUeNqUlE1LAmEQx11fesNeDLt08hZ4KcgvIF7EgxcR9CT4IQwErx47WhFBdvPgwUNQeOiogiLRQSQUQaKD6Vpba7ar20izMe4+bjTwY5/Zl//OMzPPcCaTaRUwAxbTjynAdAHq84XGARuADQXN+MGEIJG1QmCaOZVK7WKUdmCdYMf7K/hDKwagwjRLPp9/cLvdzUKh8Ab+GgosExGz5hvFSJAbDAYKmFSpVM4DgUABX57l6wsYAR/AO64/MQUyyauiE1SdTqdTC4fDZ61W6x0FRUAAXvEqElGJCP5qzG3H5XIdFovFdCgUOgB3B3AC28AmyekSKSDH3LL2piRJcjabvU4kEnfg8sAL0Me1GulYE+ViQdWq1ep9NBrN9vv9J3B7KPyKOf3EtNAe1VVwzjwez36pVDoKBoMu3KpNs13dlg0FZ+ZwOJx+v3+PHATO6H2r0UOe54fJZPIil8vVSLtMjE7LQsFGo/EYiUSuut3uM/aimjPJSFQnCE0+hVNzE4/Hb1FoyOjBCasHdYKiKPLpdPo0k8k0GY1NKyvTyjIFe71eLRaLHZfLZYFx9AS8jhgR6gXb7faJ1+u9FATBglWU8cMxRjki0RmOMmu9Xo/4fL4y9pmVzEMZBcakGPJfw3YWzRY2rA19dWLLBMNCaAXXNHNPIVFO/zOtZ/YtwADKQgq0l7HbRAAAAABJRU5ErkJggg==); - background-repeat:no-repeat; - background-position:left center; - background-color:#333; - padding-left:10px; -} - -#djDebug #djDebugToolbar li.active a:hover { - color:#b36a60; - background-color:transparent; -} - -#djDebug #djDebugToolbar li small { - font-size:12px; - color:#999; - font-style:normal; - text-decoration:none; - font-variant:small-caps; -} - -#djDebug #djDebugToolbarHandle { - position:fixed; - background:#fff; - border:1px solid #111; - top:30px; - right:0; - z-index:100000000; - opacity:0.75; -} - -#djDebug a#djShowToolBarButton { - display:block; - height:75px; - width:30px; - border-right:none; - border-bottom:4px solid #fff; - border-top:4px solid #fff; - border-left:4px solid #fff; - color:#fff; - font-size:10px; - font-weight:bold; - text-decoration:none; - text-align:center; - text-indent:-999999px; - background:#000 url(http://github.com/img/djdt_vertical.png) no-repeat left center; - background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABLCAYAAAACnsWZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATCSURBVGiB7ZlvSBtnHMe/sckZY5aMw06r7aTLjGOwTKOMEWYs7M2EaaUdjG6+GDoQ9mIyupUxGIONwVZfDHwxg2E4igym24s5sFB0oDRq1yi1G0RijTjhjJBI86fR/LvbC+nFs7ncXR7jMsgXDp67e57vffI8v/s9z3NRAeBQxCr7rwGkVAIkVQmQVCVAUpUASVX0gGqxGxaLBTabDVqtFn6/H5OTk4jFYifJxovLdgwNDXGH1dDQkLVeoY+iH+KiBxSNwaOy2+0wmUyKzH0+H7xer2Koo5IVg/loZGSkuGOwtraW2KOggHt7e8QesmMwEomAZVlF5uvr64qBjko2YEtLC9bW1ogfqFRFn2b+v4CpVIovsyyrOP6OSyrksS8uKysDTdNQq9XY3d1FIpEoAFpGshJma2sr53A4OI/Hw7EsK0jIDMNw4+PjXFdXVyEWDLkr6PV6bmJiQvbs4XK5uJqampMBpCiKW1hYUDzF+Xw+zmAwFB5wcHBQMdxjDQ8PHwug6EtC0zS2trag0+kE16enp7G4uAiv14tUKgWz2Qyr1YrOzk6oVCq+XjweR11dHYLBYDZ7RcpK3tvbK+iRcDjMdXR0iP5Sm83GMQwjaNPX11e4IR4dHRU8bGBgQNKsp6dH0MbpdBYO0OVyCR5mNBolzTQaDZdOp/k2c3NzxICiMwlN03x5e3sboVBIrCqvZDIJhmH4c6PRKNlGSqKrGYqi+HJFRQX6+/tlGWq12qxlEmXt2pWVlbxTzGMtLS0VbogjkQjxLw+Hw8QeooA7OzvE5n6/n9hDNAbdbrfibeZRLS8vE7UH8lxunaSKfkUte9MEAAa6EhrqVNZ7HAc8DETBpo935a1oiJ1zH6O5rUH0fmI/iQ2PH1Nji/jpuxlwHHn0KOpBKVFaDRqbz6Gx+RysdjOudn9P7FmwGGy/+DLa3rQQ++QNmEykEA3t8UcsGn+izhvvvEIEBxAM8c2xO/iy74bgWu35KjhmPkLt+SoAwFnTaTI6HPMQMxsBLM1mvgdqdVSO2vKkqAdvXL+FuzOrYFkOd/9YzVqHfsbAlze95NNlnht3FQx0JU6pyxDejSGZyHyFOGs6DWu7GVVnjLh3+wGWZ8m+sMoGfLG1Ht3vvwZruxn1jdWCDVJgO4R7tx9gauwO5iZXiIAUA+r05fhi9D28/pZVluH9+XV8ctmBoJ98qQVIAGooNUZmr+KlV59TZMpsBHCl6Ss8Cu+T8uV+iz/4+qJiOOAg3Xz47eW8oQ5LtAcNdCWmtr55IlX8Oe3BX4sb2PTuIJ1Ko95cjResz6Kt0yKIy0Q8hY66awgFHxEBiqaZC91NArhYZB+fvu3E/M2/s9a32Ey4/ks/qs4c7OSocjUudDfhtx9cRICiQ9zc9rzgfPjzSVE44ODlGLr2q+BaPuFxVKKA9eZqwfnvP85Lmt362Q2WzURMfWN1jtryJApooCv5cmA7hGhI+j+PVDKNAPOQP9cbKwjxcsSghsrcKq/Q4FK/XZYhpdVk2h0q5ytRwFg0k8OeelqHzxzvKjbPtgRTKtEhjkXIzQuaqIM75FNV0C/9wUlKokPscW8SLzhXl/8hag+UNu7kKgGSqgRIqhIgqUqApCp6wH8B9cAOKo9Os8wAAAAASUVORK5CYII=); - opacity:0.5; -} - -#djDebug a#djShowToolBarButton:hover { - background-color:#111; - padding-right:6px; - border-top-color:#FFE761; - border-left-color:#FFE761; - border-bottom-color:#FFE761; - opacity:1.0; -} - -#djDebug code { - display:block; - font-family:Consolas, Monaco, "Bitstream Vera Sans Mono", "Lucida Console", monospace; - white-space:pre; - overflow:auto; -} - -#djDebug tr.djDebugOdd { - background-color:#f5f5f5; -} - -#djDebug .panelContent { - display:none; - position:fixed; - margin:0; - top:0; - right:200px; - bottom:0; - left:0px; - background-color:#eee; - color:#666; - z-index:100000000; -} - -#djDebug .panelContent > div { - border-bottom:1px solid #ddd; -} - -#djDebug .djDebugPanelTitle { - position:absolute; - background-color:#ffc; - color:#666; - padding-left:20px; - top:0; - right:0; - left:0; - height:50px; -} - -#djDebug .djDebugPanelTitle code { - display:inline; - font-size:inherit; -} - -#djDebug .djDebugPanelContent { - position:absolute; - top:50px; - right:0; - bottom:0; - left:0; - height:auto; - padding:5px 0 0 20px; -} - -#djDebug .djDebugPanelContent .scroll { - height:100%; - overflow:auto; - display:block; - padding:0 10px 0 0; -} - -#djDebug h3 { - font-size:24px; - font-weight:normal; - line-height:50px; -} - -#djDebug h4 { - font-size:20px; - font-weight:bold; - margin-top:0.8em; -} - -#djDebug .panelContent table { - border:1px solid #ccc; - border-collapse:collapse; - width:100%; - background-color:#fff; - display:block; - margin-top:0.8em; - overflow: auto; -} -#djDebug .panelContent tbody td, -#djDebug .panelContent tbody th { - vertical-align:top; - padding:2px 3px; -} -#djDebug .panelContent thead th { - padding:1px 6px 1px 3px; - text-align:left; - font-weight:bold; - font-size:14px; -} -#djDebug .panelContent tbody th { - width:12em; - text-align:right; - color:#666; - padding-right:.5em; -} - -#djDebug .djTemplateHideContextDiv { - background-color:#fff; -} - -/* -#djDebug .panelContent p a:hover, #djDebug .panelContent dd a:hover { - color:#111; - background-color:#ffc; -} - -#djDebug .panelContent p { - padding:0 5px; -} - -#djDebug .panelContent p, #djDebug .panelContent table, #djDebug .panelContent ol, #djDebug .panelContent ul, #djDebug .panelContent dl { - margin:5px 0 15px; - background-color:#fff; -} -#djDebug .panelContent table { - clear:both; - border:0; - padding:0; - margin:0; - border-collapse:collapse; - border-spacing:0; -} - -#djDebug .panelContent table a { - color:#000; - padding:2px 4px; -} -#djDebug .panelContent table a:hover { - background-color:#ffc; -} - -#djDebug .panelContent table th { - background-color:#333; - font-weight:bold; - color:#fff; - padding:3px 7px 3px; - text-align:left; - cursor:pointer; -} -#djDebug .panelContent table td { - padding:5px 10px; - font-size:14px; - background:#fff; - color:#000; - vertical-align:top; - border:0; -} -#djDebug .panelContent table tr.djDebugOdd td { - background:#eee; -} -*/ - -#djDebug .panelContent .djDebugClose { - text-indent:-9999999px; - display:block; - position:absolute; - top:4px; - right:15px; - height:40px; - width:40px; - background:url(http://github.com/img/close.png) no-repeat center center; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7dJREFUeNqsWM1PE0EU3+7ShdJKoTRA8UYgIUKM3rmaEI0euXsw0YMHIZEbxBijEiIHLkb/A44SDYlXzkYPGBM+ri1NWz7aUmhp6+9tps10mLfdfrzkl2535r39zc77mvUdHh4abUoUCAD3xP/fQAFItWJkYmLC+e1p8eGPgQcC08ycf8BPgW2vhr0SeQa8AWIe5k4LvATiwCrwtZmS2WT8IfAL+OKRhCoxoftH2GqLyBLwHbhvdC53ha2lVrfmE/DKzbLP5yubplnt7e310f+rq6tqpVLxVatVy0VtHbgNLHohsupGIhQKFQG7v79f+8CLiwsjl8sVAZsxQbYTwFrDwpTwpaj4ptPu6+vLDw4OBkHA014QobOzs3yhUAgyUx4BP2rhq/rIe53GwMBAeXx83DMJEpobi8WCpMtMWeOc9TkwoyMRjUattrMedBkyM+KZN4isqDMDgUCuExIyGbKlGVpRiSzo8kQ4HA4ZXRLGVuzo6GhBJjKviw6dT5TLZSOTyRinp6cGQrV+n67hnEY6nTaur6+1PkM2NWTm5fCd0xDRhh89CKHpXCMijLGxMef6+PjYiRSSUqlUv6/arOlKMlcjQlV0qsGDTZPehpYIxurXRCSRSFByq5NQ56hvhWwj8cm2p7A9UdKYVBX8fn+F2+tIJGIgmzaQkUnYtm0MDw+zvsLYniQiEc2q/WxxwmqRHxrISA9xxiyLDzTGdsRsJwJoK3QPo3vctnhpAzLqTexhiVOg6JAdU5bLy0vHZ+Ro8mg7Q0QO1LvwenZZJycnN3yCIPsMRRYnjO0DU/SY+wprW7fiWmjKJMgnUIcafEaeoxZCJWJI9lH4UjV2u6pSPp/XJR9jaGiIKrERDAbrjllzYOQJZ4zm6ISxuSsntB3gqTyazWZtMowa0aBFb4HegC6aRkZG2C2hLSObmqEdOcVvUdJUZyBlZ7tVa1ASdEUvjW3ZUqvvO82e3kqlUuVOSZANvBFd0fugawM2VKclOT8/tzohQ7pkgzn/rHNdvLbLJkPxeDzHRRIXIaTDkCB57XacoJPZW8bZQpSskslk0Y0QjdEcmstsB8myegrsYbqmENfJU3dOpZyOEwjdCqLIWUyxWKygVzHFccJ2eVkbar/qdq5ZFC3/R5dUb6EBsqQmyEtLuawj0eykRwpPgL0uRO+esLXW7tmX9nEWeAEk2yCQFLqzzb4MeK3Zn4FRsapNEXqGy2eJTTF3VOh27bOE/Ia2pQ81YeCO+P+XknGrH2pq8l+AAQDv/n2Gmq99BgAAAABJRU5ErkJggg==); -} - -#djDebug .panelContent .djDebugClose:hover { - background-image:url(http://github.com/img/close_hover.png); - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCVJREFUeNqsWG1IU1EYfjfd0i1bTc2WFTW3tG2aFWlEf4KkMIrCvhH6U9DnjxTyV0ZEXxIVGBH1JyKIPiBK8kf1syCKwu8M3VQsK7OV6ba2udZ7bmd6d+85827zhYftnnPe5z73nvc95z1X5XQ6IUHLQqQjiul1E8KHGIqHxGw2C7+pcd58E6KMooAzphPxnKJBKbFSIfsRpxAmBWMLKI4iviBOIm5O5qSepL8c8R5xQ6EIqZmobzPlSkhINeIpYhkkb0WUqzreqbmEOBaTOjQGf/0+CHz7Klxqc+aAehrGbkrM2b6IyEVUKRFyMpYI38dW8HS0gc/5kdmfnpcPepsD0vMLeRSEm6ivEzeqJOlLsuIJyzs40Au/Xr+CP64uRXORZraCoXQ1aHMX8YZsRDRG0lcqpA1hl3p4mt+C+/nThILDWLYR9EtXsrraEY6IEHGwHmCJGG16k7AIYsTX0/KO1WWn95QJqZWODHxyws8XjUmnjPtZg8DFsFqpkB2sdWL4zWuYKuNwmVwu1w6xkA2s7GAFpnaGAcxbd8H8snJQa7QTUZ+aCrlr10NexR5Iy8yW+REuwsmwDeL0XSOLjfYW5pNZtldC9orS/4FoK4LWa5cgHP4L9n1HILNoudCuM82F1qsXgcXJSOs1ESFkF7WKe8JBfxifQMVMY8/o+P+Z+TYoPFwNoYAfMh3FE2udz8d8CPJWCLdKM03MbcXpySJTY5EtmsNuFW+uex4/gJFe14SYxUuiRHi/fIaue7f5CzKb20KEGKWtYx4Pl2jM54WW+joY6euR9Xm/DkDT5bMQHB3h+7O5jepEMiAUDDBvRtpCfn9CWUWEuGUbkF7PdSDZQQLTaC+S9Rks+VB4qCoqmxRyu4mQbmlrisEY5hEtLN8ynh2RmBjt74sK4LyK3VwhHO5uNa0xoxYMEtVk02KZbk7uxB400C/ERPOVc1EBrMsxcTdCScYQ68L9ZiiyjryUprC+wM5c0PoaH4EmIwMCv4eh6+6t8VghAWzdtVdYzHoaHjKFEE6GvRTvvmSZvScd8f3hHfjT2z0lS3zaQgtkb6tkde3EN3I/kjX3ET9kwVdSOmV7jaF0Fav5BxEh3X3PyPaVBVaYta48aRGkJtHOt7C6zrPKgMvSoCU2vbhEIEpGBKcw6qQ1LLNmrWaVioRIk2kUtvK4SsWSVaCdl8cbcjxW8UxOZqcRJ2TThITZCO+HZvB2dsQsnnUFNtAtWRpLZ430FKjinH0VHSdCXg8EhwaFS03WbEjR6Sc7TkRCoErp2beKlvwX+EtkKqRkGATEYTXSY4SSkx5x2Eyr7WStnXLVJXr2JfPoQBxEDCYgYJD6Oib7MqC0DLiOyKFPVU9TD2J8lqinY3Oo75R9lhC/oQbRhxoSIDZ63UGK9Xg/1ETsnwADAJrrTk7nZiozAAAAAElFTkSuQmCC); -} - -#djDebug .panelContent .djDebugClose.djDebugBack { - background-image:url(http://github.com/img/back.png); - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7FJREFUeNrMWM1PE0EU3+7S7bZdKSFNSIFgJJAgINE7VxOi0SP/gYkePAiJ3CDGGJUQOXAx+h9wlGhIvHI2fgQ08mEkkjZNIZR2+7Httr63zMoyOzPdthx8yS+bnZn3m9/OvDcfG9jd3ZVatDggDLhO3j8DioBMMySDg4P2s6PJzu8AbhKMcNr8AHwkWPNL7FfIPcATQMJH2xGCh4AkYAHwtpGT3KD+FuAT4I1PEbQliO8XwtWSkFnAe8ANqX2bIFyzzU7NK8AjEXMgELBkWa6HQqEAvpfL5XqtVgvU63VF4LYE6APM+BGyIBKh67oJUCORCLPDQqEg5fN5E6ByKJA7BVg892FU+mJWvGN5a5pmdHV1RUGAr7lAQdls1igWi1FOk9uAD0760jHynOXR2dlp9fb2+haBhm0TiUQUfTlNFnnBeh8wxhIRj8eVllc98OWIGSN9eoTM0y3D4XC+HRFuMcjFqJqnhUyz1olYLKa730uVCrMjXrmIy1ln9vb2pt1CpljZQcdE1ihIW/sHHrayWbHLq1ZNGDPIyaiacguZZAhhph+K+fpr39Ppqcg/wtHhcE46QnAXHT4XwbJssjJECwbtp1EqS99AjNNpSD0r//77wH7yRgW5qeJhmJ44ChmiHYLBIHOMY9GINDrQ9y8uHDEoEMs7FNl+x5HhieFwD6GQbs8GJMtBbtCBmIkrA3anOD0YH2ci+21RWJ4vldibG5u7W5b+E8O95oguhM0LP1PhBauTOfj1Tnxg+c+DpD0aOFq6pjE75HAfoZAdunGlUpH9iLh6uc9+nsaFt5xlHO4dmZwxtynVKm5avIUrqoWkaxAnTmdOnGC5SARyIjdVvA0bX8ZRt0E7GYZhNgpWb0b1c0UIODfcC9o6XZvL5VTYwrnp6zaMEyd9eYZcyMmoWncLWQUcemIim82xFjTeQiey4+Nj1qZ3CNOySu++zxhzeimTyVjtpiZywIiwNr0XrGPAMh20aCcnJ0o7YtAXOTj3nyXeKZ55ykaiZDKZZ2WS6KiIPhwRaI9F1wm8mT3lBJueSqWkdDptigRhHbbBtpzpQJujb4EdnFOTzjvJ4+kcYF8nFEWpqapqf4xpmjXLsmRynVAFg7VMn1dF95oZcuR/yWPDDqvVKsIp8nOknGOJaHTTQ4e7gM0L2NM2Cddiq3dfnMdxwANAugUBaeI73ujPgN9jwGtAD/mqFZJ6kuC3xApp20N8L+y3hHuE1lw/amKAUfK+hYtxsz9qHPsrwACHs5P9Qys/0AAAAABJRU5ErkJggg==); -} - -#djDebug .panelContent .djDebugClose.djDebugBack:hover { - background-image:url(http://github.com/img/back_hover.png); - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA6hJREFUeNrMWF1Ik1EYPtt0pkuGa/aDJTY3nNvSfkglvEwQpa7CbrosKAghBedNikKgEgVe1m03SVeJXmSXBmIozpxpuiUS/eicSc75m73vx/nGt7Nzvm8/BR14+Pjec85znp297znv++kCgQBJs1kBuYDz9H0KEAWEUiGx2WzSMyvFxa8B6iicgjFzgBGKwWSJdUnuyB1AF+BUisK/AToBz7V2RK9B1ACYBDxLQwShc3Cuj3IJm5qQVsAQ4ALJvFVQrlbRAJGPPAE8UKU+2Ce/d6Jk98d36dV44iTR54DvGlTd7jGgCNCSjJBONRHR+Q8kMjtDooF5bn9uaRkxuTwkt+yciAK5UX2fmrNiVLzmzd77ukR+jr0j28GFpP6LIzYHMVdfIcais6IhjYBh2VlZITMANzsj4ntPwiNDaTmHpa6RmCov87r8AA8vau7yRGxOjactAhvOjUxP8LrcdM0EIR3syN0vAbL+djjjkAm/GZS4OK2DFdLEOyc2xsfi/3frcb4/COxqXPI5EwwGm5RC6nnRwTpmgdNNKpq9iZFiLZTsWXkmoRDkQk5Oq1cKqU3wDf80lxDFXGzvTlhUFqm2OwLOWlkI3qIOZc/h3s4hL0y3QyvSM7+4hFxq74otGg2txuyVzW3SU7QryM2YHfD3WFGIPeHQ3AjreETrc34y3d8b8wtZDApE+/5WRHrHnRGJEXDbUYiFte5HIsLtRTGTPR3Sovj3oH8oRaIotB8t5h9kAm6LnvwnDe+acILRJPZ+ZeTgr5f9A+2u2/el3cDd2lz+zF+Qzx1GIYus1WC2oEPptET4+vukp+wXrJ3XBNyLeppjxoWILjtHh5eW6OD6tbxEJno6Y4vJfoJ2NRHIidyMeQHum5DsI6PsJJPTremsvIgSiVDhHFXevnjMvmRHrL56QbaXFuN2hLeQyB43psROCm/c4nXdhB0ZkHdkALDGjjBXVXMPNNFBp9bM1TU88xqKYG/fR+woY7GDFFxtyDg0MScxnrHzunpEGdon9rj/h4kR1j/logKrlZcqIlH2MYt0laeUKlbVEOPpUtGQNq0CqxvwUDR766OPbM3NqibPeU4XySuvVNPplZNnUc6aUjlxACG8Rx01GyLHgKmBQbOKfaosJ7Rq3xaa8vcK6WBBQ75ZQgrNy5YRyVR6OOE6zbYzbX7K1ZdOyUloNe8B3AOspCFghc71aH0Z0KX4feSvf5bQctZkP9Sgg7jo+ywm6+l+qPkjwADNS26fFM/O1QAAAABJRU5ErkJggg==); -} - -#djDebug .panelContent dt, #djDebug .panelContent dd { - display:block; -} - -#djDebug .panelContent dt { - margin-top:0.75em; -} - -#djDebug .panelContent dd { - margin-left:10px; -} - -#djDebug a.toggleTemplate { - padding:4px; - background-color:#bbb; - -moz-border-radius:3px; - -webkit-border-radius:3px; -} - -#djDebug a.toggleTemplate:hover { - padding:4px; - background-color:#444; - color:#ffe761; - -moz-border-radius:3px; - -webkit-border-radius:3px; -} - - -#djDebug a.djTemplateShowContext, #djDebug a.djTemplateShowContext span.toggleArrow { - color:#999; -} - -#djDebug a.djTemplateShowContext:hover, #djDebug a.djTemplateShowContext:hover span.toggleArrow { - color:#000; - cursor:pointer; -} - -#djDebug .djDebugSqlWrap { - position:relative; -} - -#djDebug .djDebugCollapsed { - display: none; - text-decoration: none; - color: #333; -} - -#djDebug .djDebugUncollapsed { - color: #333; - text-decoration: none; -} - -#djDebug .djUnselected { - display: none; -} -#djDebug tr.djHiddenByDefault { - display: none; -} -#djDebug tr.djSelected { - display: table-row; -} - -#djDebug .djDebugSql { - z-index:100000002; -} - -#djDebug .djSQLDetailsDiv tbody th { - text-align: left; -} - -#djDebug .djSqlExplain td { - white-space: pre; -} - -#djDebug span.djDebugLineChart { - background-color:#777; - height:3px; - position:absolute; - bottom:0; - top:0; - left:0; - display:block; - z-index:1000000001; -} -#djDebug span.djDebugLineChartWarning { - background-color:#900; -} - -#djDebug .highlight { color:#000; } -#djDebug .highlight .err { color:#000; } /* Error */ -#djDebug .highlight .g { color:#000; } /* Generic */ -#djDebug .highlight .k { color:#000; font-weight:bold } /* Keyword */ -#djDebug .highlight .o { color:#000; } /* Operator */ -#djDebug .highlight .n { color:#000; } /* Name */ -#djDebug .highlight .mi { color:#000; font-weight:bold } /* Literal.Number.Integer */ -#djDebug .highlight .l { color:#000; } /* Literal */ -#djDebug .highlight .x { color:#000; } /* Other */ -#djDebug .highlight .p { color:#000; } /* Punctuation */ -#djDebug .highlight .m { color:#000; font-weight:bold } /* Literal.Number */ -#djDebug .highlight .s { color:#333 } /* Literal.String */ -#djDebug .highlight .w { color:#888888 } /* Text.Whitespace */ -#djDebug .highlight .il { color:#000; font-weight:bold } /* Literal.Number.Integer.Long */ -#djDebug .highlight .na { color:#333 } /* Name.Attribute */ -#djDebug .highlight .nt { color:#000; font-weight:bold } /* Name.Tag */ -#djDebug .highlight .nv { color:#333 } /* Name.Variable */ -#djDebug .highlight .s2 { color:#333 } /* Literal.String.Double */ -#djDebug .highlight .cp { color:#333 } /* Comment.Preproc */ - -#djDebug .timeline { - width: 30%; -} -#djDebug .djDebugTimeline { - position: relative; - height: 100%; - min-height: 100%; -} -#djDebug div.djDebugLineChart { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - vertical-align: middle; -} -#djDebug div.djDebugLineChart strong { - text-indent: -10000em; - display: block; - font-weight: normal; - vertical-align: middle; - background-color:#ccc; -} - -#djDebug div.djDebugLineChartWarning strong { - background-color:#900; -} - -#djDebug .djDebugInTransaction div.djDebugLineChart strong { - background-color: #d3ff82; -} -#djDebug .djDebugStartTransaction div.djDebugLineChart strong { - border-left: 1px solid #94b24d; -} -#djDebug .djDebugEndTransaction div.djDebugLineChart strong { - border-right: 1px solid #94b24d; -} -#djDebug .djDebugHover div.djDebugLineChart strong { - background-color: #000; -} -#djDebug .djDebugInTransaction.djDebugHover div.djDebugLineChart strong { - background-color: #94b24d; -} - - -#djDebug .panelContent ul.stats { - position: relative; -} -#djDebug .panelContent ul.stats li { - width: 30%; - float: left; -} -#djDebug .panelContent ul.stats li strong.label { - display: block; -} -#djDebug .panelContent ul.stats li span.color { - height: 12px; - width: 3px; - display: inline-block; -} -#djDebug .panelContent ul.stats li span.info { - display: block; - padding-left: 5px; -} - -#djDebug .panelcontent thead th { - white-space: nowrap; -} -#djDebug .djDebugRowWarning .time { - color: red; -} -#djdebug .panelcontent table .toggle { - width: 14px; - padding-top: 3px; -} -#djdebug .panelcontent table .actions { - min-width: 70px; -} -#djdebug .panelcontent table .color { - width: 3px; -} -#djdebug .panelcontent table .color span { - width: 3px; - height: 12px; - overflow: hidden; - padding: 0; -} -#djDebug .djToggleSwitch { - text-decoration: none; - border: 1px solid #999; - height: 12px; - width: 12px; - line-height: 12px; - text-align: center; - color: #777; - display: inline-block; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFF', endColorstr='#DCDCDC'); /* for IE */ - background: -webkit-gradient(linear, left top, left bottom, from(#FFF), to(#DCDCDC)); /* for webkit browsers */ - background:-moz-linear-gradient(center top , #FFFFFF 0pt, #DCDCDC 100%) repeat scroll 0 0 transparent; -} -#djDebug .djNoToggleSwitch { - height: 14px; - width: 14px; - display: inline-block; -} - -#djDebug .djSQLDetailsDiv { - margin-top:0.8em; -} -#djDebug pre { - white-space: pre-wrap; /* CSS-3 */ - white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - word-wrap: break-word; /* Internet Explorer 5.5+ */ - color: #555; - border:1px solid #ccc; - border-collapse:collapse; - background-color:#fff; - display:block; - overflow: auto; - padding:2px 3px; - margin-bottom: 3px; - font-family:Consolas, Monaco, "Bitstream Vera Sans Mono", "Lucida Console", monospace; -} -#djDebug .stack span { - color: #000; - font-weight: bold; -} -#djDebug .stack span.path { - color: #777; - font-weight: normal; -} -#djDebug .stack span.code { - font-weight: normal; -} - -@media print { - #djDebug { - display: none; - } -} diff --git a/debug_toolbar/media/debug_toolbar/css/toolbar.min.css b/debug_toolbar/media/debug_toolbar/css/toolbar.min.css deleted file mode 100644 index aa30728d8..000000000 --- a/debug_toolbar/media/debug_toolbar/css/toolbar.min.css +++ /dev/null @@ -1 +0,0 @@ -.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.clearfix{display:inline-block;}/* Hides from IE-mac \*/ .clearfix{display:block;}* html .clearfix{height:1%;}/* end hide from IE-mac */ #djDebug{color:#000;background:#FFF;}#djDebug,#djDebug div,#djDebug span,#djDebug applet,#djDebug object,#djDebug iframe,#djDebug h1,#djDebug h2,#djDebug h3,#djDebug h4,#djDebug h5,#djDebug h6,#djDebug p,#djDebug blockquote,#djDebug pre,#djDebug a,#djDebug abbr,#djDebug acronym,#djDebug address,#djDebug big,#djDebug cite,#djDebug code,#djDebug del,#djDebug dfn,#djDebug em,#djDebug font,#djDebug img,#djDebug ins,#djDebug kbd,#djDebug q,#djDebug s,#djDebug samp,#djDebug small,#djDebug strike,#djDebug strong,#djDebug sub,#djDebug sup,#djDebug tt,#djDebug var,#djDebug b,#djDebug u,#djDebug i,#djDebug center,#djDebug dl,#djDebug dt,#djDebug dd,#djDebug ol,#djDebug ul,#djDebug li,#djDebug fieldset,#djDebug form,#djDebug label,#djDebug legend,#djDebug table,#djDebug caption,#djDebug tbody,#djDebug tfoot,#djDebug thead,#djDebug tr,#djDebug th,#djDebug td{margin:0;padding:0;border:0;outline:0;font-size:12px;line-height:1.5em;color:#000;vertical-align:baseline;background:transparent;font-family:sans-serif;text-align:left;}#djDebug #djDebugToolbar{background:#111;width:200px;z-index:100000000;position:fixed;top:0;bottom:0;right:0;opacity:.9;}#djDebug #djDebugToolbar small{color:#999;}#djDebug #djDebugToolbar ul{margin:0;padding:0;list-style:none;}#djDebug #djDebugToolbar li{border-bottom:1px solid #222;color:#fff;display:block;font-weight:bold;float:none;margin:0;padding:0;position:relative;width:auto;}#djDebug #djDebugToolbar li>a,#djDebug #djDebugToolbar li>div.contentless{font-weight:normal;font-style:normal;text-decoration:none;display:block;font-size:16px;padding:10px 10px 5px 25px;color:#fff;}#djDebug #djDebugToolbar li a:hover{color:#111;background-color:#ffc;}#djDebug #djDebugToolbar li.active{background-image:url(http://github.com/img/indicator.png);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgFJREFUeNqUlE1LAmEQx11fesNeDLt08hZ4KcgvIF7EgxcR9CT4IQwErx47WhFBdvPgwUNQeOiogiLRQSQUQaKD6Vpba7ar20izMe4+bjTwY5/Zl//OMzPPcCaTaRUwAxbTjynAdAHq84XGARuADQXN+MGEIJG1QmCaOZVK7WKUdmCdYMf7K/hDKwagwjRLPp9/cLvdzUKh8Ab+GgosExGz5hvFSJAbDAYKmFSpVM4DgUABX57l6wsYAR/AO64/MQUyyauiE1SdTqdTC4fDZ61W6x0FRUAAXvEqElGJCP5qzG3H5XIdFovFdCgUOgB3B3AC28AmyekSKSDH3LL2piRJcjabvU4kEnfg8sAL0Me1GulYE+ViQdWq1ep9NBrN9vv9J3B7KPyKOf3EtNAe1VVwzjwez36pVDoKBoMu3KpNs13dlg0FZ+ZwOJx+v3+PHATO6H2r0UOe54fJZPIil8vVSLtMjE7LQsFGo/EYiUSuut3uM/aimjPJSFQnCE0+hVNzE4/Hb1FoyOjBCasHdYKiKPLpdPo0k8k0GY1NKyvTyjIFe71eLRaLHZfLZYFx9AS8jhgR6gXb7faJ1+u9FATBglWU8cMxRjki0RmOMmu9Xo/4fL4y9pmVzEMZBcakGPJfw3YWzRY2rA19dWLLBMNCaAXXNHNPIVFO/zOtZ/YtwADKQgq0l7HbRAAAAABJRU5ErkJggg==);background-repeat:no-repeat;background-position:left center;background-color:#333;padding-left:10px;}#djDebug #djDebugToolbar li.active a:hover{color:#b36a60;background-color:transparent;}#djDebug #djDebugToolbar li small{font-size:12px;color:#999;font-style:normal;text-decoration:none;font-variant:small-caps;}#djDebug #djDebugToolbarHandle{position:fixed;background:#fff;border:1px solid #111;top:30px;right:0;z-index:100000000;opacity:.75;}#djDebug a#djShowToolBarButton{display:block;height:75px;width:30px;border-right:none;border-bottom:4px solid #fff;border-top:4px solid #fff;border-left:4px solid #fff;color:#fff;font-size:10px;font-weight:bold;text-decoration:none;text-align:center;text-indent:-999999px;background:#000 url(http://github.com/img/djdt_vertical.png) no-repeat left center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABLCAYAAAACnsWZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAATCSURBVGiB7ZlvSBtnHMe/sckZY5aMw06r7aTLjGOwTKOMEWYs7M2EaaUdjG6+GDoQ9mIyupUxGIONwVZfDHwxg2E4igym24s5sFB0oDRq1yi1G0RijTjhjJBI86fR/LvbC+nFs7ncXR7jMsgXDp67e57vffI8v/s9z3NRAeBQxCr7rwGkVAIkVQmQVCVAUpUASVX0gGqxGxaLBTabDVqtFn6/H5OTk4jFYifJxovLdgwNDXGH1dDQkLVeoY+iH+KiBxSNwaOy2+0wmUyKzH0+H7xer2Koo5IVg/loZGSkuGOwtraW2KOggHt7e8QesmMwEomAZVlF5uvr64qBjko2YEtLC9bW1ogfqFRFn2b+v4CpVIovsyyrOP6OSyrksS8uKysDTdNQq9XY3d1FIpEoAFpGshJma2sr53A4OI/Hw7EsK0jIDMNw4+PjXFdXVyEWDLkr6PV6bmJiQvbs4XK5uJqampMBpCiKW1hYUDzF+Xw+zmAwFB5wcHBQMdxjDQ8PHwug6EtC0zS2trag0+kE16enp7G4uAiv14tUKgWz2Qyr1YrOzk6oVCq+XjweR11dHYLBYDZ7RcpK3tvbK+iRcDjMdXR0iP5Sm83GMQwjaNPX11e4IR4dHRU8bGBgQNKsp6dH0MbpdBYO0OVyCR5mNBolzTQaDZdOp/k2c3NzxICiMwlN03x5e3sboVBIrCqvZDIJhmH4c6PRKNlGSqKrGYqi+HJFRQX6+/tlGWq12qxlEmXt2pWVlbxTzGMtLS0VbogjkQjxLw+Hw8QeooA7OzvE5n6/n9hDNAbdbrfibeZRLS8vE7UH8lxunaSKfkUte9MEAAa6EhrqVNZ7HAc8DETBpo935a1oiJ1zH6O5rUH0fmI/iQ2PH1Nji/jpuxlwHHn0KOpBKVFaDRqbz6Gx+RysdjOudn9P7FmwGGy/+DLa3rQQ++QNmEykEA3t8UcsGn+izhvvvEIEBxAM8c2xO/iy74bgWu35KjhmPkLt+SoAwFnTaTI6HPMQMxsBLM1mvgdqdVSO2vKkqAdvXL+FuzOrYFkOd/9YzVqHfsbAlze95NNlnht3FQx0JU6pyxDejSGZyHyFOGs6DWu7GVVnjLh3+wGWZ8m+sMoGfLG1Ht3vvwZruxn1jdWCDVJgO4R7tx9gauwO5iZXiIAUA+r05fhi9D28/pZVluH9+XV8ctmBoJ98qQVIAGooNUZmr+KlV59TZMpsBHCl6Ss8Cu+T8uV+iz/4+qJiOOAg3Xz47eW8oQ5LtAcNdCWmtr55IlX8Oe3BX4sb2PTuIJ1Ko95cjResz6Kt0yKIy0Q8hY66awgFHxEBiqaZC91NArhYZB+fvu3E/M2/s9a32Ey4/ks/qs4c7OSocjUudDfhtx9cRICiQ9zc9rzgfPjzSVE44ODlGLr2q+BaPuFxVKKA9eZqwfnvP85Lmt362Q2WzURMfWN1jtryJApooCv5cmA7hGhI+j+PVDKNAPOQP9cbKwjxcsSghsrcKq/Q4FK/XZYhpdVk2h0q5ytRwFg0k8OeelqHzxzvKjbPtgRTKtEhjkXIzQuaqIM75FNV0C/9wUlKokPscW8SLzhXl/8hag+UNu7kKgGSqgRIqhIgqUqApCp6wH8B9cAOKo9Os8wAAAAASUVORK5CYII=);opacity:.5;}#djDebug a#djShowToolBarButton:hover{background-color:#111;padding-right:6px;border-top-color:#FFE761;border-left-color:#FFE761;border-bottom-color:#FFE761;opacity:1.0;}#djDebug code{display:block;font-family:Consolas,Monaco,"Bitstream Vera Sans Mono","Lucida Console",monospace;white-space:pre;overflow:auto;}#djDebug tr.djDebugOdd{background-color:#f5f5f5;}#djDebug .panelContent{display:none;position:fixed;margin:0;top:0;right:200px;bottom:0;left:0;background-color:#eee;color:#666;z-index:100000000;}#djDebug .panelContent>div{border-bottom:1px solid #ddd;}#djDebug .djDebugPanelTitle{position:absolute;background-color:#ffc;color:#666;padding-left:20px;top:0;right:0;left:0;height:50px;}#djDebug .djDebugPanelTitle code{display:inline;font-size:inherit;}#djDebug .djDebugPanelContent{position:absolute;top:50px;right:0;bottom:0;left:0;height:auto;padding:5px 0 0 20px;}#djDebug .djDebugPanelContent .scroll{height:100%;overflow:auto;display:block;padding:0 10px 0 0;}#djDebug h3{font-size:24px;font-weight:normal;line-height:50px;}#djDebug h4{font-size:20px;font-weight:bold;margin-top:.8em;}#djDebug .panelContent table{border:1px solid #ccc;border-collapse:collapse;width:100%;background-color:#fff;display:block;margin-top:.8em;overflow:auto;}#djDebug .panelContent tbody td,#djDebug .panelContent tbody th{vertical-align:top;padding:2px 3px;}#djDebug .panelContent thead th{padding:1px 6px 1px 3px;text-align:left;font-weight:bold;font-size:14px;}#djDebug .panelContent tbody th{width:12em;text-align:right;color:#666;padding-right:.5em;}#djDebug .djTemplateHideContextDiv{background-color:#fff;}#djDebug .panelContent .djDebugClose{text-indent:-9999999px;display:block;position:absolute;top:4px;right:15px;height:40px;width:40px;background:url(http://github.com/img/close.png) no-repeat center center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7dJREFUeNqsWM1PE0EU3+7ShdJKoTRA8UYgIUKM3rmaEI0euXsw0YMHIZEbxBijEiIHLkb/A44SDYlXzkYPGBM+ri1NWz7aUmhp6+9tps10mLfdfrzkl2535r39zc77mvUdHh4abUoUCAD3xP/fQAFItWJkYmLC+e1p8eGPgQcC08ycf8BPgW2vhr0SeQa8AWIe5k4LvATiwCrwtZmS2WT8IfAL+OKRhCoxoftH2GqLyBLwHbhvdC53ha2lVrfmE/DKzbLP5yubplnt7e310f+rq6tqpVLxVatVy0VtHbgNLHohsupGIhQKFQG7v79f+8CLiwsjl8sVAZsxQbYTwFrDwpTwpaj4ptPu6+vLDw4OBkHA014QobOzs3yhUAgyUx4BP2rhq/rIe53GwMBAeXx83DMJEpobi8WCpMtMWeOc9TkwoyMRjUattrMedBkyM+KZN4isqDMDgUCuExIyGbKlGVpRiSzo8kQ4HA4ZXRLGVuzo6GhBJjKviw6dT5TLZSOTyRinp6cGQrV+n67hnEY6nTaur6+1PkM2NWTm5fCd0xDRhh89CKHpXCMijLGxMef6+PjYiRSSUqlUv6/arOlKMlcjQlV0qsGDTZPehpYIxurXRCSRSFByq5NQ56hvhWwj8cm2p7A9UdKYVBX8fn+F2+tIJGIgmzaQkUnYtm0MDw+zvsLYniQiEc2q/WxxwmqRHxrISA9xxiyLDzTGdsRsJwJoK3QPo3vctnhpAzLqTexhiVOg6JAdU5bLy0vHZ+Ro8mg7Q0QO1LvwenZZJycnN3yCIPsMRRYnjO0DU/SY+wprW7fiWmjKJMgnUIcafEaeoxZCJWJI9lH4UjV2u6pSPp/XJR9jaGiIKrERDAbrjllzYOQJZ4zm6ISxuSsntB3gqTyazWZtMowa0aBFb4HegC6aRkZG2C2hLSObmqEdOcVvUdJUZyBlZ7tVa1ASdEUvjW3ZUqvvO82e3kqlUuVOSZANvBFd0fugawM2VKclOT8/tzohQ7pkgzn/rHNdvLbLJkPxeDzHRRIXIaTDkCB57XacoJPZW8bZQpSskslk0Y0QjdEcmstsB8myegrsYbqmENfJU3dOpZyOEwjdCqLIWUyxWKygVzHFccJ2eVkbar/qdq5ZFC3/R5dUb6EBsqQmyEtLuawj0eykRwpPgL0uRO+esLXW7tmX9nEWeAEk2yCQFLqzzb4MeK3Zn4FRsapNEXqGy2eJTTF3VOh27bOE/Ia2pQ81YeCO+P+XknGrH2pq8l+AAQDv/n2Gmq99BgAAAABJRU5ErkJggg==);}#djDebug .panelContent .djDebugClose:hover{background-image:url(http://github.com/img/close_hover.png);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCVJREFUeNqsWG1IU1EYfjfd0i1bTc2WFTW3tG2aFWlEf4KkMIrCvhH6U9DnjxTyV0ZEXxIVGBH1JyKIPiBK8kf1syCKwu8M3VQsK7OV6ba2udZ7bmd6d+85827zhYftnnPe5z73nvc95z1X5XQ6IUHLQqQjiul1E8KHGIqHxGw2C7+pcd58E6KMooAzphPxnKJBKbFSIfsRpxAmBWMLKI4iviBOIm5O5qSepL8c8R5xQ6EIqZmobzPlSkhINeIpYhkkb0WUqzreqbmEOBaTOjQGf/0+CHz7Klxqc+aAehrGbkrM2b6IyEVUKRFyMpYI38dW8HS0gc/5kdmfnpcPepsD0vMLeRSEm6ivEzeqJOlLsuIJyzs40Au/Xr+CP64uRXORZraCoXQ1aHMX8YZsRDRG0lcqpA1hl3p4mt+C+/nThILDWLYR9EtXsrraEY6IEHGwHmCJGG16k7AIYsTX0/KO1WWn95QJqZWODHxyws8XjUmnjPtZg8DFsFqpkB2sdWL4zWuYKuNwmVwu1w6xkA2s7GAFpnaGAcxbd8H8snJQa7QTUZ+aCrlr10NexR5Iy8yW+REuwsmwDeL0XSOLjfYW5pNZtldC9orS/4FoK4LWa5cgHP4L9n1HILNoudCuM82F1qsXgcXJSOs1ESFkF7WKe8JBfxifQMVMY8/o+P+Z+TYoPFwNoYAfMh3FE2udz8d8CPJWCLdKM03MbcXpySJTY5EtmsNuFW+uex4/gJFe14SYxUuiRHi/fIaue7f5CzKb20KEGKWtYx4Pl2jM54WW+joY6euR9Xm/DkDT5bMQHB3h+7O5jepEMiAUDDBvRtpCfn9CWUWEuGUbkF7PdSDZQQLTaC+S9Rks+VB4qCoqmxRyu4mQbmlrisEY5hEtLN8ynh2RmBjt74sK4LyK3VwhHO5uNa0xoxYMEtVk02KZbk7uxB400C/ERPOVc1EBrMsxcTdCScYQ68L9ZiiyjryUprC+wM5c0PoaH4EmIwMCv4eh6+6t8VghAWzdtVdYzHoaHjKFEE6GvRTvvmSZvScd8f3hHfjT2z0lS3zaQgtkb6tkde3EN3I/kjX3ET9kwVdSOmV7jaF0Fav5BxEh3X3PyPaVBVaYta48aRGkJtHOt7C6zrPKgMvSoCU2vbhEIEpGBKcw6qQ1LLNmrWaVioRIk2kUtvK4SsWSVaCdl8cbcjxW8UxOZqcRJ2TThITZCO+HZvB2dsQsnnUFNtAtWRpLZ430FKjinH0VHSdCXg8EhwaFS03WbEjR6Sc7TkRCoErp2beKlvwX+EtkKqRkGATEYTXSY4SSkx5x2Eyr7WStnXLVJXr2JfPoQBxEDCYgYJD6Oib7MqC0DLiOyKFPVU9TD2J8lqinY3Oo75R9lhC/oQbRhxoSIDZ63UGK9Xg/1ETsnwADAJrrTk7nZiozAAAAAElFTkSuQmCC);}#djDebug .panelContent .djDebugClose.djDebugBack{background-image:url(http://github.com/img/back.png);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA7FJREFUeNrMWM1PE0EU3+7S7bZdKSFNSIFgJJAgINE7VxOi0SP/gYkePAiJ3CDGGJUQOXAx+h9wlGhIvHI2fgQ08mEkkjZNIZR2+7Httr63zMoyOzPdthx8yS+bnZn3m9/OvDcfG9jd3ZVatDggDLhO3j8DioBMMySDg4P2s6PJzu8AbhKMcNr8AHwkWPNL7FfIPcATQMJH2xGCh4AkYAHwtpGT3KD+FuAT4I1PEbQliO8XwtWSkFnAe8ANqX2bIFyzzU7NK8AjEXMgELBkWa6HQqEAvpfL5XqtVgvU63VF4LYE6APM+BGyIBKh67oJUCORCLPDQqEg5fN5E6ByKJA7BVg892FU+mJWvGN5a5pmdHV1RUGAr7lAQdls1igWi1FOk9uAD0760jHynOXR2dlp9fb2+haBhm0TiUQUfTlNFnnBeh8wxhIRj8eVllc98OWIGSN9eoTM0y3D4XC+HRFuMcjFqJqnhUyz1olYLKa730uVCrMjXrmIy1ln9vb2pt1CpljZQcdE1ihIW/sHHrayWbHLq1ZNGDPIyaiacguZZAhhph+K+fpr39Ppqcg/wtHhcE46QnAXHT4XwbJssjJECwbtp1EqS99AjNNpSD0r//77wH7yRgW5qeJhmJ44ChmiHYLBIHOMY9GINDrQ9y8uHDEoEMs7FNl+x5HhieFwD6GQbs8GJMtBbtCBmIkrA3anOD0YH2ci+21RWJ4vldibG5u7W5b+E8O95oguhM0LP1PhBauTOfj1Tnxg+c+DpD0aOFq6pjE75HAfoZAdunGlUpH9iLh6uc9+nsaFt5xlHO4dmZwxtynVKm5avIUrqoWkaxAnTmdOnGC5SARyIjdVvA0bX8ZRt0E7GYZhNgpWb0b1c0UIODfcC9o6XZvL5VTYwrnp6zaMEyd9eYZcyMmoWncLWQUcemIim82xFjTeQiey4+Nj1qZ3CNOySu++zxhzeimTyVjtpiZywIiwNr0XrGPAMh20aCcnJ0o7YtAXOTj3nyXeKZ55ykaiZDKZZ2WS6KiIPhwRaI9F1wm8mT3lBJueSqWkdDptigRhHbbBtpzpQJujb4EdnFOTzjvJ4+kcYF8nFEWpqapqf4xpmjXLsmRynVAFg7VMn1dF95oZcuR/yWPDDqvVKsIp8nOknGOJaHTTQ4e7gM0L2NM2Cddiq3dfnMdxwANAugUBaeI73ujPgN9jwGtAD/mqFZJ6kuC3xApp20N8L+y3hHuE1lw/amKAUfK+hYtxsz9qHPsrwACHs5P9Qys/0AAAAABJRU5ErkJggg==);}#djDebug .panelContent .djDebugClose.djDebugBack:hover{background-image:url(http://github.com/img/back_hover.png);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA6hJREFUeNrMWF1Ik1EYPtt0pkuGa/aDJTY3nNvSfkglvEwQpa7CbrosKAghBedNikKgEgVe1m03SVeJXmSXBmIozpxpuiUS/eicSc75m73vx/nGt7Nzvm8/BR14+Pjec85znp297znv++kCgQBJs1kBuYDz9H0KEAWEUiGx2WzSMyvFxa8B6iicgjFzgBGKwWSJdUnuyB1AF+BUisK/AToBz7V2RK9B1ACYBDxLQwShc3Cuj3IJm5qQVsAQ4ALJvFVQrlbRAJGPPAE8UKU+2Ce/d6Jk98d36dV44iTR54DvGlTd7jGgCNCSjJBONRHR+Q8kMjtDooF5bn9uaRkxuTwkt+yciAK5UX2fmrNiVLzmzd77ukR+jr0j28GFpP6LIzYHMVdfIcais6IhjYBh2VlZITMANzsj4ntPwiNDaTmHpa6RmCov87r8AA8vau7yRGxOjactAhvOjUxP8LrcdM0EIR3syN0vAbL+djjjkAm/GZS4OK2DFdLEOyc2xsfi/3frcb4/COxqXPI5EwwGm5RC6nnRwTpmgdNNKpq9iZFiLZTsWXkmoRDkQk5Oq1cKqU3wDf80lxDFXGzvTlhUFqm2OwLOWlkI3qIOZc/h3s4hL0y3QyvSM7+4hFxq74otGg2txuyVzW3SU7QryM2YHfD3WFGIPeHQ3AjreETrc34y3d8b8wtZDApE+/5WRHrHnRGJEXDbUYiFte5HIsLtRTGTPR3Sovj3oH8oRaIotB8t5h9kAm6LnvwnDe+acILRJPZ+ZeTgr5f9A+2u2/el3cDd2lz+zF+Qzx1GIYus1WC2oEPptET4+vukp+wXrJ3XBNyLeppjxoWILjtHh5eW6OD6tbxEJno6Y4vJfoJ2NRHIidyMeQHum5DsI6PsJJPTremsvIgSiVDhHFXevnjMvmRHrL56QbaXFuN2hLeQyB43psROCm/c4nXdhB0ZkHdkALDGjjBXVXMPNNFBp9bM1TU88xqKYG/fR+woY7GDFFxtyDg0MScxnrHzunpEGdon9rj/h4kR1j/logKrlZcqIlH2MYt0laeUKlbVEOPpUtGQNq0CqxvwUDR766OPbM3NqibPeU4XySuvVNPplZNnUc6aUjlxACG8Rx01GyLHgKmBQbOKfaosJ7Rq3xaa8vcK6WBBQ75ZQgrNy5YRyVR6OOE6zbYzbX7K1ZdOyUloNe8B3AOspCFghc71aH0Z0KX4feSvf5bQctZkP9Sgg7jo+ywm6+l+qPkjwADNS26fFM/O1QAAAABJRU5ErkJggg==);}#djDebug .panelContent dt,#djDebug .panelContent dd{display:block;}#djDebug .panelContent dt{margin-top:.75em;}#djDebug .panelContent dd{margin-left:10px;}#djDebug a.toggleTemplate{padding:4px;background-color:#bbb;-moz-border-radius:3px;-webkit-border-radius:3px;}#djDebug a.toggleTemplate:hover{padding:4px;background-color:#444;color:#ffe761;-moz-border-radius:3px;-webkit-border-radius:3px;}#djDebug a.djTemplateShowContext,#djDebug a.djTemplateShowContext span.toggleArrow{color:#999;}#djDebug a.djTemplateShowContext:hover,#djDebug a.djTemplateShowContext:hover span.toggleArrow{color:#000;cursor:pointer;}#djDebug .djDebugSqlWrap{position:relative;}#djDebug .djDebugCollapsed{display:none;text-decoration:none;color:#333;}#djDebug .djDebugUncollapsed{color:#333;text-decoration:none;}#djDebug .djUnselected{display:none;}#djDebug tr.djHiddenByDefault{display:none;}#djDebug tr.djSelected{display:table-row;}#djDebug .djDebugSql{z-index:100000002;}#djDebug .djSQLDetailsDiv tbody th{text-align:left;}#djDebug .djSqlExplain td{white-space:pre;}#djDebug span.djDebugLineChart{background-color:#777;height:3px;position:absolute;bottom:0;top:0;left:0;display:block;z-index:1000000001;}#djDebug span.djDebugLineChartWarning{background-color:#900;}#djDebug .highlight{color:#000;}#djDebug .highlight .err{color:#000;}#djDebug .highlight .g{color:#000;}#djDebug .highlight .k{color:#000;font-weight:bold;}#djDebug .highlight .o{color:#000;}#djDebug .highlight .n{color:#000;}#djDebug .highlight .mi{color:#000;font-weight:bold;}#djDebug .highlight .l{color:#000;}#djDebug .highlight .x{color:#000;}#djDebug .highlight .p{color:#000;}#djDebug .highlight .m{color:#000;font-weight:bold;}#djDebug .highlight .s{color:#333;}#djDebug .highlight .w{color:#888;}#djDebug .highlight .il{color:#000;font-weight:bold;}#djDebug .highlight .na{color:#333;}#djDebug .highlight .nt{color:#000;font-weight:bold;}#djDebug .highlight .nv{color:#333;}#djDebug .highlight .s2{color:#333;}#djDebug .highlight .cp{color:#333;}#djDebug .timeline{width:30%;}#djDebug .djDebugTimeline{position:relative;height:100%;min-height:100%;}#djDebug div.djDebugLineChart{position:absolute;left:0;right:0;top:0;bottom:0;vertical-align:middle;}#djDebug div.djDebugLineChart strong{text-indent:-10000em;display:block;font-weight:normal;vertical-align:middle;background-color:#ccc;}#djDebug div.djDebugLineChartWarning strong{background-color:#900;}#djDebug .djDebugInTransaction div.djDebugLineChart strong{background-color:#d3ff82;}#djDebug .djDebugStartTransaction div.djDebugLineChart strong{border-left:1px solid #94b24d;}#djDebug .djDebugEndTransaction div.djDebugLineChart strong{border-right:1px solid #94b24d;}#djDebug .djDebugHover div.djDebugLineChart strong{background-color:#000;}#djDebug .djDebugInTransaction.djDebugHover div.djDebugLineChart strong{background-color:#94b24d;}#djDebug .panelContent ul.stats{position:relative;}#djDebug .panelContent ul.stats li{width:30%;float:left;}#djDebug .panelContent ul.stats li strong.label{display:block;}#djDebug .panelContent ul.stats li span.color{height:12px;width:3px;display:inline-block;}#djDebug .panelContent ul.stats li span.info{display:block;padding-left:5px;}#djDebug .panelcontent thead th{white-space:nowrap;}#djDebug .djDebugRowWarning .time{color:red;}#djdebug .panelcontent table .toggle{width:14px;padding-top:3px;}#djdebug .panelcontent table .actions{min-width:70px;}#djdebug .panelcontent table .color{width:3px;}#djdebug .panelcontent table .color span{width:3px;height:12px;overflow:hidden;padding:0;}#djDebug .djToggleSwitch{text-decoration:none;border:1px solid #999;height:12px;width:12px;line-height:12px;text-align:center;color:#777;display:inline-block;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFF',endColorstr='#DCDCDC');background:-webkit-gradient(linear,left top,left bottom,from(#FFF),to(#DCDCDC));background:-moz-linear-gradient(center top,#FFF 0,#DCDCDC 100%) repeat scroll 0 0 transparent;}#djDebug .djNoToggleSwitch{height:14px;width:14px;display:inline-block;}#djDebug .djSQLDetailsDiv{margin-top:.8em;}#djDebug pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;color:#555;border:1px solid #ccc;border-collapse:collapse;background-color:#fff;display:block;overflow:auto;padding:2px 3px;margin-bottom:3px;font-family:Consolas,Monaco,"Bitstream Vera Sans Mono","Lucida Console",monospace;}#djDebug .stack span{color:#000;font-weight:bold;}#djDebug .stack span.path{color:#777;font-weight:normal;}#djDebug .stack span.code{font-weight:normal;}@media print{#djDebug{display:none;}} \ No newline at end of file diff --git a/debug_toolbar/media/debug_toolbar/img/back.png b/debug_toolbar/media/debug_toolbar/img/back.png deleted file mode 100644 index 6ac8a52fc..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/back.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/back_hover.png b/debug_toolbar/media/debug_toolbar/img/back_hover.png deleted file mode 100644 index 452b6732f..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/back_hover.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/close.png b/debug_toolbar/media/debug_toolbar/img/close.png deleted file mode 100644 index c0e81357d..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/close.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/close_hover.png b/debug_toolbar/media/debug_toolbar/img/close_hover.png deleted file mode 100644 index 5b2c812a7..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/close_hover.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/djdt_vertical.png b/debug_toolbar/media/debug_toolbar/img/djdt_vertical.png deleted file mode 100644 index 000c60fa1..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/djdt_vertical.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/dot.gif b/debug_toolbar/media/debug_toolbar/img/dot.gif deleted file mode 100644 index 9009f29eb..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/dot.gif and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/indicator.png b/debug_toolbar/media/debug_toolbar/img/indicator.png deleted file mode 100644 index 1a2c5781d..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/indicator.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/img/panel_bg.png b/debug_toolbar/media/debug_toolbar/img/panel_bg.png deleted file mode 100644 index 73add1794..000000000 Binary files a/debug_toolbar/media/debug_toolbar/img/panel_bg.png and /dev/null differ diff --git a/debug_toolbar/media/debug_toolbar/js/jquery.cookie.js b/debug_toolbar/media/debug_toolbar/js/jquery.cookie.js deleted file mode 100644 index 6df1faca2..000000000 --- a/debug_toolbar/media/debug_toolbar/js/jquery.cookie.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Cookie plugin - * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ - -/** - * Create a cookie with the given name and value and other optional parameters. - * - * @example $.cookie('the_cookie', 'the_value'); - * @desc Set the value of a cookie. - * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); - * @desc Create a cookie with all available options. - * @example $.cookie('the_cookie', 'the_value'); - * @desc Create a session cookie. - * @example $.cookie('the_cookie', null); - * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain - * used when the cookie was set. - * - * @param String name The name of the cookie. - * @param String value The value of the cookie. - * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. - * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. - * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. - * If set to null or omitted, the cookie will be a session cookie and will not be retained - * when the the browser exits. - * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). - * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). - * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will - * require a secure protocol (like HTTPS). - * @type undefined - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ - -/** - * Get the value of a cookie with the given name. - * - * @example $.cookie('the_cookie'); - * @desc Get the value of a cookie. - * - * @param String name The name of the cookie. - * @return The value of the cookie. - * @type String - * - * @name $.cookie - * @cat Plugins/Cookie - * @author Klaus Hartl/klaus.hartl@stilbuero.de - */ -jQuery.cookie = function(name, value, options) { - if (typeof value != 'undefined') { // name and value given, set cookie - options = options || {}; - if (value === null) { - value = ''; - options.expires = -1; - } - var expires = ''; - if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { - var date; - if (typeof options.expires == 'number') { - date = new Date(); - date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); - } else { - date = options.expires; - } - expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE - } - // CAUTION: Needed to parenthesize options.path and options.domain - // in the following expressions, otherwise they evaluate to undefined - // in the packed version for some reason... - var path = options.path ? '; path=' + (options.path) : ''; - var domain = options.domain ? '; domain=' + (options.domain) : ''; - var secure = options.secure ? '; secure' : ''; - document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); - } else { // only name given, get cookie - var cookieValue = null; - if (document.cookie && document.cookie != '') { - var cookies = document.cookie.split(';'); - for (var i = 0; i < cookies.length; i++) { - var cookie = jQuery.trim(cookies[i]); - // Does this cookie string begin with the name we want? - if (cookie.substring(0, name.length + 1) == (name + '=')) { - cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); - break; - } - } - } - return cookieValue; - } -}; \ No newline at end of file diff --git a/debug_toolbar/media/debug_toolbar/js/jquery.js b/debug_toolbar/media/debug_toolbar/js/jquery.js deleted file mode 100644 index 26cbb476d..000000000 --- a/debug_toolbar/media/debug_toolbar/js/jquery.js +++ /dev/null @@ -1,6078 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.1 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Jan 25 19:43:33 2010 -0500 - */ -(function( window, undefined ) { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwnProperty = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - indexOf = Array.prototype.indexOf; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; - } - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - if ( elem ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $("TAG") - } else if ( !context && /^\w+$/.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return jQuery( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.isArray( selector ) ? - this.setArray( selector ) : - jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.4.1", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery( elems || null ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || jQuery(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging object literal values or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { - var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src - : jQuery.isArray(copy) ? [] : {}; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // Handle when the DOM is ready - ready: function() { - // Make sure that the DOM is not already loaded - if ( !jQuery.isReady ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 13 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Reset the list of functions - readyList = null; - } - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyBound ) { - return; - } - - readyBound = true; - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - return jQuery.ready(); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor - && !hasOwnProperty.call(obj, "constructor") - && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwnProperty.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") - .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); - - } else { - jQuery.error( "Invalid JSON: " + data ); - } - }, - - noop: function() {}, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - - if ( jQuery.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction(object); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} - } - } - - return object; - }, - - trim: function( text ) { - return (text || "").replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = []; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - if ( !inv !== !callback( elems[ i ], i ) ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var ret = [], value; - - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - proxy: function( fn, proxy, thisObject ) { - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } - } - - if ( !proxy && fn ) { - proxy = function() { - return fn.apply( thisObject || this, arguments ); - }; - } - - // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } - - // So proxy can be declared as an argument - return proxy; - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - browser: {} -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - return indexOf.call( array, elem ); - }; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch( error ) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -function evalScript( i, elem ) { - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : null; -} - -function now() { - return (new Date).getTime(); -} -(function() { - - jQuery.support = {}; - - var root = document.documentElement, - script = document.createElement("script"), - div = document.createElement("div"), - id = "script" + now(); - - div.style.display = "none"; - div.innerHTML = "
a"; - - var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return; - } - - jQuery.support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText insted) - style: /red/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: div.getElementsByTagName("input")[0].value === "on", - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, - - // Will be defined later - checkClone: false, - scriptEval: false, - noCloneEvent: true, - boxModel: null - }; - - script.type = "text/javascript"; - try { - script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e) {} - - root.insertBefore( script, root.firstChild ); - - // Make sure that the execution of code works by injecting a script - // tag with appendChild/createTextNode - // (IE doesn't support this, fails, and uses .text instead) - if ( window[ id ] ) { - jQuery.support.scriptEval = true; - delete window[ id ]; - } - - root.removeChild( script ); - - if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - jQuery.support.noCloneEvent = false; - div.detachEvent("onclick", click); - }); - div.cloneNode(true).fireEvent("onclick"); - } - - div = document.createElement("div"); - div.innerHTML = ""; - - var fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; - - // Figure out if the W3C box model works as expected - // document.body must exist before we can do this - jQuery(function() { - var div = document.createElement("div"); - div.style.width = div.style.paddingLeft = "1px"; - - document.body.appendChild( div ); - jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - document.body.removeChild( div ).style.display = 'none'; - div = null; - }); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; - - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - el = null; - - return isSupported; - }; - - jQuery.support.submitBubbles = eventSupported("submit"); - jQuery.support.changeBubbles = eventSupported("change"); - - // release memory in IE - root = script = div = all = a = null; -})(); - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; -var expando = "jQuery" + now(), uuid = 0, windowData = {}; -var emptyObject = {}; - -jQuery.extend({ - cache: {}, - - expando:expando, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - "object": true, - "applet": true - }, - - data: function( elem, name, data ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache; - - // Handle the case where there's no name immediately - if ( !name && !id ) { - return null; - } - - // Compute a unique ID for the element - if ( !id ) { - id = ++uuid; - } - - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - elem[ expando ] = id; - thisCache = cache[ id ] = jQuery.extend(true, {}, name); - } else if ( cache[ id ] ) { - thisCache = cache[ id ]; - } else if ( typeof data === "undefined" ) { - thisCache = emptyObject; - } else { - thisCache = cache[ id ] = {}; - } - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) { - elem[ expando ] = id; - thisCache[ name ] = data; - } - - return typeof name === "string" ? thisCache[ name ] : thisCache; - }, - - removeData: function( elem, name ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - - // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); - } - } - - // Otherwise, we want to remove all of the element's data - } else { - // Clean up the element expando - try { - delete elem[ expando ]; - } catch( e ) { - // IE has trouble directly removing the expando - // but it's ok with using removeAttribute - if ( elem.removeAttribute ) { - elem.removeAttribute( expando ); - } - } - - // Completely remove the data cache - delete cache[ id ]; - } - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - if ( typeof key === "undefined" && this.length ) { - return jQuery.data( this[0] ); - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - } - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } else { - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { - jQuery.data( this, key, value ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; - } - - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; - } - - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data) ); - - } else { - q.push( data ); - } - - return q; - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), fn = queue.shift(); - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function( i, elem ) { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - } -}); -var rclass = /[\n\t]/g, - rspace = /\s+/, - rreturn = /\r/g, - rspecialurl = /href|src|style/, - rtype = /(button|input)/i, - rfocusable = /(button|input|object|select|textarea)/i, - rclickable = /^(a|area)$/i, - rradiocheck = /radio|checkbox/; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name, fn ) { - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } - }); - }, - - addClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspace ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className ) { - elem.className = value; - - } else { - var className = " " + elem.className + " "; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - elem.className += " " + classNames[c]; - } - } - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split(rspace); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); - } - elem.className = className.substring(1, className.length - 1); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, i = 0, self = jQuery(this), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery.data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - } - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); - - } - - return undefined; - } - - var isFunction = jQuery.isFunction(value); - - return this.each(function(i) { - var self = jQuery(this), val = value; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call(this, i, self.val()); - } - - // Typecast each time if the value is a Function and the appended - // value is therefore different each time. - if ( typeof val === "number" ) { - val += ""; - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - - // If applicable, access the attribute via the DOM 0 way - if ( name in elem && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - elem[ name ] = value; - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; - } - - // elem is actually elem.style ... set the style - // Using attr for specific style information is now deprecated. Use style insead. - return jQuery.style( elem, name, value ); - } -}); -var fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); -}; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // if data is passed, bind to handler - if ( data !== undefined ) { - // Create temporary function pointer to original handler - var fn = handler; - - // Create unique handler function, wrapped around original handler - handler = jQuery.proxy( fn ); - - // Store data in unique handler - handler.data = data; - } - - // Init the element's event structure - var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ), - handle = jQuery.data( elem, "handle" ), eventHandle; - - if ( !handle ) { - eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - - handle = jQuery.data( elem, "handle", eventHandle ); - } - - // If no handle is found then we must be trying to bind to one of the - // banned noData elements - if ( !handle ) { - return; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native - // event in IE. - handle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split( /\s+/ ); - - var type, i = 0; - - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - - if ( i > 1 ) { - handler = jQuery.proxy( handler ); - - if ( data !== undefined ) { - handler.data = data; - } - } - - handler.type = namespaces.slice(0).sort().join("."); - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = this.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = {}; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, handle, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, handle ); - } - } - } - - if ( special.add ) { - var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); - if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { - modifiedHandler.guid = modifiedHandler.guid || handler.guid; - modifiedHandler.data = modifiedHandler.data || handler.data; - modifiedHandler.type = modifiedHandler.type || handler.type; - handler = modifiedHandler; - } - } - - // Add the function to the element's handler list - handlers[ handler.guid ] = handler; - - // Keep track of which events have been used, for global triggering - this.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - var events = jQuery.data( elem, "events" ), ret, type, fn; - - if ( events ) { - // Unbind all events for the element - if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) { - for ( type in events ) { - this.remove( elem, type + (types || "") ); - } - } else { - // types is actually an event object here - if ( types.type ) { - handler = types.handler; - types = types.type; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(/\s+/); - var i = 0; - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - var all = !namespaces.length, - cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ), - namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"), - special = this.special[ type ] || {}; - - if ( events[ type ] ) { - // remove the given handler for the given type - if ( handler ) { - fn = events[ type ][ handler.guid ]; - delete events[ type ][ handler.guid ]; - - // remove all handlers for the given type - } else { - for ( var handle in events[ type ] ) { - // Handle the removal of namespaced events - if ( all || namespace.test( events[ type ][ handle ].type ) ) { - delete events[ type ][ handle ]; - } - } - } - - if ( special.remove ) { - special.remove.call( elem, namespaces, fn); - } - - // remove generic event handler if no more handlers exist - for ( ret in events[ type ] ) { - break; - } - if ( !ret ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, jQuery.data( elem, "handle" ), false ); - } else if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) ); - } - } - ret = null; - delete events[ type ]; - } - } - } - } - - // Remove the expando if it's no longer used - for ( ret in events ) { - break; - } - if ( !ret ) { - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.elem = null; - } - jQuery.removeData( elem, "events" ); - jQuery.removeData( elem, "handle" ); - } - } - }, - - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { - // Event object or event type - var type = event.type || event, - bubbling = arguments[3]; - - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[expando] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( this.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); - } - - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.apply( elem, data ); - } - - var parent = elem.parentNode || elem.ownerDocument; - - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - } - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); - - } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, - isClick = jQuery.nodeName(target, "a") && type === "click"; - - if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { - try { - if ( target[ type ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + type ]; - - if ( old ) { - target[ "on" + type ] = null; - } - - this.triggered = true; - target[ type ](); - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( old ) { - target[ "on" + type ] = old; - } - - this.triggered = false; - } - } - }, - - handle: function( event ) { - // returned undefined or false - var all, handlers; - - event = arguments[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; - - // Namespaced event handlers - var namespaces = event.type.split("."); - event.type = namespaces.shift(); - - // Cache this now, all = true means, any handler - all = !namespaces.length && !event.exclusive; - - var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); - - handlers = ( jQuery.data(this, "events") || {} )[ event.type ]; - - for ( var j in handlers ) { - var handler = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace.test(handler.type) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handler; - event.data = handler.data; - - var ret = handler.apply( this, arguments ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - - } - } - - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { - event.which = event.charCode || event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( proxy, data, namespaces, live ) { - jQuery.extend( proxy, data || {} ); - - proxy.guid += data.selector + data.live; - data.liveProxy = proxy; - - jQuery.event.add( this, data.live, liveHandler, data ); - - }, - - remove: function( namespaces ) { - if ( namespaces.length ) { - var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); - - jQuery.each( (jQuery.data(this, "events").live || {}), function() { - if ( name.test(this.type) ) { - remove++; - } - }); - - if ( remove < 1 ) { - jQuery.event.remove( this, namespaces[0], liveHandler ); - } - } - }, - special: {} - }, - beforeunload: { - setup: function( data, namespaces, fn ) { - // We only want to do this special case on windows - if ( this.setInterval ) { - this.onbeforeunload = fn; - } - - return false; - }, - teardown: function( namespaces, fn ) { - if ( this.onbeforeunload === fn ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.Event = function( src ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - // Event type - } else { - this.type = src; - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = now(); - - // Mark it as fixed - this[ expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - } - // otherwise set the returnValue property of the original event to false (IE) - e.returnValue = false; - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Traverse up the tree - while ( parent && parent !== this ) { - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - parent = parent.parentNode; - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { - break; - } - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - -jQuery.event.special.submit = { - setup: function( data, namespaces, fn ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - return trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - remove: function( namespaces, fn ) { - jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") ); - jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") ); - } -}; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - -var formElems = /textarea|input|select/i; - -function getVal( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; -} - -function testChange( e ) { - var elem = e.target, data, val; - - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - return jQuery.event.trigger( e, arguments[1], elem ); - } -} - -jQuery.event.special.change = { - filters: { - focusout: testChange, - - click: function( e ) { - var elem = e.target, type = elem.type; - - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; - - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information/focus[in] is not needed anymore - beforeactivate: function( e ) { - var elem = e.target; - - if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) { - jQuery.data( elem, "_change_data", getVal(elem) ); - } - } - }, - setup: function( data, namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - }, - remove: function( namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - } -}; - -var changeFilters = jQuery.event.special.change.filters; - -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); -} - -// Create "bubbling" focus and blur events -if ( document.addEventListener ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - jQuery.event.special[ fix ] = { - setup: function() { - this.addEventListener( orig, handler, true ); - }, - teardown: function() { - this.removeEventListener( orig, handler, true ); - } - }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.handle.call( this, e ); - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = name === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - return type === "unload" && name !== "one" ? - this.one( type, data, fn ) : - this.each(function() { - jQuery.event.add( this, type, handler, data ); - }); - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - return this; - } - - return this.each(function() { - jQuery.event.remove( this, type, fn ); - }); - }, - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, i = 1; - - // link all the functions, so any of them can unbind this click handler - while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); - } - - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn ) { - var type, i = 0; - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split( /\s+/ ); - - while ( (type = types[ i++ ]) != null ) { - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support - type; - - if ( name === "live" ) { - // bind live handler - jQuery( this.context ).bind( liveConvert( type, this.selector ), { - data: data, selector: this.selector, live: type - }, fn ); - - } else { - // unbind live handler - jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); - } - } - - return this; - } -}); - -function liveHandler( event ) { - var stop, elems = [], selectors = [], args = arguments, - related, match, fn, elem, j, i, l, data, - live = jQuery.extend({}, jQuery.data( this, "events" ).live); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.button && event.type === "click" ) { - return; - } - - for ( j in live ) { - fn = live[j]; - if ( fn.live === event.type || - fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) { - - data = fn.data; - if ( !(data.beforeFilter && data.beforeFilter[event.type] && - !data.beforeFilter[event.type](event)) ) { - selectors.push( fn.selector ); - } - } else { - delete live[j]; - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - for ( j in live ) { - fn = live[j]; - elem = match[i].elem; - related = null; - - if ( match[i].selector === fn.selector ) { - // Those two events require additional checking - if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) { - related = jQuery( event.relatedTarget ).closest( fn.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, fn: fn }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - event.currentTarget = match.elem; - event.data = match.fn.data; - if ( match.fn.apply( match.elem, args ) === false ) { - stop = false; - break; - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - window.attachEvent("onunload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function(){ - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function(selector, context, results, seed) { - results = results || []; - var origContext = context = context || document; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; - } - - if ( context ) { - var ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray(set); - } else { - prune = false; - } - - while ( parts.length ) { - var cur = parts.pop(), pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - } else if ( context && context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - } else { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function(results){ - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); - } - } - } - } - - return results; -}; - -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); -}; - -Sizzle.find = function(expr, context, isXML){ - var set, match; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName("*"); - } - - return {set: set, expr: expr}; -}; - -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, left = match[1]; - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - } else { - curLoop[i] = false; - } - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - match: { - ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - leftMatch: {}, - attrMap: { - "class": "className", - "for": "htmlFor" - }, - attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); - } - }, - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - ">": function(checkSet, part){ - var isPartStr = typeof part === "string"; - - if ( isPartStr && !/\W/.test(part) ) { - part = part.toLowerCase(); - - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - checkFn = dirNodeCheck; - } - - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); - }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - checkFn = dirNodeCheck; - } - - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); - } - }, - find: { - ID: function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? [m] : []; - } - }, - NAME: function(match, context){ - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); - } - }, - preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - ID: function(match){ - return match[1].replace(/\\/g, ""); - }, - TAG: function(match, curLoop){ - return match[1].toLowerCase(); - }, - CHILD: function(match){ - if ( match[1] === "nth" ) { - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - PSEUDO: function(match, curLoop, inplace, result, not){ - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - if ( !inplace ) { - result.push.apply( result, ret ); - } - return false; - } - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - POS: function(match){ - match.unshift( true ); - return match; - } - }, - filters: { - enabled: function(elem){ - return elem.disabled === false && elem.type !== "hidden"; - }, - disabled: function(elem){ - return elem.disabled === true; - }, - checked: function(elem){ - return elem.checked === true; - }, - selected: function(elem){ - // Accessing this property makes selected-by-default - // options in Safari work properly - elem.parentNode.selectedIndex; - return elem.selected === true; - }, - parent: function(elem){ - return !!elem.firstChild; - }, - empty: function(elem){ - return !elem.firstChild; - }, - has: function(elem, i, match){ - return !!Sizzle( match[3], elem ).length; - }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); - }, - text: function(elem){ - return "text" === elem.type; - }, - radio: function(elem){ - return "radio" === elem.type; - }, - checkbox: function(elem){ - return "checkbox" === elem.type; - }, - file: function(elem){ - return "file" === elem.type; - }, - password: function(elem){ - return "password" === elem.type; - }, - submit: function(elem){ - return "submit" === elem.type; - }, - image: function(elem){ - return "image" === elem.type; - }, - reset: function(elem){ - return "reset" === elem.type; - }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; - }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); - } - }, - setFilters: { - first: function(elem, i){ - return i === 0; - }, - last: function(elem, i, match, array){ - return i === array.length - 1; - }, - even: function(elem, i){ - return i % 2 === 0; - }, - odd: function(elem, i){ - return i % 2 === 1; - }, - lt: function(elem, i, match){ - return i < match[3] - 0; - }, - gt: function(elem, i, match){ - return i > match[3] - 0; - }, - nth: function(elem, i, match){ - return match[3] - 0 === i; - }, - eq: function(elem, i, match){ - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; - } else if ( name === "not" ) { - var not = match[3]; - - for ( var i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { - return false; - } - } - - return true; - } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); - } - }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - if ( type === "first" ) { - return true; - } - node = elem; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - return true; - case 'nth': - var first = match[2], last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - if ( first === 0 ) { - return diff === 0; - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - ID: function(elem, match){ - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - TAG: function(elem, match){ - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - CLASS: function(elem, match){ - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - ATTR: function(elem, match){ - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ - return "\\" + (num - 0 + 1); - })); -} - -var makeArray = function(array, results) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 ); - -// Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - } else { - if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - } else { - for ( var i = 0; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.compareDocumentPosition ? -1 : 1; - } - - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( "sourceIndex" in document.documentElement ) { - sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.sourceIndex ? -1 : 1; - } - - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.ownerDocument ? -1 : 1; - } - - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -function getText( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); - } - } - - return ret; -} - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date).getTime(); - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - var root = document.documentElement; - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; - } - }; - - Expr.filter.ID = function(elem, match){ - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - root = form = null; // release memory in IE -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); - }; - } - - div = null; // release memory in IE -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); - div.innerHTML = "

"; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function(query, context, extra, seed){ - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - div = null; // release memory in IE - })(); -} - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
"; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - div = null; // release memory in IE -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -var contains = document.compareDocumentPosition ? function(a, b){ - return a.compareDocumentPosition(b) & 16; -} : function(a, b){ - return a !== b && (a.contains ? a.contains(b) : true); -}; - -var isXML = function(elem){ - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.getText = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; - -return; - -window.Sizzle = Sizzle; - -})(); -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - slice = Array.prototype.slice; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), length = 0; - - for ( var i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && jQuery.filter( selector, this ).length > 0; - }, - - closest: function( selectors, context ) { - if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], match, matches = {}, selector; - - if ( cur && selectors.length ) { - for ( var i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur }); - delete matches[selector]; - } - } - cur = cur.parentNode; - } - } - - return ret; - } - - var pos = jQuery.expr.match.POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; - - return this.map(function( i, cur ) { - while ( cur && cur.ownerDocument && cur !== context ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { - return cur; - } - cur = cur.parentNode; - } - return null; - }); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, slice.call(arguments).join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], cur = elem[dir]; - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, - rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, - rtagName = /<([\w:]+)/, - rtbody = /"; - }, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - col: [ 2, "", "
" ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and - -{% endblock %} diff --git a/example/templates/async_db.html b/example/templates/async_db.html new file mode 100644 index 000000000..771c039e3 --- /dev/null +++ b/example/templates/async_db.html @@ -0,0 +1,14 @@ + + + + + Async DB + + +

Async DB

+

+ Value + {{ user_count }} +

+ + diff --git a/example/templates/bad_form.html b/example/templates/bad_form.html new file mode 100644 index 000000000..f50662c6e --- /dev/null +++ b/example/templates/bad_form.html @@ -0,0 +1,14 @@ +{% load cache %} + + + + + Bad form + + +

Bad form test

+
+ +
+ + diff --git a/example/templates/htmx/boost.html b/example/templates/htmx/boost.html new file mode 100644 index 000000000..7153a79ee --- /dev/null +++ b/example/templates/htmx/boost.html @@ -0,0 +1,30 @@ +{% load cache %} + + + + + Index of Tests (htmx) + + + +

Index of Tests (htmx) - Page {{ page_num|default:"1" }}

+ +

+ For the debug panel to remain through page navigation, add the setting: +

+DEBUG_TOOLBAR_CONFIG = {
+  "ROOT_TAG_EXTRA_ATTRS": "hx-preserve"
+}
+      
+

+ + + + Home + + + diff --git a/example/templates/index.html b/example/templates/index.html index 6fd3a9240..4b25aefca 100644 --- a/example/templates/index.html +++ b/example/templates/index.html @@ -1,16 +1,51 @@ +{% load cache %} + - - - Index of Tests - - - -

Index of Tests

- - - + + + Index of Tests + + +

Index of Tests

+ {% cache 10 index_cache %} + +

Django Admin

+ {% endcache %} +

+ Value + {{ request.session.value|default:0 }} + + +

+ + diff --git a/example/templates/jinja2/index.jinja b/example/templates/jinja2/index.jinja new file mode 100644 index 000000000..ffd1ada6f --- /dev/null +++ b/example/templates/jinja2/index.jinja @@ -0,0 +1,12 @@ + + + + + jinja Test + + +

jinja Test

+ {{ foo }} + {% for i in range(10) %}{{ i }}{% endfor %} {# Jinja2 supports range(), Django templates do not #} + + diff --git a/example/templates/jquery/index.html b/example/templates/jquery/index.html index 61b3cbe6c..b8be63e2e 100644 --- a/example/templates/jquery/index.html +++ b/example/templates/jquery/index.html @@ -1,21 +1,18 @@ + - - - Old jQuery Test - - - - - -

jQuery Test

-

If you see this, jQuery is working.

- + + + jQuery Test + + + + +

jQuery Test

+

If you see this, jQuery is working.

+ diff --git a/example/templates/mootools/index.html b/example/templates/mootools/index.html index fa12abe33..5999b8f6a 100644 --- a/example/templates/mootools/index.html +++ b/example/templates/mootools/index.html @@ -1,19 +1,18 @@ + - - - MooTools Test - - - - - -

MooTools Test

-

If you see this, MooTools is working.

- + + + MooTools Test + + + + +

MooTools Test

+

If you see this, MooTools is working.

+ diff --git a/example/templates/prototype/index.html b/example/templates/prototype/index.html index bcc3141d5..d72f7c5f9 100644 --- a/example/templates/prototype/index.html +++ b/example/templates/prototype/index.html @@ -1,20 +1,18 @@ + - - - Prototype Test - - - - - -

Prototype Test

-

If you see this, Prototype is working.

- + + + Prototype Test + + + + +

Prototype Test

+

If you see this, Prototype is working.

+ - diff --git a/example/templates/turbo/index.html b/example/templates/turbo/index.html new file mode 100644 index 000000000..16ca9f2c6 --- /dev/null +++ b/example/templates/turbo/index.html @@ -0,0 +1,56 @@ +{% load cache %} + + + + + Index of Tests + + + +

Turbo Index - Page {{ page_num|default:"1" }}

+ +

+ For the debug panel to remain through page navigation, add the setting: +

+DEBUG_TOOLBAR_CONFIG = {
+  "ROOT_TAG_EXTRA_ATTRS": "data-turbo-permanent"
+}
+      
+

+ + +

+ Value + {{ request.session.value|default:0 }} + + +

+ + Home + + diff --git a/example/test_views.py b/example/test_views.py new file mode 100644 index 000000000..f31a8b3c8 --- /dev/null +++ b/example/test_views.py @@ -0,0 +1,12 @@ +# Add tests to example app to check how the toolbar is used +# when running tests for a project. +# See https://github.com/django-commons/django-debug-toolbar/issues/1405 + +from django.test import TestCase +from django.urls import reverse + + +class ViewTestCase(TestCase): + def test_index(self): + response = self.client.get(reverse("home")) + assert response.status_code == 200 diff --git a/example/urls.py b/example/urls.py index 25acc3168..86e6827fc 100644 --- a/example/urls.py +++ b/example/urls.py @@ -1,20 +1,52 @@ -from django.conf import settings -from django.conf.urls.defaults import * from django.contrib import admin -from django.views.generic.simple import direct_to_template +from django.urls import path +from django.views.generic import TemplateView -admin.autodiscover() - -urlpatterns = patterns('', - (r'^$', direct_to_template, {'template': 'index.html'}), - (r'^jquery/index/$', direct_to_template, {'template': 'jquery/index.html'}), - (r'^mootools/index/$', direct_to_template, {'template': 'mootools/index.html'}), - (r'^prototype/index/$', direct_to_template, {'template': 'prototype/index.html'}), - (r'^admin/', include(admin.site.urls)), +from debug_toolbar.toolbar import debug_toolbar_urls +from example.views import ( + async_db, + async_db_concurrent, + async_home, + increment, + jinja2_view, ) -if settings.DEBUG: - urlpatterns += patterns('', - (r'^media/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}) - ) - +urlpatterns = [ + path("", TemplateView.as_view(template_name="index.html"), name="home"), + path( + "bad-form/", + TemplateView.as_view(template_name="bad_form.html"), + name="bad_form", + ), + path("jinja/", jinja2_view, name="jinja"), + path("async/", async_home, name="async_home"), + path("async/db/", async_db, name="async_db"), + path("async/db-concurrent/", async_db_concurrent, name="async_db_concurrent"), + path("jquery/", TemplateView.as_view(template_name="jquery/index.html")), + path("mootools/", TemplateView.as_view(template_name="mootools/index.html")), + path("prototype/", TemplateView.as_view(template_name="prototype/index.html")), + path( + "htmx/boost/", + TemplateView.as_view(template_name="htmx/boost.html"), + name="htmx", + ), + path( + "htmx/boost/2", + TemplateView.as_view( + template_name="htmx/boost.html", extra_context={"page_num": "2"} + ), + name="htmx2", + ), + path( + "turbo/", TemplateView.as_view(template_name="turbo/index.html"), name="turbo" + ), + path( + "turbo/2", + TemplateView.as_view( + template_name="turbo/index.html", extra_context={"page_num": "2"} + ), + name="turbo2", + ), + path("admin/", admin.site.urls), + path("ajax/increment", increment, name="ajax_increment"), +] + debug_toolbar_urls() diff --git a/example/views.py b/example/views.py new file mode 100644 index 000000000..3e1cb04a6 --- /dev/null +++ b/example/views.py @@ -0,0 +1,42 @@ +import asyncio + +from asgiref.sync import sync_to_async +from django.contrib.auth.models import User +from django.http import JsonResponse +from django.shortcuts import render + + +def increment(request): + try: + value = int(request.session.get("value", 0)) + 1 + except ValueError: + value = 1 + request.session["value"] = value + return JsonResponse({"value": value}) + + +def jinja2_view(request): + return render(request, "index.jinja", {"foo": "bar"}, using="jinja2") + + +async def async_home(request): + return await sync_to_async(render)(request, "index.html") + + +async def async_db(request): + user_count = await User.objects.acount() + + return await sync_to_async(render)( + request, "async_db.html", {"user_count": user_count} + ) + + +async def async_db_concurrent(request): + # Do database queries concurrently + (user_count, _) = await asyncio.gather( + User.objects.acount(), User.objects.filter(username="test").acount() + ) + + return await sync_to_async(render)( + request, "async_db.html", {"user_count": user_count} + ) diff --git a/example/wsgi.py b/example/wsgi.py new file mode 100644 index 000000000..c43eb3dcd --- /dev/null +++ b/example/wsgi.py @@ -0,0 +1,9 @@ +"""WSGI config for example project.""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings") + +application = get_wsgi_application() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..adba4bb40 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,114 @@ +[build-system] +build-backend = "hatchling.build" +requires = [ + "hatchling", +] + +[project] +name = "django-debug-toolbar" +description = "A configurable set of panels that display various debug information about the current request/response." +readme = "README.rst" +license = { text = "BSD-3-Clause" } +authors = [ + { name = "Rob Hudson" }, +] +requires-python = ">=3.9" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Framework :: Django", + "Framework :: Django :: 4.2", + "Framework :: Django :: 5.0", + "Framework :: Django :: 5.1", + "Framework :: Django :: 5.2", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Topic :: Software Development :: Libraries :: Python Modules", +] +dynamic = [ + "version", +] +dependencies = [ + "django>=4.2.9", + "sqlparse>=0.2", +] + +urls.Changelog = "https://django-debug-toolbar.readthedocs.io/en/latest/changes.html" +urls.Documentation = "https://django-debug-toolbar.readthedocs.io/" +urls.Download = "https://pypi.org/project/django-debug-toolbar/" +urls.Homepage = "https://github.com/django-commons/django-debug-toolbar" +urls.Issues = "https://github.com/django-commons/django-debug-toolbar/issues" +urls.Source = "https://github.com/django-commons/django-debug-toolbar" + +[tool.hatch.build.targets.wheel] +packages = [ + "debug_toolbar", +] + +[tool.hatch.version] +path = "debug_toolbar/__init__.py" + +[tool.ruff] +target-version = "py39" + +fix = true +show-fixes = true +lint.extend-select = [ + "ASYNC", # flake8-async + "B", # flake8-bugbear + "C4", # flake8-comprehensions + "C90", # McCabe cyclomatic complexity + "DJ", # flake8-django + "E", # pycodestyle errors + "F", # Pyflakes + "FBT", # flake8-boolean-trap + "I", # isort + "INT", # flake8-gettext + "PGH", # pygrep-hooks + "PIE", # flake8-pie + "RUF100", # Unused noqa directive + "SLOT", # flake8-slots + "UP", # pyupgrade + "W", # pycodestyle warnings +] +lint.extend-ignore = [ + "B905", # Allow zip() without strict= + "E501", # Ignore line length violations + "UP031", # It's not always wrong to use percent-formatting +] +lint.per-file-ignores."*/migrat*/*" = [ + "N806", # Allow using PascalCase model names in migrations + "N999", # Ignore the fact that migration files are invalid module names +] +lint.isort.combine-as-imports = true +lint.mccabe.max-complexity = 16 + +[tool.coverage.html] +skip_covered = true +skip_empty = true + +[tool.coverage.run] +branch = true +parallel = true +source = [ + "debug_toolbar", +] + +[tool.coverage.paths] +source = [ + "src", + ".tox/*/site-packages", +] + +[tool.coverage.report] +# Update coverage badge link in README.rst when fail_under changes +fail_under = 94 +show_missing = true diff --git a/requirements_dev.txt b/requirements_dev.txt new file mode 100644 index 000000000..6915226fd --- /dev/null +++ b/requirements_dev.txt @@ -0,0 +1,29 @@ +# Runtime dependencies + +Django +sqlparse +Jinja2 + +# Testing + +coverage[toml] +html5lib +selenium +tox +black +django-template-partials +django-csp # Used in tests/test_csp_rendering + +# Integration support + +daphne # async in Example app + +# Documentation + +Sphinx +sphinxcontrib-spelling +sphinx-rtd-theme>1 + +# Other tools + +pre-commit diff --git a/runtests.py b/runtests.py deleted file mode 100644 index b8abc5d85..000000000 --- a/runtests.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python -import sys -from os.path import dirname, abspath -from optparse import OptionParser - -from django.conf import settings - -if not settings.configured: - settings.configure( - DATABASE_ENGINE='sqlite3', - # HACK: this fixes our threaded runserver remote tests - # DATABASE_NAME='test_sentry', - # TEST_DATABASE_NAME='test_sentry', - INSTALLED_APPS=[ - 'django.contrib.auth', - 'django.contrib.admin', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - - 'debug_toolbar', - - 'tests', - ], - ROOT_URLCONF='', - DEBUG=False, - SITE_ID=1, - ) - -from django.test.simple import run_tests - -def runtests(*test_args, **kwargs): - if 'south' in settings.INSTALLED_APPS: - from south.management.commands import patch_for_test_db_setup - patch_for_test_db_setup() - - if not test_args: - test_args = ['tests'] - parent = dirname(abspath(__file__)) - sys.path.insert(0, parent) - failures = run_tests(test_args, verbosity=kwargs.get('verbosity', 1), interactive=kwargs.get('interactive', False), failfast=kwargs.get('failfast')) - sys.exit(failures) - -if __name__ == '__main__': - parser = OptionParser() - parser.add_option('--failfast', action='http://github.com/store_true', default=False, dest='failfast') - - (options, args) = parser.parse_args() - - runtests(failfast=options.failfast, *args) \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 21cced6db..000000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[egg_info] -tag_svn_revision = false diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 index b6b94498d..3893c8d49 --- a/setup.py +++ b/setup.py @@ -1,32 +1,14 @@ -from setuptools import setup, find_packages +#!/usr/bin/env python3 -setup( - name='django-debug-toolbar', - version='0.9.0-dev', - description='A configurable set of panels that display various debug information about the current request/response.', - long_description=open('README.rst').read(), - # Get more strings from http://www.python.org/pypi?:action=list_classifiers - author='Rob Hudson', - author_email='rob@cogit8.org', - url='https://github.com/django-debug-toolbar/django-debug-toolbar', - download_url='https://github.com/django-debug-toolbar/django-debug-toolbar/downloads', - license='BSD', - packages=find_packages(exclude=('ez_setup', 'tests', 'example')), - tests_require=[ - 'django>=1.1,<1.4', - 'dingus', - ], - test_suite='runtests.runtests', - include_package_data=True, - zip_safe=False, # because we're including media that Django needs - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Web Environment', - 'Framework :: Django', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Topic :: Software Development :: Libraries :: Python Modules', - ], +import sys + +sys.stderr.write( + """\ +=============================== +Unsupported installation method +=============================== +This project no longer supports installation with `python setup.py install`. +Please use `python -m pip install .` instead. +""" ) +sys.exit(1) diff --git a/tests/additional_static/base.css b/tests/additional_static/base.css new file mode 100644 index 000000000..e5fb2f06b --- /dev/null +++ b/tests/additional_static/base.css @@ -0,0 +1,3 @@ +body { + color: green; +} diff --git a/tests/base.py b/tests/base.py new file mode 100644 index 000000000..3f40261fe --- /dev/null +++ b/tests/base.py @@ -0,0 +1,132 @@ +import contextvars +from typing import Optional + +import html5lib +from asgiref.local import Local +from django.http import HttpResponse +from django.test import ( + AsyncClient, + AsyncRequestFactory, + Client, + RequestFactory, + TestCase, + TransactionTestCase, +) + +from debug_toolbar.panels import Panel +from debug_toolbar.toolbar import DebugToolbar + +data_contextvar = contextvars.ContextVar("djdt_toolbar_test_client") + + +class ToolbarTestClient(Client): + def request(self, **request): + # Use a thread/async task context-local variable to guard against a + # concurrent _created signal from a different thread/task. + data = Local() + data.toolbar = None + + def handle_toolbar_created(sender, toolbar=None, **kwargs): + data.toolbar = toolbar + + DebugToolbar._created.connect(handle_toolbar_created) + try: + response = super().request(**request) + finally: + DebugToolbar._created.disconnect(handle_toolbar_created) + response.toolbar = data.toolbar + + return response + + +class AsyncToolbarTestClient(AsyncClient): + async def request(self, **request): + # Use a thread/async task context-local variable to guard against a + # concurrent _created signal from a different thread/task. + # In cases testsuite will have both regular and async tests or + # multiple async tests running in an eventloop making async_client calls. + data_contextvar.set(None) + + def handle_toolbar_created(sender, toolbar=None, **kwargs): + data_contextvar.set(toolbar) + + DebugToolbar._created.connect(handle_toolbar_created) + try: + response = await super().request(**request) + finally: + DebugToolbar._created.disconnect(handle_toolbar_created) + response.toolbar = data_contextvar.get() + + return response + + +rf = RequestFactory() +arf = AsyncRequestFactory() + + +class BaseMixin: + _is_async = False + client_class = ToolbarTestClient + async_client_class = AsyncToolbarTestClient + + panel: Optional[Panel] = None + panel_id = None + + def setUp(self): + super().setUp() + self._get_response = lambda request: HttpResponse() + self.request = rf.get("/") + if self._is_async: + self.request = arf.get("/") + self.toolbar = DebugToolbar(self.request, self.get_response_async) + else: + self.toolbar = DebugToolbar(self.request, self.get_response) + self.toolbar.stats = {} + + if self.panel_id: + self.panel = self.toolbar.get_panel_by_id(self.panel_id) + self.panel.enable_instrumentation() + else: + self.panel = None + + def tearDown(self): + if self.panel: + self.panel.disable_instrumentation() + super().tearDown() + + def get_response(self, request): + return self._get_response(request) + + async def get_response_async(self, request): + return self._get_response(request) + + def assertValidHTML(self, content): + parser = html5lib.HTMLParser() + parser.parseFragment(content) + if parser.errors: + msg_parts = ["Invalid HTML:"] + lines = content.split("\n") + for position, errorcode, datavars in parser.errors: + msg_parts.append(f" {html5lib.constants.E[errorcode]}" % datavars) + msg_parts.append(f" {lines[position[0] - 1]}") + raise self.failureException("\n".join(msg_parts)) + + +class BaseTestCase(BaseMixin, TestCase): + pass + + +class BaseMultiDBTestCase(BaseMixin, TransactionTestCase): + databases = {"default", "replica"} + + +class IntegrationTestCase(TestCase): + """Base TestCase for tests involving clients making requests.""" + + def setUp(self): + # The HistoryPanel keeps track of previous stores in memory. + # This bleeds into other tests and violates their idempotency. + # Clear the store before each test. + for key in list(DebugToolbar._store.keys()): + del DebugToolbar._store[key] + super().setUp() diff --git a/debug_toolbar/toolbar/__init__.py b/tests/commands/__init__.py similarity index 100% rename from debug_toolbar/toolbar/__init__.py rename to tests/commands/__init__.py diff --git a/tests/commands/test_debugsqlshell.py b/tests/commands/test_debugsqlshell.py new file mode 100644 index 000000000..9939c5ca9 --- /dev/null +++ b/tests/commands/test_debugsqlshell.py @@ -0,0 +1,36 @@ +import io +import sys + +from django.contrib.auth.models import User +from django.core import management +from django.db import connection +from django.test import TestCase +from django.test.utils import override_settings + +if connection.vendor == "postgresql": + from django.db.backends.postgresql import base as base_module +else: + from django.db.backends import utils as base_module + + +@override_settings(DEBUG=True) +class DebugSQLShellTestCase(TestCase): + def setUp(self): + self.original_wrapper = base_module.CursorDebugWrapper + # Since debugsqlshell monkey-patches django.db.backends.utils, we can + # test it simply by loading it, without executing it. But we have to + # undo the monkey-patch on exit. + command_name = "debugsqlshell" + app_name = management.get_commands()[command_name] + management.load_command_class(app_name, command_name) + + def tearDown(self): + base_module.CursorDebugWrapper = self.original_wrapper + + def test_command(self): + original_stdout, sys.stdout = sys.stdout, io.StringIO() + try: + User.objects.count() + self.assertIn("SELECT COUNT", sys.stdout.getvalue()) + finally: + sys.stdout = original_stdout diff --git a/tests/context_processors.py b/tests/context_processors.py new file mode 100644 index 000000000..69e112a39 --- /dev/null +++ b/tests/context_processors.py @@ -0,0 +1,2 @@ +def broken(request): + _read = request.non_existing_attribute diff --git a/tests/forms.py b/tests/forms.py new file mode 100644 index 000000000..916cb6612 --- /dev/null +++ b/tests/forms.py @@ -0,0 +1,9 @@ +from django import forms +from django.contrib.auth.models import User + + +class TemplateReprForm(forms.Form): + user = forms.ModelChoiceField(queryset=User.objects.all()) + + def __repr__(self): + return str(self) diff --git a/tests/loaders.py b/tests/loaders.py new file mode 100644 index 000000000..c75de7a05 --- /dev/null +++ b/tests/loaders.py @@ -0,0 +1,9 @@ +from django.contrib.auth.models import User +from django.template.loaders.app_directories import Loader + + +class LoaderWithSQL(Loader): + def get_template(self, *args, **kwargs): + # Force the template loader to run some SQL. Simulates a CMS. + User.objects.all().count() + return super().get_template(*args, **kwargs) diff --git a/tests/middleware.py b/tests/middleware.py new file mode 100644 index 000000000..ce46e2066 --- /dev/null +++ b/tests/middleware.py @@ -0,0 +1,17 @@ +from django.core.cache import cache + + +class UseCacheAfterToolbar: + """ + This middleware exists to use the cache before and after + the toolbar is setup. + """ + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + cache.set("UseCacheAfterToolbar.before", 1) + response = self.get_response(request) + cache.set("UseCacheAfterToolbar.after", 1) + return response diff --git a/tests/models.py b/tests/models.py index e69de29bb..e19bfe59d 100644 --- a/tests/models.py +++ b/tests/models.py @@ -0,0 +1,32 @@ +from django.conf import settings +from django.db import models +from django.db.models import JSONField + + +class NonAsciiRepr: + def __repr__(self): + return "nôt åscíì" + + +class Binary(models.Model): + field = models.BinaryField() + + def __str__(self): + return "" + + +class PostgresJSON(models.Model): + field = JSONField() + + def __str__(self): + return "" + + +if settings.USE_GIS: + from django.contrib.gis.db import models as gismodels + + class Location(gismodels.Model): + point = gismodels.PointField() + + def __str__(self): + return "" diff --git a/debug_toolbar/utils/compat/__init__.py b/tests/panels/__init__.py similarity index 100% rename from debug_toolbar/utils/compat/__init__.py rename to tests/panels/__init__.py diff --git a/tests/panels/test_alerts.py b/tests/panels/test_alerts.py new file mode 100644 index 000000000..5c926f275 --- /dev/null +++ b/tests/panels/test_alerts.py @@ -0,0 +1,112 @@ +from django.http import HttpResponse, StreamingHttpResponse +from django.template import Context, Template + +from ..base import BaseTestCase + + +class AlertsPanelTestCase(BaseTestCase): + panel_id = "AlertsPanel" + + def test_alert_warning_display(self): + """ + Test that the panel (does not) display[s] an alert when there are + (no) problems. + """ + self.panel.record_stats({"alerts": []}) + self.assertNotIn("alerts", self.panel.nav_subtitle) + + self.panel.record_stats({"alerts": ["Alert 1", "Alert 2"]}) + self.assertIn("2 alerts", self.panel.nav_subtitle) + + def test_file_form_without_enctype_multipart_form_data(self): + """ + Test that the panel displays a form invalid message when there is + a file input but encoding not set to multipart/form-data. + """ + test_form = '
' + result = self.panel.check_invalid_file_form_configuration(test_form) + expected_error = ( + 'Form with id "test-form" contains file input, ' + 'but does not have the attribute enctype="multipart/form-data".' + ) + self.assertEqual(result[0]["alert"], expected_error) + self.assertEqual(len(result), 1) + + def test_file_form_no_id_without_enctype_multipart_form_data(self): + """ + Test that the panel displays a form invalid message when there is + a file input but encoding not set to multipart/form-data. + + This should use the message when the form has no id. + """ + test_form = '
' + result = self.panel.check_invalid_file_form_configuration(test_form) + expected_error = ( + "Form contains file input, but does not have " + 'the attribute enctype="multipart/form-data".' + ) + self.assertEqual(result[0]["alert"], expected_error) + self.assertEqual(len(result), 1) + + def test_file_form_with_enctype_multipart_form_data(self): + test_form = """
+ +
""" + result = self.panel.check_invalid_file_form_configuration(test_form) + + self.assertEqual(len(result), 0) + + def test_file_form_with_enctype_multipart_form_data_in_button(self): + test_form = """
+ + +
""" + result = self.panel.check_invalid_file_form_configuration(test_form) + + self.assertEqual(len(result), 0) + + def test_referenced_file_input_without_enctype_multipart_form_data(self): + test_file_input = """
+ """ + result = self.panel.check_invalid_file_form_configuration(test_file_input) + + expected_error = ( + 'Input element references form with id "test-form", ' + 'but the form does not have the attribute enctype="multipart/form-data".' + ) + self.assertEqual(result[0]["alert"], expected_error) + self.assertEqual(len(result), 1) + + def test_referenced_file_input_with_enctype_multipart_form_data(self): + test_file_input = """
+
+ """ + result = self.panel.check_invalid_file_form_configuration(test_file_input) + + self.assertEqual(len(result), 0) + + def test_integration_file_form_without_enctype_multipart_form_data(self): + t = Template('
') + c = Context({}) + rendered_template = t.render(c) + response = HttpResponse(content=rendered_template) + + self.panel.generate_stats(self.request, response) + + self.assertIn("1 alert", self.panel.nav_subtitle) + self.assertIn( + "Form with id "test-form" contains file input, " + "but does not have the attribute enctype="multipart/form-data".", + self.panel.content, + ) + + def test_streaming_response(self): + """Test to check for a streaming response.""" + + def _render(): + yield "ok" + + response = StreamingHttpResponse(_render()) + + self.panel.generate_stats(self.request, response) + self.assertEqual(self.panel.get_stats(), {}) diff --git a/tests/panels/test_async_panel_compatibility.py b/tests/panels/test_async_panel_compatibility.py new file mode 100644 index 000000000..d5a85ffbb --- /dev/null +++ b/tests/panels/test_async_panel_compatibility.py @@ -0,0 +1,39 @@ +from django.http import HttpResponse +from django.test import AsyncRequestFactory, RequestFactory, TestCase + +from debug_toolbar.panels import Panel +from debug_toolbar.toolbar import DebugToolbar + + +class MockAsyncPanel(Panel): + is_async = True + + +class MockSyncPanel(Panel): + is_async = False + + +class PanelAsyncCompatibilityTestCase(TestCase): + def setUp(self): + self.async_factory = AsyncRequestFactory() + self.wsgi_factory = RequestFactory() + + def test_panels_with_asgi(self): + async_request = self.async_factory.get("/") + toolbar = DebugToolbar(async_request, lambda request: HttpResponse()) + + async_panel = MockAsyncPanel(toolbar, async_request) + sync_panel = MockSyncPanel(toolbar, async_request) + + self.assertTrue(async_panel.enabled) + self.assertFalse(sync_panel.enabled) + + def test_panels_with_wsgi(self): + wsgi_request = self.wsgi_factory.get("/") + toolbar = DebugToolbar(wsgi_request, lambda request: HttpResponse()) + + async_panel = MockAsyncPanel(toolbar, wsgi_request) + sync_panel = MockSyncPanel(toolbar, wsgi_request) + + self.assertTrue(async_panel.enabled) + self.assertTrue(sync_panel.enabled) diff --git a/tests/panels/test_cache.py b/tests/panels/test_cache.py new file mode 100644 index 000000000..aacf521cb --- /dev/null +++ b/tests/panels/test_cache.py @@ -0,0 +1,151 @@ +from django.core import cache + +from ..base import BaseTestCase + + +class CachePanelTestCase(BaseTestCase): + panel_id = "CachePanel" + + def test_recording(self): + self.assertEqual(len(self.panel.calls), 0) + cache.cache.set("foo", "bar") + cache.cache.get("foo") + cache.cache.delete("foo") + self.assertFalse(cache.cache.touch("foo")) + cache.cache.set("foo", "bar") + self.assertTrue(cache.cache.touch("foo")) + # Verify that the cache has a valid clear method. + cache.cache.clear() + self.assertEqual(len(self.panel.calls), 7) + + def test_recording_caches(self): + self.assertEqual(len(self.panel.calls), 0) + default_cache = cache.caches[cache.DEFAULT_CACHE_ALIAS] + second_cache = cache.caches["second"] + default_cache.set("foo", "bar") + second_cache.get("foo") + self.assertEqual(len(self.panel.calls), 2) + + def test_hits_and_misses(self): + cache.cache.clear() + cache.cache.get("foo") + self.assertEqual(self.panel.hits, 0) + self.assertEqual(self.panel.misses, 1) + cache.cache.set("foo", 1) + cache.cache.get("foo") + self.assertEqual(self.panel.hits, 1) + self.assertEqual(self.panel.misses, 1) + cache.cache.get_many(["foo", "bar"]) + self.assertEqual(self.panel.hits, 2) + self.assertEqual(self.panel.misses, 2) + cache.cache.set("bar", 2) + cache.cache.get_many(keys=["foo", "bar"]) + self.assertEqual(self.panel.hits, 4) + self.assertEqual(self.panel.misses, 2) + + def test_get_or_set_value(self): + cache.cache.get_or_set("baz", "val") + self.assertEqual(cache.cache.get("baz"), "val") + calls = [ + (call["name"], call["args"], call["kwargs"]) for call in self.panel.calls + ] + self.assertEqual( + calls, + [ + ("get_or_set", ("baz", "val"), {}), + ("get", ("baz",), {}), + ], + ) + self.assertEqual( + self.panel.counts, + { + "add": 0, + "get": 1, + "set": 0, + "get_or_set": 1, + "touch": 0, + "delete": 0, + "clear": 0, + "get_many": 0, + "set_many": 0, + "delete_many": 0, + "has_key": 0, + "incr": 0, + "decr": 0, + "incr_version": 0, + "decr_version": 0, + }, + ) + + def test_get_or_set_does_not_override_existing_value(self): + cache.cache.set("foo", "bar") + cached_value = cache.cache.get_or_set("foo", "other") + self.assertEqual(cached_value, "bar") + calls = [ + (call["name"], call["args"], call["kwargs"]) for call in self.panel.calls + ] + self.assertEqual( + calls, + [ + ("set", ("foo", "bar"), {}), + ("get_or_set", ("foo", "other"), {}), + ], + ) + self.assertEqual( + self.panel.counts, + { + "add": 0, + "get": 0, + "set": 1, + "get_or_set": 1, + "touch": 0, + "delete": 0, + "clear": 0, + "get_many": 0, + "set_many": 0, + "delete_many": 0, + "has_key": 0, + "incr": 0, + "decr": 0, + "incr_version": 0, + "decr_version": 0, + }, + ) + + def test_insert_content(self): + """ + Test that the panel only inserts content after generate_stats and + not the process_request. + """ + cache.cache.get("café") + response = self.panel.process_request(self.request) + # ensure the panel does not have content yet. + self.assertNotIn("café", self.panel.content) + self.panel.generate_stats(self.request, response) + # ensure the panel renders correctly. + content = self.panel.content + self.assertIn("café", content) + self.assertValidHTML(content) + + def test_generate_server_timing(self): + self.assertEqual(len(self.panel.calls), 0) + cache.cache.set("foo", "bar") + cache.cache.get("foo") + cache.cache.delete("foo") + + self.assertEqual(len(self.panel.calls), 3) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + self.panel.generate_server_timing(self.request, response) + + stats = self.panel.get_stats() + + expected_data = { + "total_time": { + "title": "Cache {} Calls".format(stats["total_calls"]), + "value": stats["total_time"], + } + } + + self.assertEqual(self.panel.get_server_timing_stats(), expected_data) diff --git a/tests/panels/test_custom.py b/tests/panels/test_custom.py new file mode 100644 index 000000000..661a5cc53 --- /dev/null +++ b/tests/panels/test_custom.py @@ -0,0 +1,46 @@ +from django.test import override_settings + +from debug_toolbar.panels import Panel + +from ..base import IntegrationTestCase + + +class CustomPanel(Panel): + def title(self): + return "Title with special chars &\"'<>" + + +@override_settings( + DEBUG=True, DEBUG_TOOLBAR_PANELS=["tests.panels.test_custom.CustomPanel"] +) +class CustomPanelTestCase(IntegrationTestCase): + def test_escapes_panel_title(self): + response = self.client.get("/regular/basic/") + self.assertContains( + response, + """ +
  • + + + Title with special chars &"'<> + +
  • + """, + html=True, + ) + self.assertContains( + response, + """ +
    +
    +

    Title with special chars &"'<>

    + +
    +
    +
    +
    +
    +
    + """, + html=True, + ) diff --git a/tests/panels/test_history.py b/tests/panels/test_history.py new file mode 100644 index 000000000..4c5244934 --- /dev/null +++ b/tests/panels/test_history.py @@ -0,0 +1,197 @@ +import copy +import html + +from django.test import RequestFactory, override_settings +from django.urls import resolve, reverse + +from debug_toolbar.toolbar import DebugToolbar + +from ..base import BaseTestCase, IntegrationTestCase + +rf = RequestFactory() + + +class HistoryPanelTestCase(BaseTestCase): + panel_id = "HistoryPanel" + + def test_disabled(self): + config = {"DISABLE_PANELS": {"debug_toolbar.panels.history.HistoryPanel"}} + self.assertTrue(self.panel.enabled) + with self.settings(DEBUG_TOOLBAR_CONFIG=config): + self.assertFalse(self.panel.enabled) + + def test_post(self): + self.request = rf.post("/", data={"foo": "bar"}) + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + data = self.panel.get_stats()["data"] + self.assertEqual(data["foo"], "bar") + + def test_post_json(self): + for data, expected_stats_data in ( + ({"foo": "bar"}, {"foo": "bar"}), + ("", {}), # Empty JSON + ("'", {}), # Invalid JSON + ): + with self.subTest(data=data): + self.request = rf.post( + "/", + data=data, + content_type="application/json", + CONTENT_TYPE="application/json", # Force django test client to add the content-type even if no data + ) + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + data = self.panel.get_stats()["data"] + self.assertDictEqual(data, expected_stats_data) + + def test_urls(self): + self.assertEqual( + reverse("djdt:history_sidebar"), + "/__debug__/history_sidebar/", + ) + self.assertEqual( + resolve("/__debug__/history_sidebar/").url_name, + "history_sidebar", + ) + self.assertEqual( + reverse("djdt:history_refresh"), + "/__debug__/history_refresh/", + ) + self.assertEqual( + resolve("/__debug__/history_refresh/").url_name, + "history_refresh", + ) + + +@override_settings(DEBUG=True) +class HistoryViewsTestCase(IntegrationTestCase): + PANEL_KEYS = { + "VersionsPanel", + "TimerPanel", + "SettingsPanel", + "HeadersPanel", + "RequestPanel", + "SQLPanel", + "StaticFilesPanel", + "TemplatesPanel", + "AlertsPanel", + "CachePanel", + "SignalsPanel", + "ProfilingPanel", + } + + def test_history_panel_integration_content(self): + """Verify the history panel's content renders properly..""" + self.assertEqual(len(DebugToolbar._store), 0) + + data = {"foo": "bar"} + self.client.get("/json_view/", data, content_type="application/json") + + # Check the history panel's stats to verify the toolbar rendered properly. + self.assertEqual(len(DebugToolbar._store), 1) + toolbar = list(DebugToolbar._store.values())[0] + content = toolbar.get_panel_by_id("HistoryPanel").content + self.assertIn("bar", content) + self.assertIn('name="exclude_history" value="True"', content) + + def test_history_sidebar_invalid(self): + response = self.client.get(reverse("djdt:history_sidebar")) + self.assertEqual(response.status_code, 400) + + def test_history_headers(self): + """Validate the headers injected from the history panel.""" + response = self.client.get("/json_view/") + store_id = list(DebugToolbar._store)[0] + self.assertEqual(response.headers["djdt-store-id"], store_id) + + @override_settings( + DEBUG_TOOLBAR_CONFIG={"OBSERVE_REQUEST_CALLBACK": lambda request: False} + ) + def test_history_headers_unobserved(self): + """Validate the headers aren't injected from the history panel.""" + response = self.client.get("/json_view/") + self.assertNotIn("djdt-store-id", response.headers) + + def test_history_sidebar(self): + """Validate the history sidebar view.""" + self.client.get("/json_view/") + store_id = list(DebugToolbar._store)[0] + data = {"store_id": store_id, "exclude_history": True} + response = self.client.get(reverse("djdt:history_sidebar"), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual( + set(response.json()), + self.PANEL_KEYS, + ) + + def test_history_sidebar_includes_history(self): + """Validate the history sidebar view.""" + self.client.get("/json_view/") + panel_keys = copy.copy(self.PANEL_KEYS) + panel_keys.add("HistoryPanel") + panel_keys.add("RedirectsPanel") + store_id = list(DebugToolbar._store)[0] + data = {"store_id": store_id} + response = self.client.get(reverse("djdt:history_sidebar"), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual( + set(response.json()), + panel_keys, + ) + + @override_settings( + DEBUG_TOOLBAR_CONFIG={"RESULTS_CACHE_SIZE": 1, "RENDER_PANELS": False} + ) + def test_history_sidebar_expired_store_id(self): + """Validate the history sidebar view.""" + self.client.get("/json_view/") + store_id = list(DebugToolbar._store)[0] + data = {"store_id": store_id, "exclude_history": True} + response = self.client.get(reverse("djdt:history_sidebar"), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual( + set(response.json()), + self.PANEL_KEYS, + ) + self.client.get("/json_view/") + + # Querying old store_id should return in empty response + data = {"store_id": store_id, "exclude_history": True} + response = self.client.get(reverse("djdt:history_sidebar"), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {}) + + # Querying with latest store_id + latest_store_id = list(DebugToolbar._store)[0] + data = {"store_id": latest_store_id, "exclude_history": True} + response = self.client.get(reverse("djdt:history_sidebar"), data=data) + self.assertEqual(response.status_code, 200) + self.assertEqual( + set(response.json()), + self.PANEL_KEYS, + ) + + def test_history_refresh(self): + """Verify refresh history response has request variables.""" + self.client.get("/json_view/", {"foo": "bar"}, content_type="application/json") + self.client.get( + "/json_view/", {"spam": "eggs"}, content_type="application/json" + ) + + response = self.client.get( + reverse("djdt:history_refresh"), data={"store_id": "foo"} + ) + self.assertEqual(response.status_code, 200) + data = response.json() + self.assertEqual(len(data["requests"]), 2) + + store_ids = list(DebugToolbar._store) + self.assertIn(html.escape(store_ids[0]), data["requests"][0]["content"]) + self.assertIn(html.escape(store_ids[1]), data["requests"][1]["content"]) + + for val in ["foo", "bar"]: + self.assertIn(val, data["requests"][0]["content"]) + + for val in ["spam", "eggs"]: + self.assertIn(val, data["requests"][1]["content"]) diff --git a/tests/panels/test_profiling.py b/tests/panels/test_profiling.py new file mode 100644 index 000000000..88ec57dd6 --- /dev/null +++ b/tests/panels/test_profiling.py @@ -0,0 +1,100 @@ +import sys +import unittest + +from django.contrib.auth.models import User +from django.db import IntegrityError, transaction +from django.http import HttpResponse +from django.test.utils import override_settings + +from ..base import BaseTestCase, IntegrationTestCase +from ..views import listcomp_view, regular_view + + +@override_settings( + DEBUG_TOOLBAR_PANELS=["debug_toolbar.panels.profiling.ProfilingPanel"] +) +class ProfilingPanelTestCase(BaseTestCase): + panel_id = "ProfilingPanel" + + def test_regular_view(self): + self._get_response = lambda request: regular_view(request, "profiling") + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + self.assertIn("func_list", self.panel.get_stats()) + self.assertIn("regular_view", self.panel.content) + + def test_insert_content(self): + """ + Test that the panel only inserts content after generate_stats and + not the process_request. + """ + self._get_response = lambda request: regular_view(request, "profiling") + response = self.panel.process_request(self.request) + # ensure the panel does not have content yet. + self.assertNotIn("regular_view", self.panel.content) + self.panel.generate_stats(self.request, response) + # ensure the panel renders correctly. + content = self.panel.content + self.assertIn("regular_view", content) + self.assertIn("render", content) + self.assertValidHTML(content) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"PROFILER_THRESHOLD_RATIO": 1}) + def test_cum_time_threshold(self): + """ + Test that cumulative time threshold excludes calls + """ + self._get_response = lambda request: regular_view(request, "profiling") + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel renders but doesn't include our function. + content = self.panel.content + self.assertIn("regular_view", content) + self.assertNotIn("render", content) + self.assertValidHTML(content) + + @unittest.skipUnless( + sys.version_info < (3, 12, 0), + "Python 3.12 no longer contains a frame for list comprehensions.", + ) + def test_listcomp_escaped(self): + self._get_response = lambda request: listcomp_view(request) + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + content = self.panel.content + self.assertNotIn('', content) + self.assertIn('<listcomp>', content) + + def test_generate_stats_no_profiler(self): + """ + Test generating stats with no profiler. + """ + response = HttpResponse() + self.assertIsNone(self.panel.generate_stats(self.request, response)) + + def test_generate_stats_no_root_func(self): + """ + Test generating stats using profiler without root function. + """ + response = self.panel.process_request(self.request) + self.panel.profiler.clear() + self.panel.profiler.enable() + self.panel.profiler.disable() + self.panel.generate_stats(self.request, response) + self.assertNotIn("func_list", self.panel.get_stats()) + + +@override_settings( + DEBUG=True, DEBUG_TOOLBAR_PANELS=["debug_toolbar.panels.profiling.ProfilingPanel"] +) +class ProfilingPanelIntegrationTestCase(IntegrationTestCase): + def test_view_executed_once(self): + self.assertEqual(User.objects.count(), 0) + + response = self.client.get("/new_user/") + self.assertContains(response, "Profiling") + self.assertEqual(User.objects.count(), 1) + + with self.assertRaises(IntegrityError), transaction.atomic(): + response = self.client.get("/new_user/") + self.assertEqual(User.objects.count(), 1) diff --git a/tests/panels/test_redirects.py b/tests/panels/test_redirects.py new file mode 100644 index 000000000..7d6d5ac06 --- /dev/null +++ b/tests/panels/test_redirects.py @@ -0,0 +1,100 @@ +import copy + +from django.conf import settings +from django.http import HttpResponse +from django.test import AsyncRequestFactory + +from ..base import BaseTestCase + + +class RedirectsPanelTestCase(BaseTestCase): + panel_id = "RedirectsPanel" + + def test_regular_response(self): + not_redirect = HttpResponse() + self._get_response = lambda request: not_redirect + response = self.panel.process_request(self.request) + self.assertTrue(response is not_redirect) + + def test_not_a_redirect(self): + redirect = HttpResponse(status=304) + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertTrue(response is redirect) + + def test_redirect(self): + redirect = HttpResponse(status=302) + redirect["Location"] = "http://somewhere/else/" + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertFalse(response is redirect) + self.assertContains(response, "302 Found") + self.assertContains(response, "http://somewhere/else/") + + def test_redirect_with_broken_context_processor(self): + TEMPLATES = copy.deepcopy(settings.TEMPLATES) + TEMPLATES[1]["OPTIONS"]["context_processors"] = [ + "tests.context_processors.broken" + ] + + with self.settings(TEMPLATES=TEMPLATES): + redirect = HttpResponse(status=302) + redirect["Location"] = "http://somewhere/else/" + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertFalse(response is redirect) + self.assertContains(response, "302 Found") + self.assertContains(response, "http://somewhere/else/") + + def test_unknown_status_code(self): + redirect = HttpResponse(status=369) + redirect["Location"] = "http://somewhere/else/" + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertContains(response, "369 Unknown Status Code") + + def test_unknown_status_code_with_reason(self): + redirect = HttpResponse(status=369, reason="Look Ma!") + redirect["Location"] = "http://somewhere/else/" + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertContains(response, "369 Look Ma!") + + def test_insert_content(self): + """ + Test that the panel only inserts content after generate_stats and + not the process_request. + """ + redirect = HttpResponse(status=304) + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertIsNotNone(response) + response = self.panel.generate_stats(self.request, redirect) + self.assertIsNone(response) + + async def test_async_compatibility(self): + redirect = HttpResponse(status=302) + + async def get_response(request): + return redirect + + await_response = await get_response(self.request) + self._get_response = get_response + + self.request = AsyncRequestFactory().get("/") + response = await self.panel.process_request(self.request) + self.assertIsInstance(response, HttpResponse) + self.assertTrue(response is await_response) + + def test_original_response_preserved(self): + redirect = HttpResponse(status=302) + redirect["Location"] = "http://somewhere/else/" + self._get_response = lambda request: redirect + response = self.panel.process_request(self.request) + self.assertFalse(response is redirect) + self.assertTrue(hasattr(response, "original_response")) + self.assertTrue(response.original_response is redirect) + self.assertIsNone(response.get("Location")) + self.assertEqual( + response.original_response.get("Location"), "http://somewhere/else/" + ) diff --git a/tests/panels/test_request.py b/tests/panels/test_request.py new file mode 100644 index 000000000..2eb7ba610 --- /dev/null +++ b/tests/panels/test_request.py @@ -0,0 +1,211 @@ +from django.http import QueryDict +from django.test import RequestFactory + +from ..base import BaseTestCase + +rf = RequestFactory() + + +class RequestPanelTestCase(BaseTestCase): + panel_id = "RequestPanel" + + def test_non_ascii_session(self): + self.request.session = {"où": "où"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + self.assertIn("où", self.panel.content) + + def test_object_with_non_ascii_repr_in_request_params(self): + request = rf.get("/non_ascii_request/") + response = self.panel.process_request(request) + self.panel.generate_stats(request, response) + self.assertIn("nôt åscíì", self.panel.content) + + def test_insert_content(self): + """ + Test that the panel only inserts content after generate_stats and + not the process_request. + """ + request = rf.get("/non_ascii_request/") + response = self.panel.process_request(request) + # ensure the panel does not have content yet. + self.assertNotIn("nôt åscíì", self.panel.content) + self.panel.generate_stats(request, response) + # ensure the panel renders correctly. + content = self.panel.content + self.assertIn("nôt åscíì", content) + self.assertValidHTML(content) + + def test_query_dict_for_request_in_method_get(self): + """ + Test verifies the correctness of the statistics generation method + in the case when the GET request is class QueryDict + """ + self.request.GET = QueryDict("foo=bar") + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel GET request data is processed correctly. + content = self.panel.content + self.assertIn("foo", content) + self.assertIn("bar", content) + + def test_dict_for_request_in_method_get(self): + """ + Test verifies the correctness of the statistics generation method + in the case when the GET request is class Dict + """ + self.request.GET = {"foo": "bar"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel GET request data is processed correctly. + content = self.panel.content + self.assertIn("foo", content) + self.assertIn("bar", content) + + def test_query_dict_for_request_in_method_post(self): + """ + Test verifies the correctness of the statistics generation method + in the case when the POST request is class QueryDict + """ + self.request.POST = QueryDict("foo=bar") + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel POST request data is processed correctly. + content = self.panel.content + self.assertIn("foo", content) + self.assertIn("bar", content) + + def test_dict_for_request_in_method_post(self): + """ + Test verifies the correctness of the statistics generation method + in the case when the POST request is class Dict + """ + self.request.POST = {"foo": "bar"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel POST request data is processed correctly. + content = self.panel.content + self.assertIn("foo", content) + self.assertIn("bar", content) + + def test_list_for_request_in_method_post(self): + """ + Verify that the toolbar doesn't crash if request.POST contains unexpected data. + + See https://github.com/django-commons/django-debug-toolbar/issues/1621 + """ + self.request.POST = [{"a": 1}, {"b": 2}] + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + # ensure the panel POST request data is processed correctly. + content = self.panel.content + self.assertIn("[{'a': 1}, {'b': 2}]", content) + + def test_namespaced_url(http://github.com/self): + request = rf.get("/admin/login/") + response = self.panel.process_request(request) + self.panel.generate_stats(request, response) + panel_stats = self.panel.get_stats() + self.assertEqual(panel_stats["view_urlname"], "admin:login") + + def test_session_list_sorted_or_not(self): + """ + Verify the session is sorted when all keys are strings. + + See https://github.com/django-commons/django-debug-toolbar/issues/1668 + """ + self.request.session = { + 1: "value", + "data": ["foo", "bar", 1], + (2, 3): "tuple_key", + } + data = { + "list": [(1, "value"), ("data", ["foo", "bar", 1]), ((2, 3), "tuple_key")] + } + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + panel_stats = self.panel.get_stats() + self.assertEqual(panel_stats["session"], data) + + self.request.session = { + "b": "b-value", + "a": "a-value", + } + data = {"list": [("a", "a-value"), ("b", "b-value")]} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + panel_stats = self.panel.get_stats() + self.assertEqual(panel_stats["session"], data) + + def test_sensitive_post_data_sanitized(self): + """Test that sensitive POST data is redacted.""" + self.request.POST = {"username": "testuser", "password": "secret123"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # Check that password is redacted in panel content + content = self.panel.content + self.assertIn("username", content) + self.assertIn("testuser", content) + self.assertIn("password", content) + self.assertNotIn("secret123", content) + self.assertIn("********************", content) + + def test_sensitive_get_data_sanitized(self): + """Test that sensitive GET data is redacted.""" + self.request.GET = {"api_key": "abc123", "q": "search term"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # Check that api_key is redacted in panel content + content = self.panel.content + self.assertIn("api_key", content) + self.assertNotIn("abc123", content) + self.assertIn("********************", content) + self.assertIn("q", content) + self.assertIn("search term", content) + + def test_sensitive_cookie_data_sanitized(self): + """Test that sensitive cookie data is redacted.""" + self.request.COOKIES = {"session_id": "abc123", "auth_token": "xyz789"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # Check that auth_token is redacted in panel content + content = self.panel.content + self.assertIn("session_id", content) + self.assertIn("abc123", content) + self.assertIn("auth_token", content) + self.assertNotIn("xyz789", content) + self.assertIn("********************", content) + + def test_sensitive_session_data_sanitized(self): + """Test that sensitive session data is redacted.""" + self.request.session = {"user_id": 123, "auth_token": "xyz789"} + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # Check that auth_token is redacted in panel content + content = self.panel.content + self.assertIn("user_id", content) + self.assertIn("123", content) + self.assertIn("auth_token", content) + self.assertNotIn("xyz789", content) + self.assertIn("********************", content) + + def test_querydict_sanitized(self): + """Test that sensitive data in QueryDict objects is properly redacted.""" + query_dict = QueryDict("username=testuser&password=secret123&token=abc456") + self.request.GET = query_dict + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # Check that sensitive data is redacted in panel content + content = self.panel.content + self.assertIn("username", content) + self.assertIn("testuser", content) + self.assertIn("password", content) + self.assertNotIn("secret123", content) + self.assertIn("token", content) + self.assertNotIn("abc456", content) + self.assertIn("********************", content) diff --git a/tests/panels/test_settings.py b/tests/panels/test_settings.py new file mode 100644 index 000000000..89b016dc0 --- /dev/null +++ b/tests/panels/test_settings.py @@ -0,0 +1,37 @@ +from django.test import override_settings + +from ..base import IntegrationTestCase + + +@override_settings(DEBUG=True) +class SettingsIntegrationTestCase(IntegrationTestCase): + def test_panel_title(self): + response = self.client.get("/regular/basic/") + # The settings module is None due to using Django's UserSettingsHolder + # in tests. + self.assertContains( + response, + """ +
  • + + Settings +
  • + """, + html=True, + ) + self.assertContains( + response, + """ +
    +
    +

    Settings from None

    + +
    +
    +
    +
    +
    +
    + """, + html=True, + ) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py new file mode 100644 index 000000000..a411abb5d --- /dev/null +++ b/tests/panels/test_sql.py @@ -0,0 +1,840 @@ +import asyncio +import datetime +import os +import unittest +from unittest.mock import call, patch + +import django +from asgiref.sync import sync_to_async +from django.contrib.auth.models import User +from django.db import connection, transaction +from django.db.backends.utils import CursorDebugWrapper, CursorWrapper +from django.db.models import Count +from django.db.utils import DatabaseError +from django.shortcuts import render +from django.test.utils import override_settings + +import debug_toolbar.panels.sql.tracking as sql_tracking + +try: + import psycopg +except ImportError: + psycopg = None + +from ..base import BaseMultiDBTestCase, BaseTestCase +from ..models import Binary, PostgresJSON + + +def sql_call(*, use_iterator=False): + qs = User.objects.all() + if use_iterator: + qs = qs.iterator() + return list(qs) + + +async def async_sql_call(*, use_iterator=False): + qs = User.objects.all() + if use_iterator: + qs = qs.iterator() + return await sync_to_async(list)(qs) + + +async def concurrent_async_sql_call(*, use_iterator=False): + qs = User.objects.all() + if use_iterator: + qs = qs.iterator() + return await asyncio.gather(sync_to_async(list)(qs), User.objects.acount()) + + +class SQLPanelTestCase(BaseTestCase): + panel_id = "SQLPanel" + + def test_disabled(self): + config = {"DISABLE_PANELS": {"debug_toolbar.panels.sql.SQLPanel"}} + self.assertTrue(self.panel.enabled) + with self.settings(DEBUG_TOOLBAR_CONFIG=config): + self.assertFalse(self.panel.enabled) + + def test_recording(self): + self.assertEqual(len(self.panel._queries), 0) + + sql_call() + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + query = self.panel._queries[0] + self.assertEqual(query["alias"], "default") + self.assertTrue("sql" in query) + self.assertTrue("duration" in query) + self.assertTrue("stacktrace" in query) + + # ensure the stacktrace is populated + self.assertTrue(len(query["stacktrace"]) > 0) + + async def test_recording_async(self): + self.assertEqual(len(self.panel._queries), 0) + + await async_sql_call() + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + query = self.panel._queries[0] + self.assertEqual(query["alias"], "default") + self.assertTrue("sql" in query) + self.assertTrue("duration" in query) + self.assertTrue("stacktrace" in query) + + # ensure the stacktrace is populated + self.assertTrue(len(query["stacktrace"]) > 0) + + async def test_recording_concurrent_async(self): + self.assertEqual(len(self.panel._queries), 0) + + await concurrent_async_sql_call() + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 2) + query = self.panel._queries[0] + self.assertEqual(query["alias"], "default") + self.assertTrue("sql" in query) + self.assertTrue("duration" in query) + self.assertTrue("stacktrace" in query) + + # ensure the stacktrace is populated + self.assertTrue(len(query["stacktrace"]) > 0) + + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_recording_chunked_cursor(self): + self.assertEqual(len(self.panel._queries), 0) + + sql_call(use_iterator=True) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + + @patch( + "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", + wraps=sql_tracking.patch_cursor_wrapper_with_mixin, + ) + def test_cursor_wrapper_singleton(self, mock_patch_cursor_wrapper): + sql_call() + # ensure that cursor wrapping is applied only once + self.assertIn( + mock_patch_cursor_wrapper.mock_calls, + [ + [call(CursorWrapper, sql_tracking.NormalCursorMixin)], + # CursorDebugWrapper is used if the test is called with `--debug-sql` + [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], + ], + ) + + @patch( + "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", + wraps=sql_tracking.patch_cursor_wrapper_with_mixin, + ) + def test_chunked_cursor_wrapper_singleton(self, mock_patch_cursor_wrapper): + sql_call(use_iterator=True) + + # ensure that cursor wrapping is applied only once + self.assertIn( + mock_patch_cursor_wrapper.mock_calls, + [ + [call(CursorWrapper, sql_tracking.NormalCursorMixin)], + # CursorDebugWrapper is used if the test is called with `--debug-sql` + [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], + ], + ) + + @patch( + "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", + wraps=sql_tracking.patch_cursor_wrapper_with_mixin, + ) + async def test_cursor_wrapper_async(self, mock_patch_cursor_wrapper): + await sync_to_async(sql_call)() + + self.assertIn( + mock_patch_cursor_wrapper.mock_calls, + [ + [call(CursorWrapper, sql_tracking.NormalCursorMixin)], + # CursorDebugWrapper is used if the test is called with `--debug-sql` + [call(CursorDebugWrapper, sql_tracking.NormalCursorMixin)], + ], + ) + + @patch( + "debug_toolbar.panels.sql.tracking.patch_cursor_wrapper_with_mixin", + wraps=sql_tracking.patch_cursor_wrapper_with_mixin, + ) + async def test_cursor_wrapper_asyncio_ctx(self, mock_patch_cursor_wrapper): + self.assertTrue(sql_tracking.allow_sql.get()) + await sync_to_async(sql_call)() + + async def task(): + sql_tracking.allow_sql.set(False) + # By disabling sql_tracking.allow_sql, we are indicating that any + # future SQL queries should be stopped. If SQL query occurs, + # it raises an exception. + with self.assertRaises(sql_tracking.SQLQueryTriggered): + await sync_to_async(sql_call)() + + # Ensure this is called in another context + await asyncio.create_task(task()) + # Because it was called in another context, it should not have affected ours + self.assertTrue(sql_tracking.allow_sql.get()) + + self.assertIn( + mock_patch_cursor_wrapper.mock_calls, + [ + [ + call(CursorWrapper, sql_tracking.NormalCursorMixin), + call(CursorWrapper, sql_tracking.ExceptionCursorMixin), + ], + # CursorDebugWrapper is used if the test is called with `--debug-sql` + [ + call(CursorDebugWrapper, sql_tracking.NormalCursorMixin), + call(CursorDebugWrapper, sql_tracking.ExceptionCursorMixin), + ], + ], + ) + + def test_generate_server_timing(self): + self.assertEqual(len(self.panel._queries), 0) + + sql_call() + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + self.panel.generate_server_timing(self.request, response) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + query = self.panel._queries[0] + + expected_data = { + "sql_time": {"title": "SQL 1 queries", "value": query["duration"]} + } + + self.assertEqual(self.panel.get_server_timing_stats(), expected_data) + + def test_non_ascii_query(self): + self.assertEqual(len(self.panel._queries), 0) + + # non-ASCII text query + list(User.objects.extra(where=["username = 'apéro'"])) + self.assertEqual(len(self.panel._queries), 1) + + # non-ASCII text parameters + list(User.objects.filter(username="thé")) + self.assertEqual(len(self.panel._queries), 2) + + # non-ASCII bytes parameters + list(Binary.objects.filter(field__in=["café".encode()])) + self.assertEqual(len(self.panel._queries), 3) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # ensure the panel renders correctly + self.assertIn("café", self.panel.content) + + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_bytes_query(self): + self.assertEqual(len(self.panel._queries), 0) + + with connection.cursor() as cursor: + cursor.execute(b"SELECT 1") + + self.assertEqual(len(self.panel._queries), 1) + + def test_param_conversion(self): + self.assertEqual(len(self.panel._queries), 0) + + list( + User.objects.filter(first_name="Foo") + .filter(is_staff=True) + .filter(is_superuser=False) + ) + list( + User.objects.annotate(group_count=Count("groups__id")) + .filter(group_count__lt=10) + .filter(group_count__gt=1) + ) + list( + User.objects.filter( + date_joined=datetime.datetime( + 2017, 12, 22, 16, 7, 1, tzinfo=datetime.timezone.utc + ) + ) + ) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 3) + + if connection.vendor == "mysql" and django.VERSION >= (4, 1): + # Django 4.1 started passing true/false back for boolean + # comparisons in MySQL. + expected_bools = '["Foo", true, false]' + else: + expected_bools = '["Foo"]' + + if connection.vendor == "postgresql": + # PostgreSQL always includes timezone + expected_datetime = '["2017-12-22 16:07:01+00:00"]' + else: + expected_datetime = '["2017-12-22 16:07:01"]' + + self.assertEqual( + tuple(query["params"] for query in self.panel._queries), + ( + expected_bools, + "[10, 1]", + expected_datetime, + ), + ) + + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_json_param_conversion(self): + self.assertEqual(len(self.panel._queries), 0) + + list(PostgresJSON.objects.filter(field__contains={"foo": "bar"})) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + self.assertEqual( + self.panel._queries[0]["params"], + '["{\\"foo\\": \\"bar\\"}"]', + ) + + @unittest.skipUnless( + connection.vendor == "postgresql" and psycopg is None, + "Test valid only on PostgreSQL with psycopg2", + ) + def test_tuple_param_conversion(self): + """ + Regression test for tuple parameter conversion. + """ + self.assertEqual(len(self.panel._queries), 0) + + list( + PostgresJSON.objects.raw( + "SELECT * FROM tests_postgresjson WHERE field ->> 'key' IN %s", + [("a", "b'")], + ) + ) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 1) + self.assertEqual(self.panel._queries[0]["params"], '[["a", "b\'"]]') + + def test_binary_param_force_text(self): + self.assertEqual(len(self.panel._queries), 0) + + with connection.cursor() as cursor: + cursor.execute( + "SELECT * FROM tests_binary WHERE field = %s", + [connection.Database.Binary(b"\xff")], + ) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + self.assertEqual(len(self.panel._queries), 1) + self.assertIn( + "SELECT * FROM" + " tests_binary WHERE field =", + self.panel._queries[0]["sql"], + ) + + @unittest.skipUnless(connection.vendor != "sqlite", "Test invalid for SQLite") + def test_raw_query_param_conversion(self): + self.assertEqual(len(self.panel._queries), 0) + + list( + User.objects.raw( + " ".join( + [ + "SELECT *", + "FROM auth_user", + "WHERE first_name = %s", + "AND is_staff = %s", + "AND is_superuser = %s", + "AND date_joined = %s", + ] + ), + params=["Foo", True, False, datetime.datetime(2017, 12, 22, 16, 7, 1)], + ) + ) + + list( + User.objects.raw( + " ".join( + [ + "SELECT *", + "FROM auth_user", + "WHERE first_name = %(first_name)s", + "AND is_staff = %(is_staff)s", + "AND is_superuser = %(is_superuser)s", + "AND date_joined = %(date_joined)s", + ] + ), + params={ + "first_name": "Foo", + "is_staff": True, + "is_superuser": False, + "date_joined": datetime.datetime(2017, 12, 22, 16, 7, 1), + }, + ) + ) + + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + + # ensure query was logged + self.assertEqual(len(self.panel._queries), 2) + + self.assertEqual( + tuple(query["params"] for query in self.panel._queries), + ( + '["Foo", true, false, "2017-12-22 16:07:01"]', + " ".join( + [ + '{"first_name": "Foo",', + '"is_staff": true,', + '"is_superuser": false,', + '"date_joined": "2017-12-22 16:07:01"}', + ] + ), + ), + ) + + def test_insert_content(self): + """ + Test that the panel only inserts content after generate_stats and + not the process_request. + """ + list(User.objects.filter(username="café")) + response = self.panel.process_request(self.request) + # ensure the panel does not have content yet. + self.assertNotIn("café", self.panel.content) + self.panel.generate_stats(self.request, response) + # ensure the panel renders correctly. + content = self.panel.content + self.assertIn("café", content) + self.assertValidHTML(content) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"ENABLE_STACKTRACES_LOCALS": True}) + def test_insert_locals(self): + """ + Test that the panel inserts locals() content. + """ + local_var = "" # noqa: F841 + list(User.objects.filter(username="café")) + response = self.panel.process_request(self.request) + self.panel.generate_stats(self.request, response) + self.assertIn("local_var", self.panel.content) + # Verify the escape logic works + content = self.panel.content + self.assertNotIn(" +{% endblock content %} diff --git a/tests/templates/base.html b/tests/templates/base.html new file mode 100644 index 000000000..272c316f0 --- /dev/null +++ b/tests/templates/base.html @@ -0,0 +1,10 @@ + + + + {{ title }} + {% block head %}{% endblock %} + + + {% block content %}{% endblock %} + + diff --git a/tests/templates/basic.html b/tests/templates/basic.html new file mode 100644 index 000000000..02f87200a --- /dev/null +++ b/tests/templates/basic.html @@ -0,0 +1,3 @@ +{% extends "base.html" %} + +{% block content %}Test for {{ title }}{% endblock %} diff --git a/tests/templates/jinja2/base.html b/tests/templates/jinja2/base.html new file mode 100644 index 000000000..ea0d773ac --- /dev/null +++ b/tests/templates/jinja2/base.html @@ -0,0 +1,9 @@ + + + + {{ title }} + + + {% block content %}{% endblock %} + + diff --git a/tests/templates/jinja2/basic.jinja b/tests/templates/jinja2/basic.jinja new file mode 100644 index 000000000..1ebced724 --- /dev/null +++ b/tests/templates/jinja2/basic.jinja @@ -0,0 +1,6 @@ +{% extends 'base.html' %} + +{% block content %} +Test for {{ title }} (Jinja) +{% for i in range(10) %}{{ i }}{% endfor %} {# Jinja2 supports range(), Django templates do not #} +{% endblock content %} diff --git a/tests/templates/registration/login.html b/tests/templates/registration/login.html new file mode 100644 index 000000000..21f5da261 --- /dev/null +++ b/tests/templates/registration/login.html @@ -0,0 +1 @@ +{% extends 'base.html' %} diff --git a/tests/templates/sql/flat.html b/tests/templates/sql/flat.html new file mode 100644 index 000000000..ee5386c55 --- /dev/null +++ b/tests/templates/sql/flat.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block content %} + {{ users }} +{% endblock content %} diff --git a/tests/templates/sql/included.html b/tests/templates/sql/included.html new file mode 100644 index 000000000..87d2e1f70 --- /dev/null +++ b/tests/templates/sql/included.html @@ -0,0 +1 @@ +{{ users }} diff --git a/tests/templates/sql/nested.html b/tests/templates/sql/nested.html new file mode 100644 index 000000000..e23a53af1 --- /dev/null +++ b/tests/templates/sql/nested.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block content %} + {% include "sql/included.html" %} +{% endblock content %} diff --git a/tests/templates/staticfiles/async_static.html b/tests/templates/staticfiles/async_static.html new file mode 100644 index 000000000..80f636cce --- /dev/null +++ b/tests/templates/staticfiles/async_static.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} +{% load static %} + +{% block head %} + +{% endblock head %} diff --git a/tests/templates/staticfiles/path.html b/tests/templates/staticfiles/path.html new file mode 100644 index 000000000..bf3781c3b --- /dev/null +++ b/tests/templates/staticfiles/path.html @@ -0,0 +1 @@ +{% load static %}{% static path %} diff --git a/tests/test_checks.py b/tests/test_checks.py new file mode 100644 index 000000000..27db92a9d --- /dev/null +++ b/tests/test_checks.py @@ -0,0 +1,316 @@ +from unittest.mock import patch + +from django.core.checks import Warning, run_checks +from django.test import SimpleTestCase, override_settings +from django.urls import NoReverseMatch + +from debug_toolbar.apps import debug_toolbar_installed_when_running_tests_check + + +class ChecksTestCase(SimpleTestCase): + @override_settings( + MIDDLEWARE=[ + "django.contrib.messages.middleware.MessageMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.middleware.gzip.GZipMiddleware", + "debug_toolbar.middleware.DebugToolbarMiddleware", + ] + ) + def test_check_good_configuration(self): + messages = run_checks() + self.assertEqual(messages, []) + + @override_settings( + MIDDLEWARE=[ + "django.contrib.messages.middleware.MessageMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + ] + ) + def test_check_missing_middleware_error(self): + messages = run_checks() + self.assertEqual( + messages, + [ + Warning( + "debug_toolbar.middleware.DebugToolbarMiddleware is " + "missing from MIDDLEWARE.", + hint="Add debug_toolbar.middleware.DebugToolbarMiddleware " + "to MIDDLEWARE.", + id="debug_toolbar.W001", + ) + ], + ) + + @override_settings( + MIDDLEWARE=[ + "django.contrib.messages.middleware.MessageMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "debug_toolbar.middleware.DebugToolbarMiddleware", + "django.middleware.gzip.GZipMiddleware", + ] + ) + def test_check_gzip_middleware_error(self): + messages = run_checks() + self.assertEqual( + messages, + [ + Warning( + "debug_toolbar.middleware.DebugToolbarMiddleware occurs " + "before django.middleware.gzip.GZipMiddleware in " + "MIDDLEWARE.", + hint="Move debug_toolbar.middleware.DebugToolbarMiddleware " + "to after django.middleware.gzip.GZipMiddleware in " + "MIDDLEWARE.", + id="debug_toolbar.W003", + ) + ], + ) + + @override_settings( + MIDDLEWARE_CLASSES=[ + "django.contrib.messages.middleware.MessageMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.middleware.gzip.GZipMiddleware", + "debug_toolbar.middleware.DebugToolbarMiddleware", + ] + ) + def test_check_middleware_classes_error(self): + messages = run_checks() + self.assertIn( + Warning( + "debug_toolbar is incompatible with MIDDLEWARE_CLASSES setting.", + hint="Use MIDDLEWARE instead of MIDDLEWARE_CLASSES", + id="debug_toolbar.W004", + ), + messages, + ) + + @override_settings(DEBUG_TOOLBAR_PANELS=[]) + def test_panels_is_empty(self): + errors = run_checks() + self.assertEqual( + errors, + [ + Warning( + "Setting DEBUG_TOOLBAR_PANELS is empty.", + hint="Set DEBUG_TOOLBAR_PANELS to a non-empty list in your " + "settings.py.", + id="debug_toolbar.W005", + ), + ], + ) + + @override_settings( + TEMPLATES=[ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": False, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + "loaders": [ + "django.template.loaders.filesystem.Loader", + ], + }, + }, + ] + ) + def test_check_w006_invalid(self): + errors = run_checks() + self.assertEqual( + errors, + [ + Warning( + "At least one DjangoTemplates TEMPLATES configuration needs " + "to use django.template.loaders.app_directories.Loader or " + "have APP_DIRS set to True.", + hint=( + "Include django.template.loaders.app_directories.Loader " + 'in ["OPTIONS"]["loaders"]. Alternatively use ' + "APP_DIRS=True for at least one " + "django.template.backends.django.DjangoTemplates " + "backend configuration." + ), + id="debug_toolbar.W006", + ) + ], + ) + + @override_settings( + TEMPLATES=[ + { + "NAME": "use_loaders", + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": False, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + "loaders": [ + "django.template.loaders.app_directories.Loader", + ], + }, + }, + { + "NAME": "use_app_dirs", + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + }, + }, + ] + ) + def test_check_w006_valid(self): + self.assertEqual(run_checks(), []) + + @override_settings( + TEMPLATES=[ + { + "NAME": "use_loaders", + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": False, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ], + "loaders": [ + ( + "django.template.loaders.cached.Loader", + [ + "django.template.loaders.filesystem.Loader", + "django.template.loaders.app_directories.Loader", + ], + ), + ], + }, + }, + ] + ) + def test_check_w006_valid_nested_loaders(self): + self.assertEqual(run_checks(), []) + + @patch("debug_toolbar.apps.mimetypes.guess_type") + def test_check_w007_valid(self, mocked_guess_type): + mocked_guess_type.return_value = ("text/javascript", None) + self.assertEqual(run_checks(), []) + mocked_guess_type.return_value = ("application/javascript", None) + self.assertEqual(run_checks(), []) + + @patch("debug_toolbar.apps.mimetypes.guess_type") + def test_check_w007_invalid(self, mocked_guess_type): + mocked_guess_type.return_value = ("text/plain", None) + self.assertEqual( + run_checks(), + [ + Warning( + "JavaScript files are resolving to the wrong content type.", + hint="The Django Debug Toolbar may not load properly while mimetypes are misconfigured. " + "See the Django documentation for an explanation of why this occurs.\n" + "https://docs.djangoproject.com/en/stable/ref/contrib/staticfiles/#static-file-development-view\n" + "\n" + "This typically occurs on Windows machines. The suggested solution is to modify " + "HKEY_CLASSES_ROOT in the registry to specify the content type for JavaScript " + "files.\n" + "\n" + "[HKEY_CLASSES_ROOT\\.js]\n" + '"Content Type"="application/javascript"', + id="debug_toolbar.W007", + ) + ], + ) + + @patch("debug_toolbar.apps.reverse") + def test_debug_toolbar_installed_when_running_tests(self, reverse): + params = [ + { + "debug": True, + "running_tests": True, + "show_callback_changed": True, + "urls_installed": False, + "errors": False, + }, + { + "debug": False, + "running_tests": False, + "show_callback_changed": True, + "urls_installed": False, + "errors": False, + }, + { + "debug": False, + "running_tests": True, + "show_callback_changed": False, + "urls_installed": False, + "errors": False, + }, + { + "debug": False, + "running_tests": True, + "show_callback_changed": True, + "urls_installed": True, + "errors": False, + }, + { + "debug": False, + "running_tests": True, + "show_callback_changed": True, + "urls_installed": False, + "errors": True, + }, + ] + for config in params: + with self.subTest(**config): + config_setting = { + "RENDER_PANELS": False, + "IS_RUNNING_TESTS": config["running_tests"], + "SHOW_TOOLBAR_CALLBACK": ( + (lambda *args: True) + if config["show_callback_changed"] + else "debug_toolbar.middleware.show_toolbar" + ), + } + if config["urls_installed"]: + reverse.side_effect = lambda *args: None + else: + reverse.side_effect = NoReverseMatch() + + with self.settings( + DEBUG=config["debug"], DEBUG_TOOLBAR_CONFIG=config_setting + ): + errors = debug_toolbar_installed_when_running_tests_check(None) + if config["errors"]: + self.assertEqual(len(errors), 1) + self.assertEqual(errors[0].id, "debug_toolbar.E001") + else: + self.assertEqual(len(errors), 0) + + @override_settings( + DEBUG_TOOLBAR_CONFIG={ + "OBSERVE_REQUEST_CALLBACK": lambda request: False, + "IS_RUNNING_TESTS": False, + } + ) + def test_observe_request_callback_specified(self): + errors = run_checks() + self.assertEqual(len(errors), 1) + self.assertEqual(errors[0].id, "debug_toolbar.W008") diff --git a/tests/test_csp_rendering.py b/tests/test_csp_rendering.py new file mode 100644 index 000000000..144e65ba0 --- /dev/null +++ b/tests/test_csp_rendering.py @@ -0,0 +1,176 @@ +from __future__ import annotations + +from typing import cast +from xml.etree.ElementTree import Element + +from django.conf import settings +from django.http.response import HttpResponse +from django.test.utils import ContextList, override_settings +from html5lib.constants import E +from html5lib.html5parser import HTMLParser + +from debug_toolbar.toolbar import DebugToolbar + +from .base import IntegrationTestCase + +MIDDLEWARE_CSP_BEFORE = settings.MIDDLEWARE.copy() +MIDDLEWARE_CSP_BEFORE.insert( + MIDDLEWARE_CSP_BEFORE.index("debug_toolbar.middleware.DebugToolbarMiddleware"), + "csp.middleware.CSPMiddleware", +) +MIDDLEWARE_CSP_LAST = settings.MIDDLEWARE + ["csp.middleware.CSPMiddleware"] + + +def get_namespaces(element: Element) -> dict[str, str]: + """ + Return the default `xmlns`. See + https://docs.python.org/3/library/xml.etree.elementtree.html#parsing-xml-with-namespaces + """ + if not element.tag.startswith("{"): + return {} + return {"": element.tag[1:].split("}", maxsplit=1)[0]} + + +@override_settings(DEBUG=True) +class CspRenderingTestCase(IntegrationTestCase): + """Testing if `csp-nonce` renders.""" + + def setUp(self): + super().setUp() + self.parser = HTMLParser() + + def _fail_if_missing( + self, root: Element, path: str, namespaces: dict[str, str], nonce: str + ): + """ + Search elements, fail if a `nonce` attribute is missing on them. + """ + elements = root.findall(path=path, namespaces=namespaces) + for item in elements: + if item.attrib.get("nonce") != nonce: + raise self.failureException(f"{item} has no nonce attribute.") + + def _fail_if_found(self, root: Element, path: str, namespaces: dict[str, str]): + """ + Search elements, fail if a `nonce` attribute is found on them. + """ + elements = root.findall(path=path, namespaces=namespaces) + for item in elements: + if "nonce" in item.attrib: + raise self.failureException(f"{item} has a nonce attribute.") + + def _fail_on_invalid_html(self, content: bytes, parser: HTMLParser): + """Fail if the passed HTML is invalid.""" + if parser.errors: + default_msg = ["Content is invalid HTML:"] + lines = content.split(b"\n") + for position, error_code, data_vars in parser.errors: + default_msg.append(f" {E[error_code]}" % data_vars) + default_msg.append(f" {lines[position[0] - 1]!r}") + msg = self._formatMessage(None, "\n".join(default_msg)) + raise self.failureException(msg) + + def test_exists(self): + """A `nonce` should exist when using the `CSPMiddleware`.""" + for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: + with self.settings(MIDDLEWARE=middleware): + response = cast(HttpResponse, self.client.get(path="/csp_view/")) + self.assertEqual(response.status_code, 200) + + html_root: Element = self.parser.parse(stream=response.content) + self._fail_on_invalid_html(content=response.content, parser=self.parser) + self.assertContains(response, "djDebug") + + namespaces = get_namespaces(element=html_root) + toolbar = list(DebugToolbar._store.values())[-1] + nonce = str(toolbar.csp_nonce) + self._fail_if_missing( + root=html_root, path=".//link", namespaces=namespaces, nonce=nonce + ) + self._fail_if_missing( + root=html_root, path=".//script", namespaces=namespaces, nonce=nonce + ) + + def test_does_not_exist_nonce_wasnt_used(self): + """ + A `nonce` should not exist even when using the `CSPMiddleware` + if the view didn't access the request.csp_nonce attribute. + """ + for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: + with self.settings(MIDDLEWARE=middleware): + response = cast(HttpResponse, self.client.get(path="/regular/basic/")) + self.assertEqual(response.status_code, 200) + + html_root: Element = self.parser.parse(stream=response.content) + self._fail_on_invalid_html(content=response.content, parser=self.parser) + self.assertContains(response, "djDebug") + + namespaces = get_namespaces(element=html_root) + self._fail_if_found( + root=html_root, path=".//link", namespaces=namespaces + ) + self._fail_if_found( + root=html_root, path=".//script", namespaces=namespaces + ) + + @override_settings( + DEBUG_TOOLBAR_CONFIG={"DISABLE_PANELS": set()}, + ) + def test_redirects_exists(self): + for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: + with self.settings(MIDDLEWARE=middleware): + response = cast(HttpResponse, self.client.get(path="/csp_view/")) + self.assertEqual(response.status_code, 200) + + html_root: Element = self.parser.parse(stream=response.content) + self._fail_on_invalid_html(content=response.content, parser=self.parser) + self.assertContains(response, "djDebug") + + namespaces = get_namespaces(element=html_root) + context: ContextList = response.context # pyright: ignore[reportAttributeAccessIssue] + nonce = str(context["toolbar"].csp_nonce) + self._fail_if_missing( + root=html_root, path=".//link", namespaces=namespaces, nonce=nonce + ) + self._fail_if_missing( + root=html_root, path=".//script", namespaces=namespaces, nonce=nonce + ) + + def test_panel_content_nonce_exists(self): + for middleware in [MIDDLEWARE_CSP_BEFORE, MIDDLEWARE_CSP_LAST]: + with self.settings(MIDDLEWARE=middleware): + response = cast(HttpResponse, self.client.get(path="/csp_view/")) + self.assertEqual(response.status_code, 200) + + toolbar = list(DebugToolbar._store.values())[-1] + panels_to_check = ["HistoryPanel", "TimerPanel"] + for panel in panels_to_check: + content = toolbar.get_panel_by_id(panel).content + html_root: Element = self.parser.parse(stream=content) + namespaces = get_namespaces(element=html_root) + nonce = str(toolbar.csp_nonce) + self._fail_if_missing( + root=html_root, + path=".//link", + namespaces=namespaces, + nonce=nonce, + ) + self._fail_if_missing( + root=html_root, + path=".//script", + namespaces=namespaces, + nonce=nonce, + ) + + def test_missing(self): + """A `nonce` should not exist when not using the `CSPMiddleware`.""" + response = cast(HttpResponse, self.client.get(path="/regular/basic/")) + self.assertEqual(response.status_code, 200) + + html_root: Element = self.parser.parse(stream=response.content) + self._fail_on_invalid_html(content=response.content, parser=self.parser) + self.assertContains(response, "djDebug") + + namespaces = get_namespaces(element=html_root) + self._fail_if_found(root=html_root, path=".//link", namespaces=namespaces) + self._fail_if_found(root=html_root, path=".//script", namespaces=namespaces) diff --git a/tests/test_decorators.py b/tests/test_decorators.py new file mode 100644 index 000000000..9840a6390 --- /dev/null +++ b/tests/test_decorators.py @@ -0,0 +1,66 @@ +from unittest.mock import patch + +from django.http import Http404, HttpResponse +from django.test import AsyncRequestFactory, RequestFactory, TestCase +from django.test.utils import override_settings + +from debug_toolbar.decorators import render_with_toolbar_language, require_show_toolbar + + +@render_with_toolbar_language +def stub_view(request): + return HttpResponse(200) + + +@require_show_toolbar +def stub_require_toolbar_view(request): + return HttpResponse(200) + + +@require_show_toolbar +async def stub_require_toolbar_async_view(request): + return HttpResponse(200) + + +class TestRequireToolbar(TestCase): + """ + Tests require_toolbar functionality and async compatibility. + """ + + def setUp(self): + self.factory = RequestFactory() + self.async_factory = AsyncRequestFactory() + + @override_settings(DEBUG=True) + def test_require_toolbar_debug_true(self): + response = stub_require_toolbar_view(self.factory.get("/")) + self.assertEqual(response.status_code, 200) + + def test_require_toolbar_debug_false(self): + with self.assertRaises(Http404): + stub_require_toolbar_view(self.factory.get("/")) + + # Following tests additionally tests async compatibility + # of require_toolbar decorator + @override_settings(DEBUG=True) + async def test_require_toolbar_async_debug_true(self): + response = await stub_require_toolbar_async_view(self.async_factory.get("/")) + self.assertEqual(response.status_code, 200) + + async def test_require_toolbar_async_debug_false(self): + with self.assertRaises(Http404): + await stub_require_toolbar_async_view(self.async_factory.get("/")) + + +@override_settings(DEBUG=True, LANGUAGE_CODE="fr") +class RenderWithToolbarLanguageTestCase(TestCase): + @override_settings(DEBUG_TOOLBAR_CONFIG={"TOOLBAR_LANGUAGE": "de"}) + @patch("debug_toolbar.decorators.language_override") + def test_uses_toolbar_language(self, mock_language_override): + stub_view(RequestFactory().get("/")) + mock_language_override.assert_called_once_with("de") + + @patch("debug_toolbar.decorators.language_override") + def test_defaults_to_django_language_code(self, mock_language_override): + stub_view(RequestFactory().get("/")) + mock_language_override.assert_called_once_with("fr") diff --git a/tests/test_forms.py b/tests/test_forms.py new file mode 100644 index 000000000..a619ae89d --- /dev/null +++ b/tests/test_forms.py @@ -0,0 +1,50 @@ +from datetime import datetime, timezone + +from django import forms +from django.test import TestCase + +from debug_toolbar.forms import SignedDataForm + +SIGNATURE = "-WiogJKyy4E8Om00CrFSy0T6XHObwBa6Zb46u-vmeYE" + +DATA = {"date": datetime(2020, 1, 1, tzinfo=timezone.utc), "value": "foo"} +SIGNED_DATA = f'{{"date": "2020-01-01 00:00:00+00:00", "value": "foo"}}:{SIGNATURE}' + + +class FooForm(forms.Form): + value = forms.CharField() + # Include a datetime in the tests because it's not serializable back + # to a datetime by SignedDataForm + date = forms.DateTimeField() + + +class TestSignedDataForm(TestCase): + def test_signed_data(self): + data = {"signed": SignedDataForm.sign(DATA)} + form = SignedDataForm(data=data) + self.assertTrue(form.is_valid()) + # Check the signature value + self.assertEqual(data["signed"], SIGNED_DATA) + + def test_verified_data(self): + form = SignedDataForm(data={"signed": SignedDataForm.sign(DATA)}) + self.assertEqual( + form.verified_data(), + { + "value": "foo", + "date": "2020-01-01 00:00:00+00:00", + }, + ) + # Take it back to the foo form to validate the datetime is serialized + foo_form = FooForm(data=form.verified_data()) + self.assertTrue(foo_form.is_valid()) + self.assertDictEqual(foo_form.cleaned_data, DATA) + + def test_initial_set_signed(self): + form = SignedDataForm(initial=DATA) + self.assertEqual(form.initial["signed"], SIGNED_DATA) + + def test_prevents_tampering(self): + data = {"signed": SIGNED_DATA.replace('"value": "foo"', '"value": "bar"')} + form = SignedDataForm(data=data) + self.assertFalse(form.is_valid()) diff --git a/tests/test_integration.py b/tests/test_integration.py new file mode 100644 index 000000000..a431ba29f --- /dev/null +++ b/tests/test_integration.py @@ -0,0 +1,953 @@ +import os +import re +import time +import unittest +from unittest.mock import patch + +import html5lib +from django.contrib.staticfiles.testing import StaticLiveServerTestCase +from django.core import signing +from django.core.cache import cache +from django.db import connection +from django.http import HttpResponse +from django.template.loader import get_template +from django.test import AsyncRequestFactory, RequestFactory +from django.test.utils import override_settings + +from debug_toolbar.forms import SignedDataForm +from debug_toolbar.middleware import DebugToolbarMiddleware, show_toolbar +from debug_toolbar.panels import Panel +from debug_toolbar.toolbar import DebugToolbar + +from .base import BaseTestCase, IntegrationTestCase +from .views import regular_view + +try: + from selenium import webdriver + from selenium.common.exceptions import NoSuchElementException + from selenium.webdriver.common.by import By + from selenium.webdriver.firefox.options import Options + from selenium.webdriver.support import expected_conditions as EC + from selenium.webdriver.support.wait import WebDriverWait +except ImportError: + webdriver = None + + +rf = RequestFactory() + + +def toolbar_store_id(): + def get_response(request): + return HttpResponse() + + toolbar = DebugToolbar(rf.get("/"), get_response) + toolbar.store() + return toolbar.store_id + + +class BuggyPanel(Panel): + def title(self): + return "BuggyPanel" + + @property + def content(self): + raise Exception + + +@override_settings(DEBUG=True) +class DebugToolbarTestCase(BaseTestCase): + def test_show_toolbar(self): + self.assertTrue(show_toolbar(self.request)) + + def test_show_toolbar_DEBUG(self): + with self.settings(DEBUG=False): + self.assertFalse(show_toolbar(self.request)) + + def test_show_toolbar_INTERNAL_IPS(self): + with self.settings(INTERNAL_IPS=[]): + self.assertFalse(show_toolbar(self.request)) + + @patch("socket.gethostbyname", return_value="127.0.0.255") + def test_show_toolbar_docker(self, mocked_gethostbyname): + with self.settings(INTERNAL_IPS=[]): + # Is true because REMOTE_ADDR is 127.0.0.1 and the 255 + # is shifted to be 1. + self.assertTrue(show_toolbar(self.request)) + mocked_gethostbyname.assert_called_once_with("host.docker.internal") + + def test_not_iterating_over_INTERNAL_IPS(self): + """Verify that the middleware does not iterate over INTERNAL_IPS in some way. + + Some people use iptools.IpRangeList for their INTERNAL_IPS. This is a class + that can quickly answer the question if the setting contain a certain IP address, + but iterating over this object will drain all performance / blow up. + """ + + class FailOnIteration: + def __iter__(self): + raise RuntimeError( + "The testcase failed: the code should not have iterated over INTERNAL_IPS" + ) + + def __contains__(self, x): + return True + + with self.settings(INTERNAL_IPS=FailOnIteration()): + response = self.client.get("/regular/basic/") + self.assertEqual(response.status_code, 200) + self.assertContains(response, "djDebug") # toolbar + + def test_should_render_panels_RENDER_PANELS(self): + """ + The toolbar should force rendering panels on each request + based on the RENDER_PANELS setting. + """ + toolbar = DebugToolbar(self.request, self.get_response) + self.assertFalse(toolbar.should_render_panels()) + toolbar.config["RENDER_PANELS"] = True + self.assertTrue(toolbar.should_render_panels()) + toolbar.config["RENDER_PANELS"] = None + self.assertTrue(toolbar.should_render_panels()) + + def test_should_render_panels_multiprocess(self): + """ + The toolbar should render the panels on each request when wsgi.multiprocess + is True or missing. + """ + request = rf.get("/") + request.META["wsgi.multiprocess"] = True + toolbar = DebugToolbar(request, self.get_response) + toolbar.config["RENDER_PANELS"] = None + self.assertTrue(toolbar.should_render_panels()) + + request.META["wsgi.multiprocess"] = False + self.assertFalse(toolbar.should_render_panels()) + + request.META.pop("wsgi.multiprocess") + self.assertTrue(toolbar.should_render_panels()) + + def test_should_render_panels_asgi(self): + """ + The toolbar not should render the panels on each request when wsgi.multiprocess + is True or missing in case of async context rather than multithreaded + wsgi. + """ + async_request = AsyncRequestFactory().get("/") + # by default ASGIRequest will have wsgi.multiprocess set to True + # but we are still assigning this to true cause this could change + # and we specifically need to check that method returns false even with + # wsgi.multiprocess set to true + async_request.META["wsgi.multiprocess"] = True + toolbar = DebugToolbar(async_request, self.get_response) + toolbar.config["RENDER_PANELS"] = None + self.assertFalse(toolbar.should_render_panels()) + + def _resolve_stats(self, path): + # takes stats from Request panel + request = rf.get(path) + panel = self.toolbar.get_panel_by_id("RequestPanel") + response = panel.process_request(request) + panel.generate_stats(request, response) + return panel.get_stats() + + def test_url_resolving_positional(self): + stats = self._resolve_stats("/resolving1/a/b/") + self.assertEqual(stats["view_urlname"], "positional-resolving") + self.assertEqual(stats["view_func"], "tests.views.resolving_view") + self.assertEqual(stats["view_args"], ("a", "b")) + self.assertEqual(stats["view_kwargs"], {}) + + def test_url_resolving_named(self): + stats = self._resolve_stats("/resolving2/a/b/") + self.assertEqual(stats["view_args"], ()) + self.assertEqual(stats["view_kwargs"], {"arg1": "a", "arg2": "b"}) + + def test_url_resolving_mixed(self): + stats = self._resolve_stats("/resolving3/a/") + self.assertEqual(stats["view_args"], ("a",)) + self.assertEqual(stats["view_kwargs"], {"arg2": "default"}) + + def test_url_resolving_bad(self): + stats = self._resolve_stats("/non-existing-url/") + self.assertEqual(stats["view_urlname"], "None") + self.assertEqual(stats["view_args"], "None") + self.assertEqual(stats["view_kwargs"], "None") + self.assertEqual(stats["view_func"], "") + + def test_middleware_response_insertion(self): + def get_response(request): + return regular_view(request, "İ") + + response = DebugToolbarMiddleware(get_response)(self.request) + # check toolbar insertion before "" + self.assertContains(response, "\n") + + def test_middleware_no_injection_when_encoded(self): + def get_response(request): + response = HttpResponse("") + response["Content-Encoding"] = "something" + return response + + response = DebugToolbarMiddleware(get_response)(self.request) + self.assertEqual(response.content, b"") + + def test_cache_page(self): + # Clear the cache before testing the views. Other tests that use cached_view + # may run earlier and cause fewer cache calls. + cache.clear() + response = self.client.get("/cached_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 3) + response = self.client.get("/cached_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) + + @override_settings(ROOT_URLCONF="tests.urls_use_package_urls") + def test_include_package_urls(self): + """Test urlsconf that uses the debug_toolbar.urls in the include call""" + # Clear the cache before testing the views. Other tests that use cached_view + # may run earlier and cause fewer cache calls. + cache.clear() + response = self.client.get("/cached_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 3) + response = self.client.get("/cached_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) + + def test_low_level_cache_view(self): + """Test cases when low level caching API is used within a request.""" + response = self.client.get("/cached_low_level_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 2) + response = self.client.get("/cached_low_level_view/") + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 1) + + def test_cache_disable_instrumentation(self): + """ + Verify that middleware cache usages before and after + DebugToolbarMiddleware are not counted. + """ + self.assertIsNone(cache.set("UseCacheAfterToolbar.before", None)) + self.assertIsNone(cache.set("UseCacheAfterToolbar.after", None)) + response = self.client.get("/execute_sql/") + self.assertEqual(cache.get("UseCacheAfterToolbar.before"), 1) + self.assertEqual(cache.get("UseCacheAfterToolbar.after"), 1) + self.assertEqual(len(response.toolbar.get_panel_by_id("CachePanel").calls), 0) + + def test_is_toolbar_request(self): + request = rf.get("/__debug__/render_panel/") + self.assertTrue(self.toolbar.is_toolbar_request(request)) + + request = rf.get("/invalid/__debug__/render_panel/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + request = rf.get("/render_panel/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + @override_settings(ROOT_URLCONF="tests.urls_invalid") + def test_is_toolbar_request_without_djdt_urls(self): + """Test cases when the toolbar urls aren't configured.""" + request = rf.get("/__debug__/render_panel/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + request = rf.get("/render_panel/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + @override_settings(ROOT_URLCONF="tests.urls_invalid") + def test_is_toolbar_request_override_request_urlconf(self): + """Test cases when the toolbar URL is configured on the request.""" + request = rf.get("/__debug__/render_panel/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + # Verify overriding the urlconf on the request is valid. + request.urlconf = "tests.urls" + self.assertTrue(self.toolbar.is_toolbar_request(request)) + + def test_is_toolbar_request_with_script_prefix(self): + """ + Test cases when Django is running under a path prefix, such as via the + FORCE_SCRIPT_NAME setting. + """ + request = rf.get("/__debug__/render_panel/", SCRIPT_NAME="/path/") + self.assertTrue(self.toolbar.is_toolbar_request(request)) + + request = rf.get("/invalid/__debug__/render_panel/", SCRIPT_NAME="/path/") + self.assertFalse(self.toolbar.is_toolbar_request(request)) + + request = rf.get("/render_panel/", SCRIPT_NAME="/path/") + self.assertFalse(self.toolbar.is_toolbar_request(self.request)) + + def test_data_gone(self): + response = self.client.get( + "/__debug__/render_panel/?store_id=GONE&panel_id=RequestPanel" + ) + self.assertIn("Please reload the page and retry.", response.json()["content"]) + + def test_sql_page(self): + response = self.client.get("/execute_sql/") + self.assertEqual( + len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 1 + ) + + def test_async_sql_page(self): + response = self.client.get("/async_execute_sql/") + self.assertEqual( + len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 2 + ) + + def test_concurrent_async_sql_page(self): + response = self.client.get("/async_execute_sql_concurrently/") + self.assertEqual( + len(response.toolbar.get_panel_by_id("SQLPanel").get_stats()["queries"]), 2 + ) + + +@override_settings(DEBUG=True) +class DebugToolbarIntegrationTestCase(IntegrationTestCase): + def test_middleware(self): + response = self.client.get("/execute_sql/") + self.assertEqual(response.status_code, 200) + self.assertContains(response, "djDebug") + + @override_settings(DEFAULT_CHARSET="iso-8859-1") + def test_non_utf8_charset(self): + response = self.client.get("/regular/ASCII/") + self.assertContains(response, "ASCII") # template + self.assertContains(response, "djDebug") # toolbar + + response = self.client.get("/regular/LÀTÍN/") + self.assertContains(response, "LÀTÍN") # template + self.assertContains(response, "djDebug") # toolbar + + def test_html5_validation(self): + response = self.client.get("/regular/HTML5/") + parser = html5lib.HTMLParser() + content = response.content + parser.parse(content) + if parser.errors: + default_msg = ["Content is invalid HTML:"] + lines = content.split(b"\n") + for position, errorcode, datavars in parser.errors: + default_msg.append(f" {html5lib.constants.E[errorcode]}" % datavars) + default_msg.append(f" {lines[position[0] - 1]!r}") + msg = self._formatMessage(None, "\n".join(default_msg)) + raise self.failureException(msg) + + def test_render_panel_checks_show_toolbar(self): + url = "/__debug__/render_panel/" + data = {"store_id": toolbar_store_id(), "panel_id": "VersionsPanel"} + + response = self.client.get(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.get( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.get(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.get( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + def test_middleware_render_toolbar_json(self): + """Verify the toolbar is rendered and data is stored for a json request.""" + self.assertEqual(len(DebugToolbar._store), 0) + + data = {"foo": "bar"} + response = self.client.get("/json_view/", data, content_type="application/json") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content.decode("utf-8"), '{"foo": "bar"}') + # Check the history panel's stats to verify the toolbar rendered properly. + self.assertEqual(len(DebugToolbar._store), 1) + toolbar = list(DebugToolbar._store.values())[0] + self.assertEqual( + toolbar.get_panel_by_id("HistoryPanel").get_stats()["data"], + {"foo": ["bar"]}, + ) + + def test_template_source_checks_show_toolbar(self): + template = get_template("basic.html") + url = "/__debug__/template_source/" + data = { + "template": template.template.name, + "template_origin": signing.dumps(template.template.origin.name), + } + + response = self.client.get(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.get( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.get(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.get( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + def test_template_source_errors(self): + url = "/__debug__/template_source/" + + response = self.client.get(url, {}) + self.assertContains( + response, '"template_origin" key is required', status_code=400 + ) + + template = get_template("basic.html") + response = self.client.get( + url, + {"template_origin": signing.dumps(template.template.origin.name) + "xyz"}, + ) + self.assertContains(response, '"template_origin" is invalid', status_code=400) + + response = self.client.get( + url, {"template_origin": signing.dumps("does_not_exist.html")} + ) + self.assertContains(response, "Template Does Not Exist: does_not_exist.html") + + def test_sql_select_checks_show_toolbar(self): + url = "/__debug__/sql_select/" + data = { + "signed": SignedDataForm.sign( + { + "sql": "SELECT * FROM auth_user", + "raw_sql": "SELECT * FROM auth_user", + "params": "{}", + "alias": "default", + "duration": "0", + } + ) + } + + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.post(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + def test_sql_explain_checks_show_toolbar(self): + url = "/__debug__/sql_explain/" + data = { + "signed": SignedDataForm.sign( + { + "sql": "SELECT * FROM auth_user", + "raw_sql": "SELECT * FROM auth_user", + "params": "{}", + "alias": "default", + "duration": "0", + } + ) + } + + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.post(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_sql_explain_postgres_union_query(self): + """ + Confirm select queries that start with a parenthesis can be explained. + """ + url = "/__debug__/sql_explain/" + data = { + "signed": SignedDataForm.sign( + { + "sql": "(SELECT * FROM auth_user) UNION (SELECT * from auth_user)", + "raw_sql": "(SELECT * FROM auth_user) UNION (SELECT * from auth_user)", + "params": "{}", + "alias": "default", + "duration": "0", + } + ) + } + + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + + @unittest.skipUnless( + connection.vendor == "postgresql", "Test valid only on PostgreSQL" + ) + def test_sql_explain_postgres_json_field(self): + url = "/__debug__/sql_explain/" + base_query = ( + 'SELECT * FROM "tests_postgresjson" WHERE "tests_postgresjson"."field" @>' + ) + query = base_query + """ '{"foo": "bar"}'""" + data = { + "signed": SignedDataForm.sign( + { + "sql": query, + "raw_sql": base_query + " %s", + "params": '["{\\"foo\\": \\"bar\\"}"]', + "alias": "default", + "duration": "0", + } + ) + } + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.post(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + def test_sql_profile_checks_show_toolbar(self): + url = "/__debug__/sql_profile/" + data = { + "signed": SignedDataForm.sign( + { + "sql": "SELECT * FROM auth_user", + "raw_sql": "SELECT * FROM auth_user", + "params": "{}", + "alias": "default", + "duration": "0", + } + ) + } + + response = self.client.post(url, data) + self.assertEqual(response.status_code, 200) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 200) + with self.settings(INTERNAL_IPS=[]): + response = self.client.post(url, data) + self.assertEqual(response.status_code, 404) + response = self.client.post( + url, data, headers={"x-requested-with": "XMLHttpRequest"} + ) + self.assertEqual(response.status_code, 404) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": True}) + def test_render_panels_in_request(self): + """ + Test that panels are are rendered during the request with + RENDER_PANELS=TRUE + """ + url = "/regular/basic/" + response = self.client.get(url) + self.assertIn(b'id="djDebug"', response.content) + # Verify the store id is not included. + self.assertNotIn(b"data-store-id", response.content) + # Verify the history panel was disabled + self.assertIn( + b'', + response.content, + ) + # Verify the a panel was rendered + self.assertIn(b"Response headers", response.content) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": False}) + def test_load_panels(self): + """ + Test that panels are not rendered during the request with + RENDER_PANELS=False + """ + url = "/execute_sql/" + response = self.client.get(url) + self.assertIn(b'id="djDebug"', response.content) + # Verify the store id is included. + self.assertIn(b"data-store-id", response.content) + # Verify the history panel was not disabled + self.assertNotIn( + b'', + response.content, + ) + # Verify the a panel was not rendered + self.assertNotIn(b"Response headers", response.content) + + def test_view_returns_template_response(self): + response = self.client.get("/template_response/basic/") + self.assertEqual(response.status_code, 200) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"DISABLE_PANELS": set()}) + def test_intercept_redirects(self): + response = self.client.get("/redirect/") + self.assertEqual(response.status_code, 200) + # Link to LOCATION header. + self.assertIn(b'href="http://github.com/regular/redirect/"', response.content) + + def test_server_timing_headers(self): + response = self.client.get("/execute_sql/") + server_timing = response["Server-Timing"] + expected_partials = [ + r'TimerPanel_utime;dur=(\d)*(\.(\d)*)?;desc="User CPU time", ', + r'TimerPanel_stime;dur=(\d)*(\.(\d)*)?;desc="System CPU time", ', + r'TimerPanel_total;dur=(\d)*(\.(\d)*)?;desc="Total CPU time", ', + r'TimerPanel_total_time;dur=(\d)*(\.(\d)*)?;desc="Elapsed time", ', + r'SQLPanel_sql_time;dur=(\d)*(\.(\d)*)?;desc="SQL 1 queries", ', + r'CachePanel_total_time;dur=0;desc="Cache 0 Calls"', + ] + for expected in expected_partials: + self.assertTrue(re.compile(expected).search(server_timing)) + + @override_settings(DEBUG_TOOLBAR_CONFIG={"RENDER_PANELS": True}) + def test_timer_panel(self): + response = self.client.get("/regular/basic/") + self.assertEqual(response.status_code, 200) + self.assertContains( + response, + '