diff --git a/.gitignore b/.gitignore index 9104d6592e..41c58947cd 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ google_fonts/ node_modules/ docs/build/ docs/_templates/layout.html +docs/_templates/footer.html diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 372834315c..6509800cf8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,7 +19,7 @@ job_docker_build: - docker build --pull -t "$CI_REGISTRY_IMAGE" -f docker/Dockerfile . - VERSION=`cat docker/rootfs/version` - docker tag "$CI_REGISTRY_IMAGE" "$CI_REGISTRY_IMAGE:$VERSION" - - docker run --rm "$CI_REGISTRY_IMAGE:$VERSION" run-tests + - docker run --rm "$CI_REGISTRY_IMAGE:$VERSION" run_tests - docker push "$CI_REGISTRY_IMAGE:$VERSION" - docker push "$CI_REGISTRY_IMAGE:latest" - docker tag "$CI_REGISTRY_IMAGE:$VERSION" registry-1.docker.io/mayanedms/mayanedms:"$VERSION" @@ -58,7 +58,7 @@ job_docker_nightly: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" -f docker/Dockerfile . - - docker run --rm "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" run-tests + - docker run --rm "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" run_tests - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" only: - nightly @@ -152,7 +152,9 @@ job_push_python: - locale-gen en_US.UTF-8 - update-locale LANG=en_US.UTF-8 - export LC_ALL=en_US.UTF-8 - - apt-get install -qq curl exiftool gcc ghostscript gnupg1 graphviz libfuse2 libjpeg-dev libmagic1 libpng-dev libtiff-dev poppler-utils libreoffice poppler-utils python-dev python-pip tesseract-ocr tesseract-ocr-deu + - apt-get install -qq curl exiftool gcc ghostscript gnupg1 graphviz libfuse2 libjpeg-dev libmagic1 libpng-dev libtiff-dev poppler-utils libreoffice poppler-utils python-dev python-virtualenv python3-dev tesseract-ocr tesseract-ocr-deu + - virtualenv venv -p /usr/bin/python3 + - . venv/bin/activate - pip install -r requirements.txt -r requirements/testing-base.txt only: - releases/all @@ -170,8 +172,9 @@ test-mysql: - mysql:8.0.3 script: - apt-get install -qq libmysqlclient-dev libssl-dev mysql-client + - . venv/bin/activate - set -a && . ./config.env && set +a - - pip install mysql-python==$PYTHON_MYSQL_VERSION + - pip install mysqlclient==$PYTHON_MYSQL_VERSION - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;" - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations tags: @@ -186,6 +189,7 @@ test-postgres: - postgres script: - apt-get install -qq libpq-dev + - . venv/bin/activate - set -a && . ./config.env && set +a - pip install psycopg2==$PYTHON_PSYCOPG2_VERSION - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations @@ -195,6 +199,7 @@ test-postgres: test-sqlite: <<: *test_base script: + - . venv/bin/activate - python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations deploy_demo: diff --git a/.tx/config b/.tx/config index 158957b39c..8058ce8df8 100644 --- a/.tx/config +++ b/.tx/config @@ -115,6 +115,12 @@ source_lang = en source_file = mayan/apps/events/locale/en/LC_MESSAGES/django.po type = PO +[mayan-edms.file_caching-3-0] +file_filter = mayan/apps/file_caching/locale//LC_MESSAGES/django.po +source_lang = en +source_file = mayan/apps/file_caching/locale/en/LC_MESSAGES/django.po +type = PO + [mayan-edms.file_metadata-3-0] file_filter = mayan/apps/file_metadata/locale//LC_MESSAGES/django.po source_lang = en @@ -217,8 +223,21 @@ source_lang = en source_file = mayan/apps/task_manager/locale/en/LC_MESSAGES/django.po type = PO +[mayan-edms.templating-3-0] +file_filter = mayan/apps/templating/locale//LC_MESSAGES/django.po +source_lang = en +source_file = mayan/apps/templating/locale/en/LC_MESSAGES/django.po +type = PO + [mayan-edms.user_management-2-0] file_filter = mayan/apps/user_management/locale//LC_MESSAGES/django.po source_lang = en source_file = mayan/apps/user_management/locale/en/LC_MESSAGES/django.po type = PO + +[mayan-edms.web_link-3-0] +file_filter = mayan/apps/web_links/locale//LC_MESSAGES/django.po +source_lang = en +source_file = mayan/apps/web_links/locale/en/LC_MESSAGES/django.po +type = PO + diff --git a/HISTORY.rst b/HISTORY.rst index 891493492b..2177ea9889 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,251 @@ +3.3.4 (2019-12-09) +================== +- Update the gunicorn worker class to synchronous. +- Update the way the BaseTransformationType metaclass is passed + to work on Python 3. +- Add locking to the file metadata document processing task. +- Update devpi-server version to 5.3.1. +- Add targets to run staging containers using RabbitMQ as + broker. +- Don't set SourceColumn to the attribute name when no help text + is defined. +- Make it clear when a setting is being overridden by an environment + variable. Add better text explanation. Change the column to a check + mark widget. +- Add icons to the smart settings links. +- Fix docker-runtest-all target. +- Fix the evaluation priority of the bootstrap settings. Closes GitLab issue + #702. Thanks to Kevin Pawsey (@kevinpawsey) for the report and the help + debugging the issue. +- Switch from librabbitmq to py-amqp. Closes GitLab issue #699. Thanks to + Rob de Canha-Knight (@rssfed23) for the report, research, and debug. +- Darken content area when opening the mobile menu. + +3.3.3 (2019-12-05) +================== +- Fix transformation label display in transformation create view. +- Remove supervisor environment variable expansion. +- Don't exit GitLab makefile target if the branch to delete doesn't exist. +- Automatically create transformations from the selection form that + doesn't have arguments. +- Add missing message displays for transformation error creation and + not argument transformation creation. +- Mark missing text for document indexing as translatable. + +3.3.2 (2019-12-05) +================== +- Improve setting migration method matching. Avoid executing + a migrations for settings with similar but shorter names. +- Fix sources app setting migrations. +- Add OCR app setting migrations. +- Improve upgrade and deployment instructions. +- Update backup chapters to refer to upstream database documentation. + +3.3.1 (2019-12-04) +================== +- Update Celery broker environment variable in the docker installer. +- Add preparestatic command to documentation. GitLab issue #692. + Thanks to Christopher S. Meiklejohn (@cmeiklejohn2) for the report. +- Add sources setting migration. +- Savesettings command fixes. +- Fix username color on mobile screens. +- Hide the multi item selection help text on mobile screens. +- Update Django to version 1.11.26. +- Remove body spacer HTML and JavaScript. Not needed with the new UI. +- Change the required permission to view the document parsing error + from "View document parsed content" to "Parse document". This way only + users with the access to affect the parsed content are the only ones + that can view what errors occurred during parsing. + +3.3 (2019-12-03) +================ +- Add support for icon shadows. +- Add icons and no-result template to the object error log view and + links. +- Use Select2 widget for the document type selection form. +- Backport the vertical main menu update. +- Backport workflow preview refactor. GitLab issue #532. +- Add support for source column inheritance. +- Add support for source column exclusion. +- Backport workflow context support. +- Backport workflow transitions field support. +- Backport workflow email action. +- Backport individual index rebuild support. +- Rename the installjavascript command to installdependencies. +- Remove database conversion command. +- Remove support for quoted configuration entries. Support unquoted, + nested dictionaries in the configuration. Requires manual + update of existing config.yml files. +- Support user specified locations for the configuration file with the + CONFIGURATION_FILEPATH (MAYAN_CONFIGURATION_FILEPATH environment variable), + and CONFIGURATION_LAST_GOOD_FILEPATH + (MAYAN_CONFIGURATION_LAST_GOOD_FILEPATH environment variable) settings. +- Move bootstrapped settings code to their own module in the smart_settings + apps. +- Remove individual database configuration options. All database + configuration is now done using MAYAN_DATABASES to mirror Django way of + doing atabase etup. +- Added support for YAML encoded environment variables to the platform + templates apps. +- Move YAML code to its own module. +- Move Django and Celery settings. +- Backport FakeStorageSubclass from versions/next. +- Remove django-environ. +- Support checking in and out multiple documents. +- Remove encapsulate helper. +- Add support for menu inheritance. +- Emphasize source column labels. +- Backport file cache manager app. +- Convert document image cache to use file cache manager app. + Add setting DOCUMENTS_CACHE_MAXIMUM_SIZE defaults to 500 MB. +- Replace djcelery and replace it with django-celery-beat. +- Update Celery to version 4.3.0 + Thanks to Jakob Haufe (@sur5r) and Jesaja Everling (@jeverling) + for much of the research and code updates. +- Support wildcard MIME type associations for the file metadata drivers. +- Update Gunicorn to use sync workers. +- Include devpi-server as a development dependency. Used to speed up + local builds of the Docker image. +- Update default Docker stack file. +- Remove Redis from the Docker image. A separate container must now + be deployed. +- Add Celery flower to the Docker image. +- Allow PIP proxying to the Docker image during build. Can be used + with the local devpi-server or other similar. +- Default Celery worker concurrency to 0 (auto). +- Set DJANGO_SETTINGS_MODULE environment variable to make it + available to sub processes. +- Add entrypoint commands to run single workers, single gunicorn + or single celery commands like "flower". +- Add platform template to return queues for a worker. +- Update the EXIFTOOL driver to run for all documents + regardless of MIME type. +- Remove task inspection from task manager app. +- Move pagination navigation inside the toolbar. +- Remove document image clear link and view. + This is now handled by the file caching app. +- Add web links app. +- Add support to display column help text + as a tooltip. +- Update numeric dashboard widget to display + thousand commas. +- Add support for disabling document pages. +- Add support for converter layers. +- Add redactions app. +- Unify all line endings to be Linux style. +- Add support for changing the system messages position. + GitLab issue #640. Thanks to Matthias Urhahn (@d4rken). +- Update Docker deploy script. Use alpine postgres version. + Support Docker networks and make it the default. + Delete the containers to allow the script to be idempotent. + Deploy a Redis container. +- Improve document version upload form. +- Use dropzone for document version upload form. +- Allow the "Execute document tools" permission to be + granted via ACL. +- Update IMAP source to be UID based. +- Add support for custom IMAP search criteria. +- Add support for executing custom IMAP STORE commands + on processed messages. +- Add support to execute the IMAP expunge command after each + processed message. +- Add support for specifing a destination IMAP mailbox for + processed messages. GitLab issue #399. Thanks to + Robert Schöftner (@robert.schoeftner). +- Support simple search disable via the new + SEARCH_DISABLE_SIMPLE_SEARCH setting. +- Move all generic API classes definitions to the + rest_api.generics module. +- Update API status code on insufficient access for the apps: + indexes, parsing, documents, metadata, ocr, permission, + user management. +- Split document app links. +- Make Postgres container wait delay configurable. +- Enable the sidebar workflow runtime link when + the workflow view permission is granted to at + least one workflow. +- Add ACL support to smart links. +- Add "no result" template to staging folder files + view. +- Split duplicated document views, links into their + own module. +- Update label and icon of the document sign form + Label updated from "Save" to "Sign". +- Document signatures API views. +- Add and improve document signatures app tests. +- Rename document_states/tests/test_workflow_actions.py to + document_states/tests/base.py. +- Added TestServerTestCaseMixin to perform mocked HTTP + requests. +- Authentication and headers added to the workflow + HTTP POST action. +- Update the timeout field of the workflow HTTP POST + action to support templates. The timeout field also + support integers, float, or empty values. +- DjangoSMTP mailer password field size increased to 192 + characters. +- Improve TestModelTestMixin. Allow specifying a base model. + Fix passing the dynamic Meta class to the test model. +- Support for proxy model permission inheritance. Proxy models + now get the permission inheritance from their base models. +- Update common.http.URL to allow passing a query dictionary. +- Add the document template sandbox feature. +- Use the generic TemplateField for the expression field + of index tree templates. +- Add document trashed event. Closes GitLab issue #608 + Thanks to Vikas Kedia (@vikaskedia) for the report. +- Add transaction handling to document model events. +- Add back support for individual database settings + for compatibility with version 3.2 settings. + These are now a fallback if the new 'DATABASES' + setting is not specified. +- Refactor the initial setting bootstrap code. +- Use timezone aware date for document statistics +- Show placeholder label on invalid action classes + Instead of throwing an error a sample label of + "Unknown action type" will be used and allow users to + delete the unknown state action. +- Add workflow action to sign documents. +- Support running specific tests inside the Docker container. + docker run --rm mayanedms/mayanedms:3.3 run_tests +- Make the statistics slug field unique. +- Self-heal statistics results model when multiple + results are created using the same slug value. + Forum topic 1404. +- Add "run_command" Docker entrypoint option to run arbitrary + Mayan management command. +- Allow specifying the queue list for the run_worker Docker + command. +- Switch default installation to use two Redis + databases. One for the message broker, and the + other to store task results. +- Complete the prefixing of template tags with the + app name. +- Remove unused template tags. +- Add support for setting migrations. +- Add setting migrations for the common, converter, documents, + file metadata, and document signatures app. +- Add document type change API endpoint. +- Change OCR API submit URL from documents/{pk}/submit + to documents/{pk}/ocr/submit. +- Add Redis based distributed lock backend. Requires one + argument: "redis_url". Example: redis://127.0.0.1:6379/0 +- Add the setting LOCK_MANAGER_BACKEND_ARGUMENTS. +- Automate documentation building dependencies. +- Add sphinx sitemap extension. +- Move the file patching code from the Dependency class to a + generalized utility of the storages app. +- Add book link to the documentation. +- Update mayan_statistics migration 0002 to rename + duplicate slugs. +- Add document index reset view. + +3.2.12 (2019-XX-XX) +=================== +- Add Mayan container port environment variable to the + docker installer. Thanks to Sergios Kefalas for the patch. +- Fix off-by-one error in document statistics. + 3.2.11 (2019-11-28) =================== - Backport transaction handling to document model events. diff --git a/Makefile b/Makefile index 182834b696..e215f705b5 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,11 @@ #!make include config.env -.PHONY: clean-pyc clean-build + +.PHONY: clean clean-pyc clean-build test help: @echo "Usage: make \n" - @awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_-]+:.*?## / { printf " * %-40s -%s\n", $$1, $$2 }' $(MAKEFILE_LIST)|sort + @awk 'BEGIN {FS = ":.*##"} /^[0-9a-zA-Z_-]+:.*?## / { printf " * %-40s -%s\n", $$1, $$2 }' $(MAKEFILE_LIST)|sort # Cleaning @@ -20,7 +21,7 @@ clean-pyc: ## Remove Python artifacts. find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + - + find . -name '__pycache__' -exec rm -R -f {} + # Testing @@ -43,10 +44,10 @@ test-all-debug: clean-pyc test-launch-postgres: @docker rm -f test-postgres || true @docker volume rm test-postgres || true - docker run -d --name test-postgres -p 5432:5432 -v test-postgres:/var/lib/postgresql/data healthcheck/postgres + docker run -d --name test-postgres -p 5432:5432 -v test-postgres:/var/lib/postgresql/data $(DOCKER_POSTGRES_IMAGE_VERSION) sudo apt-get install -q libpq-dev pip install psycopg2==$(PYTHON_PSYCOPG2_VERSION) - while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done + while ! nc -z 127.0.0.1 5432; do sleep 1; done test-with-postgres: ## MODULE= - Run tests for a single app, module or test class against a Postgres database container. test-with-postgres: test-launch-postgres @@ -63,10 +64,10 @@ test-with-postgres-all: test-launch-postgres test-launch-mysql: @docker rm -f test-mysql || true @docker volume rm test-mysql || true - docker run -d --name test-mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan -v test-mysql:/var/lib/mysql healthcheck/mysql + docker run -d --name test-mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan -v test-mysql:/var/lib/mysql $(DOCKER_MYSQL_IMAGE_VERSION) sudo apt-get install -q libmysqlclient-dev mysql-client pip install mysqlclient==$(PYTHON_MYSQL_VERSION) - while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done + while ! nc -z 127.0.0.1 3306; do sleep 1; done mysql -h 127.0.0.1 -P 3306 -uroot -e "set global character_set_server=utf8mb4;" test-with-mysql: ## MODULE= - Run tests for a single app, module or test class against a MySQL database container. @@ -85,7 +86,7 @@ test-with-mysql-all: test-launch-mysql test-launch-oracle: @docker rm -f test-oracle || true @docker volume rm test-oracle || true - docker run -d --name test-oracle -p 49160:22 -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true -v test-oracle:/u01/app/oracle wnameless/oracle-xe-11g + docker run -d --name test-oracle -p 49160:22 -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true -v test-oracle:/u01/app/oracle $(DOCKER_ORACLE_IMAGE_VERSION) # https://gist.github.com/kimus/10012910 pip install cx_Oracle==$(PYTHON_ORACLE_VERSION) while ! nc -z 127.0.0.1 49161; do sleep 1; done @@ -249,44 +250,49 @@ generate-requirements: ## Generate all requirements files from the project deped gitlab-release-documentation: ## Trigger the documentation build and publication using GitLab CI gitlab-release-documentation: git push - git push origin :releases/documentation + git push --tags + git push origin :releases/documentation || true git push origin HEAD:releases/documentation gitlab-release-docker: ## Trigger the Docker image build and publication using GitLab CI gitlab-release-docker: git push - git push origin :releases/docker + git push --tags + git push origin :releases/docker || true git push origin HEAD:releases/docker gitlab-release-python: ## Trigger the Python package build and publication using GitLab CI gitlab-release-python: git push - git push origin :releases/python + git push --tags + git push origin :releases/python || true git push origin HEAD:releases/python gitlab-release-all: ## Trigger the Python package, Docker image, and documentation build and publication using GitLab CI gitlab-release-all: git push - git push origin :releases/all + git push --tags + git push origin :releases/all || true git push origin HEAD:releases/all # Dev server runserver: ## Run the development server. - ./manage.py runserver --settings=mayan.settings.development $(ADDRPORT) + ./manage.py runserver --nothreading --settings=mayan.settings.development $(ADDRPORT) runserver_plus: ## Run the Django extension's development server. - ./manage.py runserver_plus --settings=mayan.settings.development $(ADDRPORT) + ./manage.py runserver_plus --nothreading --settings=mayan.settings.development $(ADDRPORT) shell_plus: ## Run the shell_plus command. ./manage.py shell_plus --settings=mayan.settings.development test-with-docker-services-on: ## Launch and initialize production-like services using Docker (Postgres and Redis). - docker run -d --name redis -p 6379:6379 redis - docker run -d --name postgres -p 5432:5432 postgres + docker run -d --name redis -p 6379:6379 $(DOCKER_REDIS_IMAGE_VERSION) + docker run -d --name postgres -p 5432:5432 $(DOCKER_POSTGRES_IMAGE_VERSION) while ! nc -z 127.0.0.1 6379; do sleep 1; done while ! nc -z 127.0.0.1 5432; do sleep 1; done sleep 4 + pip install psycopg2==$(PYTHON_PSYCOPG2_VERSION) redis==$(PYTHON_REDIS_VERSION) ./manage.py initialsetup --settings=mayan.settings.staging.docker test-with-docker-services-off: ## Stop and delete the Docker production-like services. @@ -297,10 +303,10 @@ test-with-docker-frontend: ## Launch a front end instance that uses the producti ./manage.py runserver --settings=mayan.settings.staging.docker test-with-docker-worker: ## Launch a worker instance that uses the production-like services. - ./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair + DJANGO_SETTINGS_MODULE=mayan.settings.staging.docker ./manage.py celery worker -A mayan -B -l INFO -O fair docker-mysql-on: ## Launch and initialize a MySQL Docker container. - docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql + docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms $(DOCKER_MYSQL_IMAGE_VERSION) while ! nc -z 127.0.0.1 3306; do sleep 1; done docker-mysql-off: ## Stop and delete the MySQL Docker container. @@ -308,7 +314,7 @@ docker-mysql-off: ## Stop and delete the MySQL Docker container. docker rm mysql docker-postgres-on: ## Launch and initialize a PostgreSQL Docker container. - docker run -d --name postgres -p 5432:5432 postgres + docker run -d --name postgres -p 5432:5432 $(DOCKER_POSTGRES_IMAGE_VERSION) while ! nc -z 127.0.0.1 5432; do sleep 1; done docker-postgres-off: ## Stop and delete the PostgreSQL Docker container. diff --git a/config.env b/config.env index da8df9da35..c0fb776fbb 100644 --- a/config.env +++ b/config.env @@ -1,9 +1,16 @@ -DOCKER_POSTGRES_IMAGE_VERSION=postgres:9.6 -DOCKER_RABBITMQ_IMAGE_VERSION=rabbitmq:3 -DOCKER_REDIS_IMAGE_VERSION=redis:5.0 -PYTHON_LIBRABBITMQ_VERSION=1.6.1 -PYTHON_MYSQL_VERSION=1.2.5 +DOCKER_MYSQL_IMAGE_VERSION=mysql:8.0 +DOCKER_ORACLE_IMAGE_VERSION=wnameless/oracle-xe-11g +DOCKER_POSTGRES_IMAGE_VERSION=postgres:9.6-alpine +DOCKER_RABBITMQ_IMAGE_VERSION=rabbitmq:3-alpine +DOCKER_REDIS_IMAGE_VERSION=redis:5.0-alpine +PYTHON_AMQP_VERSION=2.5.1 +PYTHON_FLOWER_VERSION=0.9.3 +PYTHON_LIBRABBITMQ_VERSION=2.0.0 +PYTHON_MYSQL_VERSION=1.4.4 PYTHON_ORACLE_VERSION=7.2.3 -PYTHON_PSYCOPG2_VERSION=2.7.3.2 +PYTHON_PSYCOPG2_VERSION=2.8.3 PYTHON_PSUTIL_VERSION=5.6.2 -PYTHON_REDIS_VERSION=2.10.6 +PYTHON_REDIS_VERSION=3.2.1 +SOURCE_CODE_REPOSITORY=https://gitlab.com/mayan-edms/mayan-edms/ +SOURCE_CODE_GIT=https://gitlab.com/mayan-edms/mayan-edms.git +SOURCE_CODE_ISSUES=https://gitlab.com/mayan-edms/mayan-edms/issues/ diff --git a/contrib/scripts/docker/run-tests.sh b/contrib/scripts/docker/run-tests.sh deleted file mode 100755 index 89c77edee3..0000000000 --- a/contrib/scripts/docker/run-tests.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -export DEBIAN_FRONTEND=noninteractive - -apt-get update -apt-get install -y --no-install-recommends tesseract-ocr-deu - -$MAYAN_PIP_BIN install -r ${MAYAN_INSTALL_DIR}/requirements-testing.txt - -$MAYAN_BIN test --mayan-apps --settings=mayan.settings.testing diff --git a/contrib/scripts/fix-permisssion.sh b/contrib/scripts/fix-permisssion.sh deleted file mode 100644 index 353e30f16e..0000000000 --- a/contrib/scripts/fix-permisssion.sh +++ /dev/null @@ -1,25 +0,0 @@ -!/bin/bash -Directories[0]="." - -# Setup find correctly. -export IFS=$'\n' - -# Loop through our array. -for x in ${Directories[@]} - do - # Find all directories & subdirectories - for i in $(find $x -type d) - do - # Fix Permissions - chmod -c 775 $i - chown -c www-data:www-data $i - done - - # Find all Files - for i in $(find $x -type f) - do - # Fix Permissions - chmod -c 664 $i - chown -c www-data:www-data $i - done - done diff --git a/contrib/scripts/install/development.sh b/contrib/scripts/install/development.sh deleted file mode 100644 index a8c9497c46..0000000000 --- a/contrib/scripts/install/development.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bash - -INSTALLATION_DIRECTORY=/home/vagrant/mayan-edms/ -DB_NAME=mayan_edms -DB_PASSWORD=test123 - -cat << EOF | sudo tee -a /etc/motd.tail -**********************************sudo apt - -Mayan EDMS Vagrant Development Box - -********************************** -EOF - -# Update sources -echo -e "\n -> Running apt-get update & upgrade \n" -sudo apt-get -qq update -sudo apt-get -y upgrade - -echo -e "\n -> Installing core binaries \n" -sudo apt-get -y install git-core python-virtualenv gcc python-dev libjpeg-dev libpng-dev libtiff-dev tesseract-ocr poppler-utils libreoffice - -echo -e "\n -> Cloning development branch of repository \n" -git clone /mayan-edms-repository/ $INSTALLATION_DIRECTORY -cd $INSTALLATION_DIRECTORY -git checkout development -git reset HEAD --hard - -echo -e "\n -> Setting up virtual env \n" -virtualenv venv -source venv/bin/activate - -echo -e "\n -> Installing python dependencies \n" -pip install -r requirements.txt - -echo -e "\n -> Running Mayan EDMS initial setup \n" -./manage.py initialsetup - -echo -e "\n -> Installing Redis server \n" -sudo apt-get install -y redis-server -pip install redis - -echo -e "\n -> Installing testing software \n" -pip install coverage - -echo -e "\n -> Installing MySQL \n" -sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password '$DB_PASSWORD -sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password '$DB_PASSWORD -sudo apt-get install -y mysql-server libmysqlclient-dev -# Create a passwordless root and travis users -mysql -u root -p$DB_PASSWORD -e "SET PASSWORD = PASSWORD('');" -mysql -u root -e "CREATE USER 'travis'@'localhost' IDENTIFIED BY '';GRANT ALL PRIVILEGES ON * . * TO 'travis'@'localhost';FLUSH PRIVILEGES;" -mysql -u travis -e "CREATE DATABASE $DB_NAME;" -pip install mysql-python - -echo -e "\n -> Installing PostgreSQL \n" -sudo apt-get install -y postgresql postgresql-server-dev-all -sudo -u postgres psql -c 'create database mayan_edms;' -U postgres -sudo cat > /etc/postgresql/9.3/main/pg_hba.conf << EOF -local all postgres trust - -# TYPE DATABASE USER ADDRESS METHOD - -# "local" is for Unix domain socket connections only -local all all peer -# IPv4 local connections: -host all all 127.0.0.1/32 md5 -# IPv6 local connections: -host all all ::1/128 md5 -EOF - -pip install -q psycopg2 diff --git a/contrib/scripts/install/dialog.sh b/contrib/scripts/install/dialog.sh deleted file mode 100644 index e7d929639c..0000000000 --- a/contrib/scripts/install/dialog.sh +++ /dev/null @@ -1,1733 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2017 Igor Pecovnik, igor.pecovnik@gma**.com -# -# This file is licensed under the terms of the GNU General Public -# License version 2. This program is licensed "as is" without any -# warranty of any kind, whether express or implied. - -# Functions: -# check_status -# choose_webserver -# server_conf -# install_packet -# alive_port -# alive_process -# install_basic -# create_ispconfig_configuration -# install_cups -# install_samba -# install_omv -# install_tvheadend -# install_urbackup -# install_transmission -# install_transmission_seed_armbian_torrents -# install_syncthing -# install_vpn_server -# install_vpn_client -# install_DashNTP -# install_MySQL -# install_MySQLDovecot -# install_Virus -# install_hhvm -# install_phpmyadmin -# install_apache -# install_nginx -# install_PureFTPD -# install_Bind -# install_Stats -# install_Jailkit -# install_Fail2BanDovecot -# install_Fail2BanRulesDovecot -# install_ISPConfig -# check_if_installed - -# -# load functions, local first -# -if [[ -f debian-config-jobs ]]; then source debian-config-jobs; - elif [[ -f /usr/lib/armbian-config/jobs.sh ]]; then source /usr/lib/armbian-config/jobs.sh; - else exit 1; -fi - -if [[ -f debian-config-submenu ]]; then source debian-config-submenu; - elif [[ -f /usr/lib/armbian-config/submenu.sh ]]; then source /usr/lib/armbian-config/submenu.sh; - else exit 1; -fi - -if [[ -f debian-config-functions ]]; then source debian-config-functions; - elif [[ -f /usr/lib/armbian-config/functions.sh ]]; then source /usr/lib/armbian-config/functions.sh; - else exit 1; -fi - -if [[ -f debian-config-functions-network ]]; then source debian-config-functions-network; - elif [[ -f /usr/lib/armbian-config/functions-network.sh ]]; then source /usr/lib/armbian-config/functions-network.sh; - else exit 1; -fi - - - - -# -# not sure if needed -# -export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - - - - -function check_status -{ -# -# Check if service is already installed and show it's status -# - -dialog --backtitle "$BACKTITLE" --title "Please wait" --infobox "\nLoading install info ... " 5 28 -LIST=() -LIST_CONST=3 - -# Samba -SAMBA_STATUS="$(check_if_installed samba && echo "on" || echo "off" )" -alive_port "Windows compatible file sharing" "445" "boolean" -LIST+=( "Samba" "$DESCRIPTION" "$SAMBA_STATUS" ) - -# CUPS -CUPS_STATUS="$(check_if_installed cups && echo "on" || echo "off" )" -alive_port "Common UNIX Printing System (CUPS)" "631" "boolean" -LIST+=( "CUPS" "$DESCRIPTION" "$CUPS_STATUS" ) - -# TV headend -TVHEADEND_STATUS="$(check_if_installed tvheadend && echo "on" || echo "off" )" -alive_port "TV streaming server" "9981" -LIST+=( "TV headend" "$DESCRIPTION" "$TVHEADEND_STATUS" ) - -# Synthing -SYNCTHING_STATUS="$([[ -d /usr/bin/syncthing ]] && echo "on" || echo "off" )" -alive_port "Personal cloud @syncthing.net" "8384" "boolean" -LIST+=( "Syncthing" "$DESCRIPTION" "$SYNCTHING_STATUS" ) - -# Mayan EDMS -MAYAN_STATUS="$( [[ -d /opt/mayan ]] && echo "on" || echo "off" )" -alive_port "Electronic Document Management System" "8000" "boolean" -LIST+=( "Mayan EDMS" "$DESCRIPTION" "$MAYAN_STATUS" ) - -# Exagear -if [[ "$(check_if_installed xserver-xorg && echo "on")" == "on" && "$family" == "Ubuntu" ]]; then - EXAGEAR_STATUS="$(check_if_installed exagear-armbian && echo "on" || echo "off" )" - LIST+=( "ExaGear" "32bit x86 Linux/Windows emulator trial" "$EXAGEAR_STATUS" ) -fi - -if [[ "$(dpkg --print-architecture)" == "armhf" || "$(dpkg --print-architecture)" == "amd64" ]]; then - LIST_CONST=2 - # vpn server - VPN_SERVER_STATUS="$([[ -d /usr/local/vpnserver ]] && echo "on" || echo "off" )" - LIST+=( "VPN server" "Softether VPN server" "$VPN_SERVER_STATUS" ) - # vpn client - VPN_CLIENT_STATUS="$([[ -d /usr/local/vpnclient ]] && echo "on" || echo "off" )" - LIST+=( "VPN client" "Softether VPN client" "$VPN_CLIENT_STATUS" ) -fi -# NCP -NCP_STATUS="$( [[ -d /var/www/nextcloud ]] && echo "on" || echo "off" )" -[[ "$family" != "Ubuntu" ]] && LIST+=( "NCP" "Nextcloud personal cloud" "$NCP_STATUS" ) -# OMV -OMV_STATUS="$(check_if_installed openmediavault && echo "on" || echo "off" )" -[[ "$family" != "Ubuntu" ]] && LIST+=( "OMV" "OpenMediaVault NAS solution" "$OMV_STATUS" ) && LIST_CONST=3 - -# Plex media server -PLEX_STATUS="$((check_if_installed plexmediaserver || check_if_installed plexmediaserver-installer) && echo "on" || echo "off" )" -alive_port "Plex media server" "32400" -LIST+=( "Plex" "$DESCRIPTION" "$PLEX_STATUS" ) - -# Radarr -RADARR_STATUS="$([[ -d /opt/Radarr ]] && echo "on" || echo "off" )" -alive_port "Movies downloading server" "7878" -LIST+=( "Radarr" "$DESCRIPTION" "$RADARR_STATUS" ) - -# Sonarr -SONARR_STATUS="$([[ -d /opt/NzbDrone ]] && echo "on" || echo "off" )" -alive_port "TV shows downloading server" "8989" -LIST+=( "Sonarr" "$DESCRIPTION" "$SONARR_STATUS" ) - -# MINIdlna -MINIDLNA_STATUS="$(check_if_installed minidlna && echo "on" || echo "off" )" -alive_port "Lightweight DLNA/UPnP-AV server" "8200" "boolean" -LIST+=( "Minidlna" "$DESCRIPTION" "$MINIDLNA_STATUS" ) - -# Pi hole -PI_HOLE_STATUS="$([[ -d /etc/pihole ]] && echo "on" || echo "off" )" -alive_process "Ad blocker" "pihole-FTL" -LIST+=( "Pi hole" "$DESCRIPTION" "$PI_HOLE_STATUS" ) - -# Transmission -TRANSMISSION_STATUS="$(check_if_installed transmission-daemon && echo "on" || echo "off" )" -alive_port "Torrent download server" "9091" "boolean" -LIST+=( "Transmission" "$DESCRIPTION" "$TRANSMISSION_STATUS" ) - - -# UrBackup -URBACKUP_STATUS="$((check_if_installed urbackup-server || check_if_installed urbackup-server-dbg) && echo "on" || echo "off" )" -alive_port "Client/server backup system" "51413" "boolean" -LIST+=( "UrBackup" "$DESCRIPTION" "$URBACKUP_STATUS" ) - - -# ISPconfig -ISPCONFIG_STATUS="$([[ -d /usr/local/ispconfig ]] && echo "on" || echo "off" )" -LIST+=( "ISPConfig" "SMTP mail, IMAP, POP3 & LAMP/LEMP web server" "$ISPCONFIG_STATUS" ) -} - - - - -function choose_webserver -{ -# -# Target web server selection -# -check_if_installed openmediavault -case $? in - 0) - # OMV installed, prevent switching from nginx to apache which would trash OMV installation - server="nginx" - ;; - *) - dialog --title "Choose a webserver" --backtitle "$BACKTITLE" --yes-label "Apache" --no-label "Nginx" \ - --yesno "\nChoose a web server which you are familiar with. They both work almost the same." 8 70 - response=$? - case $response in - 0) server="apache";; - 1) server="nginx";; - 255) exit;; - esac - ;; -esac -} - - - - -function server_conf -{ -# -# Add some reqired date for installation -# -exec 3>&1 -dialog --title "Server configuration" --separate-widget $'\n' --ok-label "Install" --backtitle "$BACKTITLE" \ ---form "\nPlease fill out this form:\n " \ -12 70 0 \ -"Your FQDN for $serverip:" 1 1 "$hostnamefqdn" 1 31 32 0 \ -"Mysql root password:" 2 1 "$mysql_pass" 2 31 32 0 \ -2>&1 1>&3 | { - -read -r hostnamefqdn -read -r mysql_pass -echo $mysql_pass > ${TEMP_DIR}/mysql_pass -echo $hostnamefqdn > ${TEMP_DIR}/hostnamefqdn -# end -} -exec 3>&- -# read variables back -read MYSQL_PASS < ${TEMP_DIR}/mysql_pass -read HOSTNAMEFQDN < ${TEMP_DIR}/hostnamefqdn -} - - - - -install_packet () -{ -# -# Install missing packets -# -i=0 -j=1 -IFS=" " -declare -a PACKETS=($1) -#skupaj=$(apt-get -s -y -qq install $1 | wc -l) -skupaj=${#PACKETS[@]} -while [[ $i -lt $skupaj ]]; do -procent=$(echo "scale=2;($j/$skupaj)*100"|bc) - x=${PACKETS[$i]} - if [ $(dpkg-query -W -f='${Status}' $x 2>/dev/null | grep -c "ok installed") -eq 0 ]; then - printf '%.0f\n' $procent | dialog \ - --backtitle "$BACKTITLE" \ - --title "Installing" \ - --gauge "\n$2\n\n$x" 10 70 - if [ "$(DEBIAN_FRONTEND=noninteractive apt-get -qq -y install $x >${TEMP_DIR}/install.log 2>&1 || echo 'Installation failed' \ - | grep 'Installation failed')" != "" ]; then - echo -e "[\e[0;31m error \x1B[0m] Installation failed" - tail ${TEMP_DIR}/install.log - exit - fi - fi - i=$[$i+1] - j=$[$j+1] -done -echo "" -} - - -alive_port () -{ -# -# Displays URL to the service $1 on port $2 or just that is active if $3 = boolean -# -DEFAULT_ADAPTER=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)') -LOCALIPADD=$(ip -4 addr show dev $DEFAULT_ADAPTER | awk '/inet/ {print $2}' | cut -d'/' -f1) -if [[ -n $(netstat -lnt | awk '$6 == "LISTEN" && $4 ~ ".'$2'"') ]]; then - if [[ $3 == boolean ]]; then - DESCRIPTION="$1 is \Z1active\Z0"; - else - DESCRIPTION="Active on http://${LOCALIPADD}:\Z1$2\Z0"; - fi -else -DESCRIPTION="$1"; -fi -} - - - -alive_process () -{ -# -# check if process name $2 is running. Display it's name $1 or $1 is active if active -# -if pgrep -x "$2" > /dev/null 2>&1; then DESCRIPTION="$1 is \Z1active\Z0"; else DESCRIPTION="$1"; fi -} - - - - - - - -install_basic (){ -# -# Set hostname, FQDN, add to sources list -# -IFS=" " -set ${HOSTNAMEFQDN//./ } -HOSTNAMESHORT="$1" -cp /etc/hosts /etc/hosts.backup -cp /etc/hostname /etc/hostname.backup -# create new -echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts -echo "${serverIP} ${HOSTNAMEFQDN} ${HOSTNAMESHORT} #ispconfig " >> /etc/hosts -echo "$HOSTNAMESHORT" > /etc/hostname -/etc/init.d/hostname.sh start >/dev/null 2>&1 -hostnamectl set-hostname $HOSTNAMESHORT -if [[ $family == "Ubuntu" ]]; then - # set hostname in Ubuntu - hostnamectl set-hostname $HOSTNAMESHORT - # disable AppArmor - if [[ -n $(service apparmor status | grep -w active | grep -w running) ]]; then - service apparmor stop - update-rc.d -f apparmor remove - apt-get -y -qq remove apparmor apparmor-utils - fi -else - grep -q "contrib" /etc/apt/sources.list || sed -i 's|main|main contrib|' /etc/apt/sources.list - grep -q "non-free" /etc/apt/sources.list || sed -i 's|contrib|contrib non-free|' /etc/apt/sources.list - grep -q "deb http://ftp.debian.org/debian jessie-backports main" /etc/apt/sources.list || echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list - debconf-apt-progress -- apt-get update -fi -} - - - - -create_ispconfig_configuration (){ -# -# ISPConfig autoconfiguration -# -cat > ${TEMP_DIR}/isp.conf.php < -EOF -} - - - -install_cups () -{ -# -# Install printer system -# -debconf-apt-progress -- apt-get -y install cups lpr cups-filters -# cups-filters if jessie -sed -e 's/Listen localhost:631/Listen 631/g' -i /etc/cups/cupsd.conf -sed -e 's//\nallow $SUBNET/g' -i /etc/cups/cupsd.conf -sed -e 's//\nallow $SUBNET/g' -i /etc/cups/cupsd.conf -sed -e 's//\nallow $SUBNET/g' -i /etc/cups/cupsd.conf -service cups restart -service samba restart | service smbd restart >/dev/null 2>&1 -} - - - - -install_samba () -{ -# -# install Samba file sharing -# -local SECTION="Samba" -SMBUSER=$(whiptail --inputbox "What is your samba username?" 8 78 $SMBUSER --title "$SECTION" 3>&1 1>&2 2>&3) -exitstatus=$?; if [ $exitstatus = 1 ]; then exit 1; fi -SMBPASS=$(whiptail --inputbox "What is your samba password?" 8 78 $SMBPASS --title "$SECTION" 3>&1 1>&2 2>&3) -exitstatus=$?; if [ $exitstatus = 1 ]; then exit 1; fi -SMBGROUP=$(whiptail --inputbox "What is your samba group?" 8 78 $SMBGROUP --title "$SECTION" 3>&1 1>&2 2>&3) -exitstatus=$?; if [ $exitstatus = 1 ]; then exit 1; fi -# -debconf-apt-progress -- apt-get -y install samba samba-common-bin samba-vfs-modules -useradd $SMBUSER -echo -ne "$SMBPASS\n$SMBPASS\n" | passwd $SMBUSER >/dev/null 2>&1 -echo -ne "$SMBPASS\n$SMBPASS\n" | smbpasswd -a -s $SMBUSER >/dev/null 2>&1 -service samba stop | service smbd stop >/dev/null 2>&1 -cp /etc/samba/smb.conf /etc/samba/smb.conf.stock -cat > /etc/samba/smb.conf.tmp << EOF -[global] - workgroup = SMBGROUP - server string = %h server - hosts allow = SUBNET - log file = /var/log/samba/log.%m - max log size = 1000 - syslog = 0 - panic action = /usr/share/samba/panic-action %d - load printers = yes - printing = cups - printcap name = cups - min receivefile size = 16384 - write cache size = 524288 - getwd cache = yes - socket options = TCP_NODELAY IPTOS_LOWDELAY - -[printers] - comment = All Printers - path = /var/spool/samba - browseable = no - public = yes - guest ok = yes - writable = no - printable = yes - printer admin = SMBUSER - -[print$] - comment = Printer Drivers - path = /etc/samba/drivers - browseable = yes - guest ok = no - read only = yes - write list = SMBUSER - -[ext] - comment = Storage - path = /ext - writable = yes - public = no - valid users = SMBUSER - force create mode = 0644 -EOF -sed -i "s/SMBGROUP/$SMBGROUP/" /etc/samba/smb.conf.tmp -sed -i "s/SMBUSER/$SMBUSER/" /etc/samba/smb.conf.tmp -sed -i "s/SUBNET/$SUBNET/" /etc/samba/smb.conf.tmp -dialog --backtitle "$BACKTITLE" --title "Review samba configuration" --no-collapse --editbox /etc/samba/smb.conf.tmp 30 0 2> /etc/samba/smb.conf.tmp.out -if [[ $? = 0 ]]; then - mv /etc/samba/smb.conf.tmp.out /etc/samba/smb.conf - install -m 755 -g $SMBUSER -o $SMBUSER -d /ext - service service smbd stop >/dev/null 2>&1 - sleep 3 - service service smbd start >/dev/null 2>&1 -fi -} - -install_ncp (){ - curl -sSL https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh | bash -} - -install_omv (){ -# -# On Debian install OpenMediaVault 3 (Jessie) or 4 (Stretch) -# -# TODO: Some OMV packages lack authentication - -if [[ "$family" == "Ubuntu" ]]; then - dialog --backtitle "$BACKTITLE" --title "Dependencies not met" --msgbox "\nOpenMediaVault can only be installed on Debian." 7 52 - sleep 5 - exit 1 -fi - -case $distribution in - jessie) - OMV_Name="erasmus" - OMV_EXTRAS_URL="https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/openmediavault-omvextrasorg_latest_all3.deb" - ;; - stretch) - OMV_Name="arrakis" - OMV_EXTRAS_URL="https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/openmediavault-omvextrasorg_latest_all4.deb" - ;; -esac - -systemctl status log2ram >/dev/null 2>&1 && (systemctl stop log2ram ; systemctl disable log2ram >/dev/null 2>&1; rm /etc/cron.daily/log2ram) -export APT_LISTCHANGES_FRONTEND=none -if [ -f /etc/armbian-release ]; then - . /etc/armbian-release -else - sed -i "s/^# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen - locale-gen -fi - -# preserve cpufrequtils settings: -if [ -f /etc/default/cpufrequtils ]; then - . /etc/default/cpufrequtils -fi - -cat > /etc/apt/sources.list.d/openmediavault.list << EOF -deb https://openmediavault.github.io/packages/ ${OMV_Name} main - -## Uncomment the following line to add software from the proposed repository. -deb https://openmediavault.github.io/packages/ ${OMV_Name}-proposed main - -## This software is not part of OpenMediaVault, but is offered by third-party -## developers as a service to OpenMediaVault users. -# deb https://openmediavault.github.io/packages/ ${OMV_Name} partner -EOF - -debconf-apt-progress -- apt-get update - -read HOSTNAME /dev/null | awk -F" " '/additional disk space will be used/ {print $4}') -SPACE_AVAIL=$(df -k / | awk -F" " '/\/$/ {printf ("%0.0f",$4/1200); }') -if [ ${SPACE_AVAIL} -lt ${SPACE_NEEDED} ]; then - dialog --backtitle "$BACKTITLE" --title "No space left on device" --msgbox "\nOpenMediaVault needs ${SPACE_NEEDED} MB for installation while only ${SPACE_AVAIL} MB are available." 7 52 - exit 1 -fi -apt-get --allow-unauthenticated install openmediavault-keyring -apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7AA630A1EDEE7D73 -debconf-apt-progress -- apt-get -y --allow-unauthenticated --fix-missing --no-install-recommends \ - -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install openmediavault postfix dirmngr -FILE="${TEMP_DIR}/omv_extras.deb"; wget "$OMV_EXTRAS_URL" -qO $FILE && dpkg -i $FILE ; rm $FILE -# /usr/sbin/omv-update -debconf-apt-progress -- apt-get update -debconf-apt-progress -- apt-get --yes --force-yes --fix-missing --auto-remove --allow-unauthenticated \ - --show-upgraded --option DPkg::Options::="--force-confold" dist-upgrade - -# Install flashmemory plugin and netatalk by default, use nice logo for the latter, -# disable OMV monitoring by default -. /usr/share/openmediavault/scripts/helper-functions -debconf-apt-progress -- apt-get -y --fix-missing --no-install-recommends --auto-remove install openmediavault-flashmemory openmediavault-netatalk -AFP_Options="mimic model = Macmini" -SMB_Options="min receivefile size = 16384\nwrite cache size = 524288\ngetwd cache = yes\nsocket options = TCP_NODELAY IPTOS_LOWDELAY" -xmlstarlet ed -L -u "/config/services/afp/extraoptions" -v "$(echo -e "${AFP_Options}")" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/services/smb/extraoptions" -v "$(echo -e "${SMB_Options}")" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/services/flashmemory/enable" -v "1" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/services/ssh/enable" -v "1" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/services/ssh/permitrootlogin" -v "1" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/system/time/ntp/enable" -v "1" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/system/time/timezone" -v "${TZ}" ${OMV_CONFIG_FILE} -xmlstarlet ed -L -u "/config/system/network/dns/hostname" -v "${HOSTNAME}" ${OMV_CONFIG_FILE} -/usr/sbin/omv-rpc -u admin "perfstats" "set" '{"enable":false}' -/usr/sbin/omv-rpc -u admin "config" "applyChanges" '{ "modules": ["monit","rrdcached","collectd"],"force": true }' -sed -i 's|-j /var/lib/rrdcached/journal/ ||' /etc/init.d/rrdcached -/sbin/folder2ram -enablesystemd 2>/dev/null - -# Prevent accidentally destroying board performance by clicking around in OMV UI since -# OMV sets 'powersave' governor when touching 'Power Management' settings. -if [ ! -f /etc/default/cpufrequtils ]; then - DEFAULT_GOV="$(zgrep "^CONFIG_CPU_FREQ_DEFAULT_GOV_" /proc/config.gz 2>/dev/null | sed 's/CONFIG_CPU_FREQ_DEFAULT_GOV_//')" - if [ -n "${DEFAULT_GOV}" ]; then - GOVERNOR=$(cut -f1 -d= <<<"${DEFAULT_GOV}" | tr '[:upper:]' '[:lower:]') - else - GOVERNOR=ondemand - fi - MIN_SPEED="0" - MAX_SPEED="0" -fi -echo -e "OMV_CPUFREQUTILS_GOVERNOR=${GOVERNOR}" >>/etc/default/openmediavault -echo -e "OMV_CPUFREQUTILS_MINSPEED=${MIN_SPEED}" >>/etc/default/openmediavault -echo -e "OMV_CPUFREQUTILS_MAXSPEED=${MAX_SPEED}" >>/etc/default/openmediavault -for i in netatalk samba flashmemory ssh ntp timezone monit rrdcached collectd cpufrequtils ; do - /usr/sbin/omv-mkconf $i -done - -# Hardkernel Cloudshell 1 and 2 fixes, read the whole thread for details: -# https://forum.openmediavault.org/index.php/Thread/17855 -lsusb | grep -q -i "05e3:0735" && sed -i "/exit 0/i echo 20 > /sys/class/block/sda/queue/max_sectors_kb" /etc/rc.local -if [ "X${BOARD}" = "Xodroidxu4" ]; then - HMP_Fix='; taskset -c -p 4-7 $i ' - apt install -y i2c-tools - /usr/sbin/i2cdetect -y 1 | grep -q "60: 60" - if [ $? -eq 0 ]; then - add-apt-repository -y ppa:kyle1117/ppa - sed -i 's/jessie/xenial/' /etc/apt/sources.list.d/kyle1117-ppa-jessie.list - apt install -y -q cloudshell-lcd odroid-cloudshell cloudshell2-fan & - lsusb -v | awk -F"__" '/RANDOM_/ {print $2}' | head -n1 | while read ; do - echo "ATTRS{idVendor}==\"152d\", ATTRS{idProduct}==\"0561\", KERNEL==\"sd*\", ENV{DEVTYPE}==\"disk\", SYMLINK=\"disk/by-id/\$env{ID_BUS}-CloudShell2-${REPLY}-\$env{ID_MODEL}\"" >> /etc/udev/rules.d/99-cloudshell2.rules - echo "ATTRS{idVendor}==\"152d\", ATTRS{idProduct}==\"0561\", KERNEL==\"sd*\", ENV{DEVTYPE}==\"partition\", SYMLINK=\"disk/by-id/\$env{ID_BUS}-CloudShell2-${REPLY}-\$env{ID_MODEL}-part%n\"" >> /etc/udev/rules.d/99-cloudshell2.rules - done - fi -fi - -# Add a cron job to make NAS processes more snappy -systemctl status rsyslog >/dev/null 2>&1 -if [ $? -eq 0 ]; then - echo ':msg, contains, "do ionice -c1" ~' >/etc/rsyslog.d/omv-armbian.conf - systemctl restart rsyslog -fi -echo "* * * * * root for i in \`pgrep \"ftpd|nfsiod|smbd|afpd|cnid\"\` ; do ionice -c1 -p \$i ${HMP_Fix}; done >/dev/null 2>&1" >/etc/cron.d/make_nas_processes_faster -chmod 600 /etc/cron.d/make_nas_processes_faster - -/usr/sbin/omv-initsystem -} - - - - -install_tvheadend () -{ -# -# TVheadend https://tvheadend.org/ unofficial port https://tvheadend.org/boards/5/topics/21528 -# -if [ ! -f /etc/apt/sources.list.d/tvheadend.list ]; then - echo "deb https://dl.bintray.com/tvheadend/deb xenial release-4.2" >> /etc/apt/sources.list.d/tvheadend.list - apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61 >/dev/null 2>&1 -fi - -if [[ $distribution == "stretch" ]]; then - URL="http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u8_"$(dpkg --print-architecture)".deb" - fancy_wget "$URL" "-O ${TEMP_DIR}/package.deb" - dpkg -i ${TEMP_DIR}/package.deb >/dev/null 2>&1 - local pkglist="libssl-doc zlib1g-dev tvheadend xmltv-util" -else - local pkglist="libssl-doc libssl1.0.0 zlib1g-dev tvheadend xmltv-util" -fi - -debconf-apt-progress -- apt-get update -debconf-apt-progress -- apt-get -y install $pkglist -} - - - - -install_urbackup () -{ -# -# Client/server backup system https://www.urbackup.org/ -# -if [ "$(dpkg --print-architecture | grep arm64)" == "arm64" ]; then local arch=armhf; else local arch=$(dpkg --print-architecture); fi -PREFIX="http://hndl.urbackup.org/Server/latest/" -URL="http://hndl.urbackup.org/Server/latest/"$(wget -q $PREFIX -O - | html2text -width 120 | grep deb | awk ' { print $3 }' | grep $arch) -fancy_wget "$URL" "-O ${TEMP_DIR}/package.deb" -dpkg -i ${TEMP_DIR}/package.deb >/dev/null 2>&1 -apt-get -yy -f install -} - - - - -install_transmission () -{ -# -# transmission -# -install_packet "debconf-utils unzip build-essential html2text apt-transport-https" "Downloading dependencies" -install_packet "transmission-cli transmission-common transmission-daemon" "Install torrent server" -# systemd workaround -# https://forum.armbian.com/index.php?/topic/4017-programs-does-not-start-automatically-at-boot/ -sed -e 's/exit 0//g' -i /etc/rc.local - cat >> /etc/rc.local <<"EOF" -service transmission-daemon restart -exit 0 -EOF -} - - - -install_transmission_seed_armbian_torrents () -{ -# -# seed our torrents -# -# adjust network buffers if necessary -rmem_recommended=4194304 -wmem_recommended=1048576 -rmem_actual=$(sysctl net.core.rmem_max | awk -F" " '{print $3}') -if [ ${rmem_actual} -lt ${rmem_recommended} ]; then - grep -q net.core.rmem_max /etc/sysctl.conf && \ - sed -i "s/net.core.rmem_max =.*/net.core.rmem_max = ${rmem_recommended}/" /etc/sysctl.conf || \ - echo "net.core.rmem_max = ${rmem_recommended}" >> /etc/sysctl.conf -fi -wmem_actual=$(sysctl net.core.wmem_max | awk -F" " '{print $3}') -if [ ${wmem_actual} -lt ${wmem_recommended} ]; then - grep -q net.core.wmem_max /etc/sysctl.conf && \ - sed -i "s/net.core.wmem_max =.*/net.core.wmem_max = ${wmem_recommended}/" /etc/sysctl.conf || \ - echo "net.core.wmem_max = ${wmem_recommended}" >> /etc/sysctl.conf -fi -/sbin/sysctl -p -# create cron job for daily sync with official Armbian torrents -cat > /etc/cron.daily/seed-armbian-torrent <<"EOF" -#!/bin/bash -# -# armbian torrents auto update -# -# download latest torrent pack -wget -qO- -O ${TEMP_DIR}/armbian-torrents.zip https://dl.armbian.com/torrent/all-torrents.zip -# test zip for corruption -unzip -t ${TEMP_DIR}/armbian-torrents.zip >/dev/null 2>&1 -[[ $? -ne 0 ]] && echo "Error in zip" && exit -# extract zip -unzip -o ${TEMP_DIR}/armbian-torrents.zip -d ${TEMP_DIR}/torrent-tmp >/dev/null 2>&1 -# create list of current active torrents -transmission-remote -n 'transmission:transmission' -l | sed '1d; $d' > ${TEMP_DIR}/torrent-tmp/active.torrents -# loop and add/update torrent files -for f in ${TEMP_DIR}/torrent-tmp/*.torrent; do - transmission-remote -n 'transmission:transmission' -a $f > /dev/null 2>&1 - # remove added from the list - pattern="${f//.torrent}"; pattern="${pattern##*/}"; - sed -i "/$pattern/d" ${TEMP_DIR}/torrent-tmp/active.torrents -done -# remove old armbian torrents -while read i; do - [[ $i == *Armbian_* ]] && transmission-remote -n 'transmission:transmission' -t $(echo "$i" | awk '{print $1}';) --remove-and-delete -done < ${TEMP_DIR}/torrent-tmp/active.torrents -# remove temporally files and direcotories -EOF -chmod +x /etc/cron.daily/seed-armbian-torrent -/etc/cron.daily/seed-armbian-torrent & -} - - - - -install_syncthing () -{ -# -# Install Personal cloud https://syncthing.net/ -# - -if [ "$(dpkg --print-architecture | grep armhf)" == "armhf" ]; then - local filename="linux-arm" -elif [ "$(dpkg --print-architecture | grep arm64)" == "arm64" ]; then - local filename="linux-arm64" -else - local filename="linux-amd64" -fi -mkdir -p /usr/bin/syncthing -wgeturl=$(curl -s "https://api.github.com/repos/syncthing/syncthing/releases" | grep $filename | grep 'browser_download_url' | head -1 | cut -d \" -f 4) -fancy_wget "$wgeturl" "-O ${TEMP_DIR}/syncthing.tgz" -wgeturl=$(curl -s "https://api.github.com/repos/syncthing/syncthing-inotify/releases" | grep $filename | grep 'browser_download_url' | head -1 | cut -d \" -f 4) -fancy_wget "$wgeturl" "-O ${TEMP_DIR}/syncthing-inotify.tgz" -tar xf ${TEMP_DIR}/syncthing.tgz -C ${TEMP_DIR} -tar xf ${TEMP_DIR}/syncthing-inotify.tgz -C /usr/bin -cp -R ${TEMP_DIR}/syncthing-*/syncthing /usr/bin -cp ${TEMP_DIR}/syncthing-*/etc/linux-systemd/system/syncthing* /etc/systemd/system/ -cp /etc/systemd/system/syncthing@.service /etc/systemd/system/syncthing-inotify@.service - -# adjust service for inotify -sed -i "s/^Description=.*/Description=Syncthing Inotify File Watcher/" /etc/systemd/system/syncthing-inotify@.service -sed -i "s/^After=.*/After=network.target syncthing.service/" /etc/systemd/system/syncthing-inotify@.service -sed -i "s/^ExecStart=.*/ExecStart=\/usr\/bin\/syncthing-inotify -logfile=\/var\/log\/syncthing-inotify.log -logflags=3/" /etc/systemd/system/syncthing-inotify@.service -sed -i "/^\[Install\]/a Requires=syncthing.service" /etc/systemd/system/syncthing-inotify@.service - -# increase open file limit -if !(grep -qs "fs.inotify.max_user_watches=204800" "/etc/sysctl.conf");then - echo -e "fs.inotify.max_user_watches=204800" | tee -a /etc/sysctl.conf -fi -add_choose_user -systemctl enable syncthing@${CHOSEN_USER}.service >/dev/null 2>&1 -systemctl start syncthing@${CHOSEN_USER}.service >/dev/null 2>&1 -systemctl enable syncthing-inotify@${CHOSEN_USER}.service >/dev/null 2>&1 -systemctl start syncthing-inotify@${CHOSEN_USER}.service >/dev/null 2>&1 -} - - - - -install_plex_media_server () -{ -# -# Media server -# -if [ "$(dpkg --print-architecture | grep armhf)" == "armhf" ]; then - echo -e "deb [arch=armhf] http://dev2day.de/pms/ stretch main" > /etc/apt/sources.list.d/plex.list - wget -q -O - http://dev2day.de/pms/dev2day-pms.gpg.key | apt-key add - >/dev/null 2>&1 - debconf-apt-progress -- apt-get update - debconf-apt-progress -- apt-get -y install plexmediaserver-installer -elif [ "$(dpkg --print-architecture | grep arm64)" == "arm64" ]; then - echo -e "deb [arch=armhf] http://dev2day.de/pms/ stretch main" > /etc/apt/sources.list.d/plex.list - wget -q -O - http://dev2day.de/pms/dev2day-pms.gpg.key | apt-key add - >/dev/null 2>&1 - debconf-apt-progress -- apt-get update - debconf-apt-progress -- apt-get -y install binutils:armhf plexmediaserver-installer:armhf -else - fancy_wget "https://downloads.plex.tv/plex-media-server/1.12.3.4973-215c28d86/plexmediaserver_1.12.3.4973-215c28d86_amd64.deb" "-O ${TEMP_DIR}/package.deb" - dpkg -i ${TEMP_DIR}/package.deb >/dev/null 2>&1 -fi -} - - - - -install_radarr () -{ -# -# Automatically downloading movies -# -debconf-apt-progress -- apt-get update -debconf-apt-progress -- apt-get -y install mono-devel mediainfo libmono-cil-dev -wgeturl=$(curl -s "https://api.github.com/repos/Radarr/Radarr/releases" | grep 'linux.tar.gz' | grep 'browser_download_url' | head -1 | cut -d \" -f 4) -fancy_wget "$wgeturl" "-O ${TEMP_DIR}/radarr.tgz" -tar xf ${TEMP_DIR}/radarr.tgz -C /opt -cat << _EOF_ > /etc/systemd/system/radarr.service -[Unit] -Description=Radarr Daemon -After=network.target -[Service] -User=root -Type=simple -ExecStart=/usr/bin/mono --debug /opt/Radarr/Radarr.exe -nobrowser -[Install] -WantedBy=multi-user.target -_EOF_ -systemctl enable radarr >/dev/null 2>&1 -systemctl start radarr -} - - - - -install_sonarr () -{ -# -# Automatically downloading TV shows -# -if [ "$(dpkg --print-architecture | grep arm64)" == "arm64" ]; then - debconf-apt-progress -- apt-get update - debconf-apt-progress -- apt-get -y install mono-complete mediainfo - fancy_wget "http://update.sonarr.tv/v2/develop/mono/NzbDrone.develop.tar.gz" "-O ${TEMP_DIR}/sonarr.tgz" - tar xf ${TEMP_DIR}/sonarr.tgz -C /opt -else - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FDA5DFFC >/dev/null 2>&1 - echo -e "deb https://apt.sonarr.tv/ develop main" > /etc/apt/sources.list.d/sonarr.list - debconf-apt-progress -- apt-get update - debconf-apt-progress -- apt-get -y install nzbdrone -fi -cat << _EOF_ > /etc/systemd/system/sonarr.service -[Unit] -Description=Sonarr (NzbDrone) Daemon -After=network.target -[Service] -User=root -Type=simple -ExecStart=/usr/bin/mono --debug /opt/NzbDrone/NzbDrone.exe -nobrowser -[Install] -WantedBy=multi-user.target -_EOF_ -systemctl enable sonarr >/dev/null 2>&1 -systemctl start sonarr -} - - - - -install_vpn_server () -{ -# -# Script downloads latest stable -# -cd ${TEMP_DIR} -PREFIX="http://www.softether-download.com/files/softether/" -install_packet "debconf-utils unzip build-essential html2text apt-transport-https" "Downloading basic packages" -URL=$(wget -q $PREFIX -O - | html2text | grep rtm | awk ' { print $(NF) }' | tail -1) -SUFIX="${URL/-tree/}" -if [ "$(dpkg --print-architecture | grep armhf)" != "" ]; then -DLURL=$PREFIX$URL"/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-$SUFIX-linux-arm_eabi-32bit.tar.gz" -else -install_packet "gcc-multilib" "Install libraries" -DLURL=$PREFIX$URL"/Linux/SoftEther_VPN_Server/32bit_-_Intel_x86/softether-vpnserver-$SUFIX-linux-x86-32bit.tar.gz" -fi -wget -q $DLURL -O - | tar -xz -cd vpnserver -make i_read_and_agree_the_license_agreement | dialog --backtitle "$BACKTITLE" --title "Compiling SoftEther VPN" --progressbox $TTY_Y $TTY_X -cd .. -cp -R vpnserver /usr/local -cd /usr/local/vpnserver/ -chmod 600 * -chmod 700 vpncmd -chmod 700 vpnserver -if [[ -d /run/systemd/system/ ]]; then -cat </lib/systemd/system/ethervpn.service -[Unit] -Description=VPN service - -[Service] -Type=oneshot -ExecStart=/usr/local/vpnserver/vpnserver start -ExecStop=/usr/local/vpnserver/vpnserver stop -RemainAfterExit=yes - -[Install] -WantedBy=multi-user.target -EOT -systemctl enable ethervpn.service -service ethervpn start - -else - -cat < /etc/init.d/vpnserver -#!/bin/sh -### BEGIN INIT INFO -# Provides: vpnserver -# Required-Start: \$remote_fs \$syslog -# Required-Stop: \$remote_fs \$syslog -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start daemon at boot time -# Description: Enable Softether by daemon. -### END INIT INFO -DAEMON=/usr/local/vpnserver/vpnserver -LOCK=/var/lock/vpnserver -test -x $DAEMON || exit 0 -case "\$1" in -start) -\$DAEMON start -touch \$LOCK -;; -stop) -\$DAEMON stop -rm \$LOCK -;; -restart) -\$DAEMON stop -sleep 3 -\$DAEMON start -;; -*) -echo "Usage: \$0 {start|stop|restart}" -exit 1 -esac -exit 0 -EOT -chmod 755 /etc/init.d/vpnserver -mkdir /var/lock/subsys -update-rc.d vpnserver defaults >> $logfile -/etc/init.d/vpnserver start -fi -} - - - - -install_vpn_client () -{ -# -# Script downloads latest stable -# -cd ${TEMP_DIR} -PREFIX="http://www.softether-download.com/files/softether/" -install_packet "debconf-utils unzip build-essential html2text apt-transport-https" "Downloading basic packages" -URL=$(wget -q $PREFIX -O - | html2text | grep rtm | awk ' { print $(NF) }' | tail -1) -SUFIX="${URL/-tree/}" -if [ "$(dpkg --print-architecture | grep armhf)" != "" ]; then -DLURL=$PREFIX$URL"/Linux/SoftEther_VPN_Client/32bit_-_ARM_EABI/softether-vpnclient-$SUFIX-linux-arm_eabi-32bit.tar.gz" -else -install_packet "gcc-multilib" "Install libraries" -DLURL=$PREFIX$URL"/Linux/SoftEther_VPN_Client/32bit_-_Intel_x86/softether-vpnclient-$SUFIX-linux-x86-32bit.tar.gz" -fi -wget -q $DLURL -O - | tar -xz -cd vpnclient -make i_read_and_agree_the_license_agreement | dialog --backtitle "$BACKTITLE" --title "Compiling SoftEther VPN vpnclient" --progressbox $TTY_Y $TTY_X -cd .. -cp -R vpnclient /usr/local -cd /usr/local/vpnclient/ -chmod 600 * -chmod 700 vpncmd -chmod 700 vpnclient -} - - - - -install_DashNTP () -{ -# -# Install DASH and ntp service -# -echo "dash dash/sh boolean false" | debconf-set-selections -dpkg-reconfigure -f noninteractive dash > /dev/null 2>&1 -install_packet "ntp ntpdate" "Install DASH and ntp service" -} - - - - -install_MySQL () -{ -# -# Maria SQL -# -install_packet "mariadb-client mariadb-server" "SQL client and server" -#Allow MySQL to listen on all interfaces -cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup -[[ -f /etc/mysql/my.cnf ]] && sed -i 's|bind-address.*|#bind-address = 127.0.0.1|' /etc/mysql/my.cnf -[[ -f /etc/mysql/mariadb.conf.d/50-server.cnf ]] && sed -i 's|bind-address.*|#bind-address = 127.0.0.1|' /etc/mysql/mariadb.conf.d/50-server.cnf -SECURE_MYSQL=$(expect -c " -set timeout 3 -spawn mysql_secure_installation -expect \"Enter current password for root (enter for none):\" -send \"\r\" -expect \"root password?\" -send \"y\r\" -expect \"New password:\" -send \"$MYSQL_PASS\r\" -expect \"Re-enter new password:\" -send \"$MYSQL_PASS\r\" -expect \"Remove anonymous users?\" -send \"y\r\" -expect \"Disallow root login remotely?\" -send \"y\r\" -expect \"Remove test database and access to it?\" -send \"y\r\" -expect \"Reload privilege tables now?\" -send \"y\r\" -expect eof -") -# -# Execution mysql_secure_installation -# -echo "${SECURE_MYSQL}" >> /dev/null -# ISP config exception -mkdir -p /etc/mysql/mariadb.conf.d/ -cat > /etc/mysql/mariadb.conf.d/99-ispconfig.cnf<<"EOF" -[mysqld] -sql-mode="NO_ENGINE_SUBSTITUTION" -EOF -service mysql restart >> /dev/null -} - - - - -install_MySQLDovecot () -{ -# -# Install Postfix, Dovecot, Saslauthd, rkhunter, binutils -# -echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections -echo "postfix postfix/mailname string $HOSTNAMEFQDN" | debconf-set-selections -install_packet "postfix postfix-mysql postfix-doc openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql \ -dovecot-sieve sudo libsasl2-modules" "postfix, dovecot, saslauthd, rkhunter, binutils" -#Uncommenting some Postfix configuration files -cp /etc/postfix/master.cf /etc/postfix/master.cf.backup -sed -i 's|#submission inet n - - - - smtpd|submission inet n - - - - smtpd|' /etc/postfix/master.cf -sed -i 's|# -o syslog_name=postfix/submission| -o syslog_name=postfix/submission|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_tls_security_level=encrypt| -o smtpd_tls_security_level=encrypt|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_sasl_auth_enable=yes| -o smtpd_sasl_auth_enable=yes|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_client_restrictions=permit_sasl_authenticated,reject| -o smtpd_client_restrictions=permit_sasl_authenticated,reject|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_sasl_auth_enable=yes| -o smtpd_sasl_auth_enable=yes|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_sasl_auth_enable=yes| -o smtpd_sasl_auth_enable=yes|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_sasl_auth_enable=yes| -o smtpd_sasl_auth_enable=yes|' /etc/postfix/master.cf -sed -i 's|#smtps inet n - - - - smtpd|smtps inet n - - - - smtpd|' /etc/postfix/master.cf -sed -i 's|# -o syslog_name=postfix/smtps| -o syslog_name=postfix/smtps|' /etc/postfix/master.cf -sed -i 's|# -o smtpd_tls_wrappermode=yes| -o smtpd_tls_wrappermode=yes|' /etc/postfix/master.cf -service postfix restart >> /dev/null -} - - - - -install_Virus () -{ -# -# Install Amavisd-new, SpamAssassin, And Clamav -# -install_packet "amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj p7zip unrar-free ripole rpm nomarch lzop \ -cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl \ -libnet-ident-perl zip libnet-dns-perl postgrey" "amavisd, spamassassin, clamav" -sed -i "s/^AllowSupplementaryGroups.*/AllowSupplementaryGroups true/" /etc/clamav/clamd.conf -service spamassassin stop >/dev/null 2>&1 -systemctl disable spamassassin >/dev/null 2>&1 -} - - - - -install_hhvm () -{ -# -# Install HipHop Virtual Machine -# -apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xB4112585D386EB94 >/dev/null 2>&1 -add-apt-repository https://dl.hhvm.com/"${family,,}" >/dev/null 2>&1 -debconf-apt-progress -- apt-get update -install_packet "hhvm" "HipHop Virtual Machine" -} - - - - -install_phpmyadmin () -{ -# -# Phpmyadmin unattended installation -# -if [[ "$family" != "Ubuntu" ]]; then -DEBIAN_FRONTEND=noninteractive debconf-apt-progress -- apt-get -y install phpmyadmin -else -debconf-set-selections <<< "phpmyadmin phpmyadmin/internal/skip-preseed boolean true" -debconf-set-selections <<< "phpmyadmin phpmyadmin/reconfigure-webserver multiselect true" -debconf-set-selections <<< "phpmyadmin phpmyadmin/dbconfig-install boolean false" -echo "phpmyadmin phpmyadmin/internal/skip-preseed boolean true" | debconf-set-selections -echo "phpmyadmin phpmyadmin/reconfigure-webserver multiselect" | debconf-set-selections -echo "phpmyadmin phpmyadmin/dbconfig-install boolean false" | debconf-set-selections -debconf-apt-progress -- apt-get install -y phpmyadmin -fi -} - - - - -install_apache () -{ -# -# Install Apache2, PHP5, FCGI, suExec, Pear and mcrypt -# - -local pkg="apache2 apache2-doc apache2-utils libapache2-mod-fcgid php-pear mcrypt imagemagick libruby libapache2-mod-python memcached" - -local pkg_xenial="libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi \ -apache2-suexec-pristine php-auth php7.0-mcrypt php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy \ -php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-opcache php-apcu \ -libapache2-mod-fastcgi php7.0-fpm letsencrypt" - -local pkg_stretch="libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi libapache2-mod-fcgid \ -apache2-suexec-pristine php7.0-mcrypt libapache2-mod-python php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 \ -php7.0-tidy php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring libapache2-mod-passenger \ -php7.0-soap php7.0-fpm php7.0-opcache php-apcu certbot" - -local pkg_jessie="apache2.2-common apache2-mpm-prefork libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql \ -php5-imap php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick libapache2-mod-python \ -php5-curl php5-intl php5-memcache php5-memcached php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl \ -libapache2-mod-passenger php5-xcache libapache2-mod-fastcgi php5-fpm" - -local temp="pkg_${distribution}" -install_packet "${pkg} ${!temp}" "Apache for $family $distribution" -# fix HTTPOXY vulnerability -cat < /etc/apache2/conf-available/httpoxy.conf - - RequestHeader unset Proxy early - - -EOT - -a2enmod actions proxy_fcgi setenvif fastcgi alias httpoxy suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers >/dev/null 2>&1 -a2enconf php7.0-fpm >/dev/null 2>&1 -service apache2 restart >> /dev/null -} - - - - -install_nginx () -{ -# -# Install NginX, PHP5, FCGI, suExec, Pear, And mcrypt -# -local pkg="nginx php-pear memcached fcgiwrap" - -local pkg_xenial="php7.0-fpm php7.0-opcache php7.0-fpm php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi \ -php7.0-mcrypt mcrypt imagemagick libruby php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy \ -php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php-apcu" - -local pkg_stretch="php7.0-fpm php7.0-opcache php7.0-fpm php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi \ -php7.0-mcrypt mcrypt imagemagick libruby php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy \ -php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php-apcu" - -local pkg_jessie="php5-fpm php5-mysql php5-curl php5-gd php5-intl php5-imagick php5-imap php5-mcrypt php5-memcache \ -php5-memcached php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php-apc" - -local temp="pkg_${distribution}" -install_packet "${pkg} ${!temp}" "Nginx for $family $distribution" - -phpenmod mcrypt mbstring - -if [[ -f /etc/php/7.0/fpm/php.ini ]]; then - tz=$(cat /etc/timezone | sed 's/\//\\\//g') - sed -i "s/^cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/" /etc/php/7.0/fpm/php.ini - sed -i "s/^date.timezone=.*/date.timezone=""$tz""/" /etc/php/7.0/fpm/php.ini - service php7.0-fpm reload >> /dev/null -else - debconf-apt-progress -- apt-get install -y python-certbot -t jessie-backports - service php5-fpm reload >> /dev/null -fi -} - - - - -install_PureFTPD () -{ -# -# Install PureFTPd and Quota -# -install_packet "pure-ftpd-common pure-ftpd-mysql quota quotatool" "pureFTPd and Quota" - -sed -i 's/VIRTUALCHROOT=false/VIRTUALCHROOT=true/' /etc/default/pure-ftpd-common -echo 1 > /etc/pure-ftpd/conf/TLS -mkdir -p /etc/ssl/private/ -openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -subj "/C=GB/ST=GB/L=GB/O=GB/OU=GB/CN=$(hostname -f)/emailAddress=joe@joe.com" -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem >/dev/null 2>&1 -chmod 600 /etc/ssl/private/pure-ftpd.pem -/etc/init.d/pure-ftpd-mysql restart >/dev/null 2>&1 -local temp=$(cat /etc/fstab | grep "/ " | tail -1 | awk '{print $4}') -sed -i "s/$temp/$temp,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0/" /etc/fstab -mount -o remount / >/dev/null 2>&1 -quotacheck -avugm >/dev/null 2>&1 -quotaon -avug >/dev/null 2>&1 -} - - - - -install_Bind () -{ -# -# Install BIND DNS Server -# -install_packet "bind9 dnsutils" "Install BIND DNS Server" -} - - - - -install_Stats () -{ -# -# Install Vlogger, Webalizer, And AWstats -# -install_packet "vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl" "vlogger, webalizer, awstats" -sed -i "s/*/10 * * * * www-data/#*/10 * * * * www-data/" /etc/cron.d/awstats -sed -i "s/10 03 * * * www-data/#10 03 * * * www-data/" /etc/cron.d/awstats -} - - - - -install_Jailkit() -{ -# -debconf-apt-progress -- apt-get install -y build-essential autoconf automake libtool flex bison debhelper binutils -cd ${TEMP_DIR} -wget -q http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz -O - | tar -xz && cd jailkit-2.19 -echo 5 > debian/compat -./debian/rules binary > /dev/null 2>&1 -dpkg -i ../jailkit_2.19-1_*.deb > /dev/null 2>&1 -} - - - - -install_Fail2BanDovecot() -{ -# -# Install fail2ban -# -install_packet "fail2ban ufw" "Install fail2ban and UFW Firewall" -if [[ $distribution == "stretch" ]]; then -cat > /etc/fail2ban/jail.local <<"EOF" -[pure-ftpd] -enabled = true -port = ftp -filter = pure-ftpd -logpath = /var/log/syslog -maxretry = 3 - -[dovecot] -enabled = true -filter = dovecot -logpath = /var/log/mail.log -maxretry = 5 - -[postfix-sasl] -enabled = true -port = smtp -filter = postfix-sasl -logpath = /var/log/mail.log -maxretry = 3 -EOF -else -cat > /etc/fail2ban/jail.local <<"EOF" -[pureftpd] -enabled = true -port = ftp -filter = pureftpd -logpath = /var/log/syslog -maxretry = 3 - -[dovecot-pop3imap] -enabled = true -filter = dovecot-pop3imap -action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp] -logpath = /var/log/mail.log -maxretry = 5 - -[sasl] -enabled = true -port = smtp -filter = postfix-sasl -logpath = /var/log/mail.log -maxretry = 3 -EOF -fi -} - - - - -install_Fail2BanRulesDovecot() -{ -# -# Dovecot rules -# -cat > /etc/fail2ban/filter.d/pureftpd.conf <<"EOF" -[Definition] -failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.* -ignoreregex = -EOF - -cat > /etc/fail2ban/filter.d/dovecot-pop3imap.conf <<"EOF" -[Definition] -failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.* -ignoreregex = -EOF -# Add the missing ignoreregex line -echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.conf -service fail2ban restart >> /dev/null -} - - - - -install_ISPConfig (){ -#------------------------------------------------------------------------------------------------------------------------------------------ -# Install ISPConfig 3 -#------------------------------------------------------------------------------------------------------------------------------------------ -cd ${TEMP_DIR} -wget -q http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz -O - | tar -xz -cd ${TEMP_DIR}/ispconfig3_install/install/ -#apt-get -y install php5-cli php5-mysql -php -q install.php --autoinstall=${TEMP_DIR}/isp.conf.php -echo "Admin panel: https://$serverIP:8080" -echo "PHPmyadmin: http://$serverIP:8081/phpmyadmin" -} - - -install_mayan_edms (){ -# -# Install Mayan EDMS -# - -# Default values -MAYAN_DATABASE_PASSWORD="mayandbpass" -MAYAN_INSTALLATION_FOLDER="/opt/mayan-edms" -MAYAN_MEDIA_ROOT="/opt/mayan-edms-data" - -# User interaction -exec 3>&1 -dialog --title "Server configuration" --separate-widget $'\n' \ ---ok-label "Install" --backtitle "$BACKTITLE" \ ---form "\nPlease fill out this form:\n " 13 70 0 \ -"Ddatabase password:" 1 1 "$MAYAN_DATABASE_PASSWORD" 1 31 32 0 \ -"Installation folder:" 2 1 "$MAYAN_INSTALLATION_FOLDER" 2 31 32 0 \ -"Data folder:" 3 1 "$MAYAN_MEDIA_ROOT" 3 31 32 0 \ -2>&1 1>&3 | { -read -r MAYAN_DATABASE_PASSWORD -read -r MAYAN_MEDIA_ROOT -read -r MAYAN_INSTALLATION_FOLDER -echo $MAYAN_DATABASE_PASSWORD > ${TEMP_DIR}/MAYAN_DATABASE_PASSWORD -echo $MAYAN_MEDIA_ROOT > ${TEMP_DIR}/MAYAN_MEDIA_ROOT -echo $MAYAN_INSTALLATION_FOLDER > ${TEMP_DIR}/MAYAN_INSTALLATION_FOLDER -} -exec 3>&- -read MAYAN_DATABASE_PASSWORD < ${TEMP_DIR}/MAYAN_DATABASE_PASSWORD -read MAYAN_MEDIA_ROOT < ${TEMP_DIR}/MAYAN_MEDIA_ROOT -read MAYAN_INSTALLATION_FOLDER < ${TEMP_DIR}/MAYAN_INSTALLATION_FOLDER - -# OS dependencies -install_packet "g++ gcc ghostscript gnupg1 graphviz libffi-dev libjpeg-dev libmagic1 libpq-dev libpng-dev libreoffice libssl-dev libtiff-dev poppler-utils postgresql python-dev python-pip python-virtualenv redis-server sane-utils supervisor tesseract-ocr zlib1g-dev" "Installing dependencies" - -# Mayan OS user account -dialog --infobox "Adding Mayan EDMS user account" 3 70 -adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" >/dev/null 2>&1 -sleep 1 - -# Create installtion and data folders -mkdir -p "${MAYAN_INSTALLATION_FOLDER}" -mkdir -p "${MAYAN_MEDIA_ROOT}" - -# Create the Python virtualenv to isolate Python dependencies of Mayan -dialog --infobox "Creating Python virtual environment" 3 70 -python /usr/lib/python2.7/dist-packages/virtualenv.py $MAYAN_INSTALLATION_FOLDER > /dev/null - -# Give ownership to the Mayan OS user -chown mayan:mayan "${MAYAN_INSTALLATION_FOLDER}" -R -chown mayan:mayan "${MAYAN_MEDIA_ROOT}" -R - -# Pillow can't find zlib or libjpeg on aarch64 (ODROID C2) -if [ "$(uname -m)" = "aarch64" ]; then \ - ln -s /usr/lib/aarch64-linux-gnu/libz.so /usr/lib/ && \ - ln -s /usr/lib/aarch64-linux-gnu/libjpeg.so /usr/lib/ \ -; fi - -# Pillow can't find zlib or libjpeg on armv7l (ODROID HC1) -if [ "$(uname -m)" = "armv7l" ]; then \ - ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib/ && \ - ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib/ \ -; fi - -# Install Mayan from the web and all its Python dependencies -MAYAN_PIP=$MAYAN_INSTALLATION_FOLDER/bin/pip -dialog --infobox "Installing Mayan EDMS Python package (Takes several minutes)" 3 70 -sudo -u mayan $MAYAN_PIP install --no-cache-dir mayan-edms > /dev/null 2>&1 - -# Python Postgres driver -dialog --infobox "Installing PostgreSQL database driver" 3 70 -sudo -u mayan $MAYAN_PIP install --no-cache-dir psycopg2==2.7.3.2 > /dev/null - -# Python Redis driver -dialog --infobox "Installing Redis driver" 3 70 -sudo -u mayan $MAYAN_PIP install --no-cache-dir redis==2.10.6 > /dev/null - -# Create postgres Mayan user and database -MAYAN_BIN=$MAYAN_INSTALLATION_FOLDER/bin/mayan-edms.py -dialog --infobox "Creating and initializing database (Takes several minutes)" 3 70 -sudo -u postgres psql -c "CREATE USER mayan WITH password '$MAYAN_DATABASE_PASSWORD';" -sudo -u postgres createdb -O mayan mayan - -# Execute initialsetup command. Migrate DB, create base files, downloads Javascript libraries -sudo -u mayan \ - MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ - MAYAN_DATABASE_NAME=mayan \ - MAYAN_DATABASE_USER=mayan \ - MAYAN_DATABASE_HOST=127.0.0.1 \ - MAYAN_MEDIA_ROOT=$MAYAN_MEDIA_ROOT \ - MAYAN_DATABASE_PASSWORD=$MAYAN_DATABASE_PASSWORD \ - $MAYAN_BIN initialsetup --force > /dev/null - -# Compress and merge Javascript, CSS for web serving -dialog --infobox "Preparing static files" 3 70 -sudo -u mayan \ - MAYAN_MEDIA_ROOT=$MAYAN_MEDIA_ROOT \ - $MAYAN_BIN preparestatic --noinput > /dev/null - -# Create supervisor file for gunicorn (frontend), 3 background workers, and the scheduler for periodic tasks -cat > /etc/supervisor/conf.d/mayan.conf <> /etc/redis/redis.conf - -# This starts all of Mayan's processes -dialog --infobox "Starting service" 3 70 -systemctl restart supervisor.service - -# Installation report -dialog --msgbox "Installation complete.\nInstallation folder: $MAYAN_INSTALLATION_FOLDER\nData folder: $MAYAN_MEDIA_ROOT\nPort: 8000" 10 70 -} - - -#------------------------------------------------------------------------------------------------------------------------------------------ -# Main choices -#------------------------------------------------------------------------------------------------------------------------------------------ - -# check for root -# -if [[ $EUID != 0 ]]; then - dialog --title "Warning" --infobox "\nThis script requires root privileges.\n\nExiting ..." 7 41 - sleep 3 - exit -fi - -# nameserver backup -if [ -d /etc/resolvconf/resolv.conf.d ]; then - echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/head - resolvconf -u -fi - -# Create a safe temporary directory -TEMP_DIR=$(mktemp -d || exit 1) -chmod 700 ${TEMP_DIR} -trap "rm -rf \"${TEMP_DIR}\" ; exit 0" 0 1 2 3 15 - -# Install basic stuff, we have to wait for other apt tasks to finish -# (eg unattended-upgrades) -i=0 -tput sc -while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do - case $(($i % 4)) in - 0 ) j="-" ;; - 1 ) j="\\" ;; - 2 ) j="|" ;; - 3 ) j="/" ;; - esac - tput rc - echo -en "\r[$j] Waiting for other software managers to finish..." - sleep 0.5 - ((i=i+1)) -done - -apt-get -qq -y --no-install-recommends install debconf-utils html2text apt-transport-https dialog whiptail lsb-release bc expect > /dev/null - -# gather some info -# -TTY_X=$(($(stty size | awk '{print $2}')-6)) # determine terminal width -TTY_Y=$(($(stty size | awk '{print $1}')-6)) # determine terminal height -distribution=$(lsb_release -cs) -family=$(lsb_release -is) -serverIP=$(ip route get 8.8.8.8 | awk '{ print $NF; exit }') -set ${serverIP//./ } -SUBNET="$1.$2.$3." -hostnamefqdn=$(hostname -f) -mysql_pass="" -BACKTITLE="Softy - Armbian post deployment scripts, http://www.armbian.com" -SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -#check_status - -# main dialog routine -# -DIALOG_CANCEL=1 -DIALOG_ESC=255 - -while true; do - - # prepare menu items - check_status - LISTLENGHT="$((${#LIST[@]}/2))" - exec 3>&1 - selection=$(dialog --backtitle "$BACKTITLE" --title "Installing to $family $distribution" --colors --clear --cancel-label \ - "Exit" --checklist "\nChoose what you want to install:\n " $(($LISTLENGHT+$LIST_CONST)) 70 15 "${LIST[@]}" 2>&1 1>&3) - exit_status=$? - exec 3>&- - case $exit_status in - $DIALOG_ESC | $DIALOG_CANCEL) - clear - exit 1 - ;; - esac - - # cycle trought all install options - i=0 - - while [ "$i" -lt "$LISTLENGHT" ]; do - - if [[ "$selection" == *Samba* && "$SAMBA_STATUS" != "on" ]]; then - install_samba - selection=${selection//Samba/} - fi - - if [[ "$selection" == *CUPS* && "$CUPS_STATUS" != "on" ]]; then - install_cups - selection=${selection//CUPS/} - fi - - if [[ "$selection" == *headend* && "$TVHEADEND_STATUS" != "on" ]]; then - install_tvheadend - selection=${selection//\"TV headend\"/} - fi - - if [[ "$selection" == *Minidlna* && "$MINIDLNA_STATUS" != "on" ]]; then - install_packet "minidlna" "Install lightweight DLNA/UPnP-AV server" - selection=${selection//Minidlna/} - fi - - if [[ "$selection" == *ISPConfig* && "$ISPCONFIG_STATUS" != "on" ]]; then - server_conf - if [[ "$MYSQL_PASS" == "" ]]; then - dialog --msgbox "Mysql password can't be blank. Exiting..." 7 70 - exit - fi - if [[ "$(echo $HOSTNAMEFQDN | grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)')" == "" ]]; then - dialog --msgbox "Invalid FQDN. Exiting..." 7 70 - exit - fi - choose_webserver; install_basic; install_DashNTP; install_MySQL; install_MySQLDovecot; install_Virus; install_$server; - install_phpmyadmin - [[ -z "$(dpkg --print-architecture | grep arm)" ]] && install_hhvm - create_ispconfig_configuration;install_PureFTPD; - install_Jailkit; install_Fail2BanDovecot; install_Fail2BanRulesDovecot; - install_ISPConfig - read -n 1 -s -p "Press any key to continue" - selection=${selection//ISPConfig/} - fi - - if [[ "$selection" == *Syncthing* && "$SYNCTHING_STATUS" != "on" ]]; then - install_syncthing - selection=${selection//Syncthing/} - fi - - if [[ "$selection" == *ExaGear* && "$EXAGEAR_STATUS" != "on" ]]; then - debconf-apt-progress -- apt-get update - debconf-apt-progress -- apt-get -y install exagear-armbian exagear-desktop exagear-dsound-server exagear-guest-ubuntu-1604 - selection=${selection//ExaGear/} - fi - - if [[ "$selection" == *server* && "$VPN_SERVER_STATUS" != "on" ]]; then - install_vpn_server - selection=${selection//\"VPN server\"/} - fi - - if [[ "$selection" == *client* && "$VPN_CLIENT_STATUS" != "on" ]]; then - install_vpn_client - selection=${selection//\"VPN client\"/} - fi - if [[ "$selection" == *NCP* && "$NCP_STATUS" != "on" ]]; then - install_ncp - selection=${selection//NCP/} - fi - - if [[ "$selection" == *OMV* && "$OMV_STATUS" != "on" ]]; then - install_omv - selection=${selection//OMV/} - fi - - if [[ "$selection" == *Plex* && "$PLEX_STATUS" != "on" ]]; then - install_plex_media_server - selection=${selection//Plex/} - fi - - if [[ "$selection" == *Radarr* && "$RADARR_STATUS" != "on" ]]; then - install_radarr - selection=${selection//Radarr/} - fi - - if [[ "$selection" == *Sonarr* && "$SONARR_STATUS" != "on" ]]; then - install_sonarr - selection=${selection//Sonarr/} - fi - - if [[ "$selection" == *hole* && "$PI_HOLE_STATUS" != "on" ]]; then - curl -L "https://install.pi-hole.net" | bash - selection=${selection//\"Pi hole\"/} - fi - - if [[ "$selection" == *Transmission* && "$TRANSMISSION_STATUS" != "on" ]]; then - install_transmission - selection=${selection//Transmission/} - dialog --title "Seed Armbian torrents" --backtitle "$BACKTITLE" --yes-label "Yes" --no-label "Cancel" --yesno "\ - \nDo you want to help community and seed armbian torrent files? It will ensure faster download for everyone.\ - \n\nWe need around 80Gb of your space." 11 44 - if [[ $? = 0 ]]; then - install_transmission_seed_armbian_torrents - fi - fi - - if [[ "$selection" == *UrBackup* && "$URBACKUP_STATUS" != "on" ]]; then - install_urbackup - selection=${selection//UrBackup/} - fi - - if [[ "$selection" == *Mayan* && "$MAYAN_STATUS" != "on" ]]; then - install_mayan_edms - selection=${selection//\"Mayan EDMS\"/} - fi - - i=$[$i+1] - done - # reread statuses - check_status -done - - - diff --git a/contrib/scripts/install/docker.sh b/contrib/scripts/install/docker.sh index e1c611d029..80d88244bb 100755 --- a/contrib/scripts/install/docker.sh +++ b/contrib/scripts/install/docker.sh @@ -5,25 +5,30 @@ set -e # $ curl -fsSL get.mayan-edms.com -o get-mayan-edms.sh # $ sh get-mayan-edms.sh # -# NOTE: Make sure to verify the contents of the script +# NOTE: Before executing, make sure to verify the contents of the script # you downloaded matches the contents of docker.sh # located at https://gitlab.com/mayan-edms/mayan-edms/blob/master/contrib/scripts/install/docker.sh -# before executing. : ${VERBOSE:=true} : ${INSTALL_DOCKER:=false} : ${DELETE_VOLUMES:=false} +: ${USE_DOCKER_NETWORK:=true} +: ${DOCKER_NETWORK_NAME:=mayan} : ${DATABASE_USER:=mayan} : ${DATABASE_NAME:=mayan} : ${DATABASE_PASSWORD:=mayanuserpass} -: ${DOCKER_POSTGRES_IMAGE:=postgres:9.6} +: ${DOCKER_POSTGRES_IMAGE:=postgres:9.6-alpine} : ${DOCKER_POSTGRES_CONTAINER:=mayan-edms-postgres} : ${DOCKER_POSTGRES_VOLUME:=/docker-volumes/mayan-edms/postgres} : ${DOCKER_POSTGRES_PORT:=5432} : ${DOCKER_POSTGRES_DELAY:=10} +: ${DOCKER_REDIS_IMAGE:=redis:5.0-alpine} +: ${DOCKER_REDIS_CONTAINER:=mayan-edms-redis} +: ${DOCKER_REDIS_PORT:=6379} : ${DOCKER_MAYAN_IMAGE:=mayanedms/mayanedms:latest} : ${DOCKER_MAYAN_CONTAINER:=mayan-edms} : ${DOCKER_MAYAN_VOLUME:=/docker-volumes/mayan-edms/media} +: ${DOCKER_MAYAN_PORT:=80} cat << EOF @@ -45,6 +50,8 @@ echo "Variable values to be used:" echo "---------------------------" echo "INSTALL_DOCKER: $INSTALL_DOCKER" echo "DELETE_VOLUMES: $DELETE_VOLUMES" +echo "USE_DOCKER_NETWORK: $USE_DOCKER_NETWORK" +echo "DOCKER_NETWORK_NAME: $DOCKER_NETWORK_NAME" echo "DATABASE_USER: $DATABASE_USER" echo "DATABASE_NAME: $DATABASE_NAME" echo "DATABASE_PASSWORD: $DATABASE_PASSWORD" @@ -53,10 +60,18 @@ echo "DOCKER_POSTGRES_CONTAINER: $DOCKER_POSTGRES_CONTAINER" echo "DOCKER_POSTGRES_VOLUME: $DOCKER_POSTGRES_VOLUME" echo "DOCKER_POSTGRES_PORT: $DOCKER_POSTGRES_PORT" echo "DOCKER_POSTGRES_DELAY: $DOCKER_POSTGRES_DELAY" +echo "DOCKER_REDIS_IMAGE: $DOCKER_REDIS_IMAGE" +echo "DOCKER_REDIS_CONTAINER: $DOCKER_REDIS_CONTAINER" +echo "DOCKER_REDIS_PORT: $DOCKER_REDIS_PORT" echo "DOCKER_MAYAN_IMAGE: $DOCKER_MAYAN_IMAGE" echo "DOCKER_MAYAN_CONTAINER: $DOCKER_MAYAN_CONTAINER" echo "DOCKER_MAYAN_VOLUME: $DOCKER_MAYAN_VOLUME" -echo "\nStarting in 10 seconds." +echo "DOCKER_MAYAN_PORT: $DOCKER_MAYAN_PORT" +echo +echo "Override any of them by setting them before the script. " +echo "Example: INSTALL_DOCKER=true sh get-mayan-edms.sh" + +echo "\nStarting in 10 seconds. Press CTRL+C to cancel." sleep 10 fi @@ -74,33 +89,62 @@ if [ -z `which docker` ]; then fi echo -n "* Removing existing Mayan EDMS and PostgreSQL containers (no data will be lost)..." -true || docker stop $DOCKER_MAYAN_CONTAINER >/dev/null 2>&1 -true || docker rm $DOCKER_MAYAN_CONTAINER >/dev/null 2>&1 -true || docker stop $DOCKER_POSTGRES_CONTAINER >/dev/null 2>&1 -true || docker rm $DOCKER_POSTGRES_CONTAINER >/dev/null 2>&1 +docker rm -f $DOCKER_REDIS_CONTAINER >/dev/null 2>&1 || true +docker rm -f $DOCKER_POSTGRES_CONTAINER >/dev/null 2>&1 || true +docker rm -f $DOCKER_MAYAN_CONTAINER >/dev/null 2>&1 || true echo "Done" if [ "$DELETE_VOLUMES" = true ]; then -echo -n "* Deleting Docker volumes in 5 seconds (warning: this delete all document data)..." +echo -n "* Deleting Docker volumes in 5 seconds (warning: this will delete all document data). Press CTRL+C to cancel..." sleep 5 -true || rm DOCKER_MAYAN_VOLUME -Rf -true || rm DOCKER_POSTGRES_VOLUME -Rf +rm DOCKER_MAYAN_VOLUME -Rf || true +rm DOCKER_POSTGRES_VOLUME -Rf || true echo "Done" fi -echo -n "* Pulling (downloading) the Mayan EDMS Docker image..." -docker pull $DOCKER_MAYAN_IMAGE >/dev/null +echo -n "* Pulling (downloading) the Redis Docker image..." +docker pull $DOCKER_REDIS_IMAGE > /dev/null echo "Done" echo -n "* Pulling (downloading) the PostgreSQL Docker image..." docker pull $DOCKER_POSTGRES_IMAGE > /dev/null echo "Done" +echo -n "* Pulling (downloading) the Mayan EDMS Docker image..." +docker pull $DOCKER_MAYAN_IMAGE >/dev/null +echo "Done" + +if [ "$USE_DOCKER_NETWORK" = true ]; then + echo -n "* Creating Docker network..." + docker network create $DOCKER_NETWORK_NAME 2> /dev/null || true + # Ignore error if the network already exists + echo "Done" +fi + +if [ "$USE_DOCKER_NETWORK" = true ]; then + NETWORK_ARGUMENT="--network=$DOCKER_NETWORK_NAME" + POSTGRES_PORT_ARGUMENT="" + REDIS_PORT_ARGUMENT="" + MAYAN_DATABASE_PORT_ARGUMENT="" + MAYAN_DATABASE_HOST_ARGUMENT="-e MAYAN_DATABASE_HOST=$DOCKER_POSTGRES_CONTAINER" + MAYAN_CELERY_BROKER_URL_ARGUMENT="-e MAYAN_CELERY_BROKER_URL=redis://$DOCKER_REDIS_CONTAINER:6379/0" + MAYAN_CELERY_RESULT_BACKEND_ARGUMENT="-e MAYAN_CELERY_RESULT_BACKEND=redis://$DOCKER_REDIS_CONTAINER:6379/1" +else + NETWORK_ARGUMENT="" + POSTGRES_PORT_ARGUMENT="-e $DOCKER_POSTGRES_PORT:5432" + REDIS_PORT_ARGUMENT="-e $DOCKER_REDIS_PORT:6379" + MAYAN_DATABASE_PORT_ARGUMENT="-e MAYAN_DATABASE_PORT=$DOCKER_POSTGRES_PORT" + MAYAN_DATABASE_HOST_ARGUMENT="-e MAYAN_DATABASE_HOST=172.17.0.1" + MAYAN_CELERY_BROKER_URL_ARGUMENT="-e MAYAN_CELERY_BROKER_URL=redis://172.17.0.1:6379/0" + MAYAN_CELERY_RESULT_BACKEND_ARGUMENT="-e MAYAN_CELERY_RESULT_BACKEND=redis://172.17.0.1:6379/1" +fi + echo -n "* Deploying the PostgreSQL container..." docker run -d \ --name $DOCKER_POSTGRES_CONTAINER \ +$NETWORK_ARGUMENT \ --restart=always \ --p $DOCKER_POSTGRES_PORT:5432 \ +$POSTGRES_PORT_ARGUMENT \ -e POSTGRES_USER=$DATABASE_USER \ -e POSTGRES_DB=$DATABASE_NAME \ -e POSTGRES_PASSWORD=$DATABASE_PASSWORD \ @@ -108,6 +152,24 @@ docker run -d \ $DOCKER_POSTGRES_IMAGE >/dev/null echo "Done" +echo -n "* Deploying the Redis container..." +docker run -d \ +--name $DOCKER_REDIS_CONTAINER \ +$NETWORK_ARGUMENT \ +--restart=always \ +$REDIS_PORT_ARGUMENT \ +$DOCKER_REDIS_IMAGE \ +redis-server \ +--appendonly no \ +--databases 2 \ +--maxmemory 100mb \ +--maxmemory-policy allkeys-lru \ +--maxclients 500 \ +--save "" \ +--tcp-backlog 256 \ +>/dev/null +echo "Done" + echo -n "* Waiting for the PostgreSQL container to be ready (${DOCKER_POSTGRES_DELAY} seconds)..." sleep $DOCKER_POSTGRES_DELAY echo "Done" @@ -115,19 +177,22 @@ echo "Done" echo -n "* Deploying Mayan EDMS container..." docker run -d \ --name $DOCKER_MAYAN_CONTAINER \ +$NETWORK_ARGUMENT \ --restart=always \ --p 80:8000 \ +-p $DOCKER_MAYAN_PORT:8000 \ -e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ --e MAYAN_DATABASE_HOST=172.17.0.1 \ +$MAYAN_DATABASE_HOST_ARGUMENT \ +$MAYAN_DATABASE_PORT_ARGUMENT \ -e MAYAN_DATABASE_NAME=$DATABASE_NAME \ -e MAYAN_DATABASE_PASSWORD=$DATABASE_PASSWORD \ -e MAYAN_DATABASE_USER=$DATABASE_USER \ --e MAYAN_DATABASE_PORT=$DOCKER_POSTGRES_PORT \ -e MAYAN_DATABASE_CONN_MAX_AGE=0 \ +$MAYAN_CELERY_BROKER_URL_ARGUMENT \ +$MAYAN_CELERY_RESULT_BACKEND_ARGUMENT \ -v $DOCKER_MAYAN_VOLUME:/var/lib/mayan \ $DOCKER_MAYAN_IMAGE >/dev/null echo "Done" echo -n "* Waiting for the Mayan EDMS container to be ready (might take a few minutes)..." -while ! curl --output /dev/null --silent --head --fail http://localhost:80; do sleep 1 && echo -n .; done; +while ! curl --output /dev/null --silent --head --fail http://localhost:$DOCKER_MAYAN_PORT; do sleep 1 && echo -n .; done; echo "Done" diff --git a/contrib/scripts/install/production.sh b/contrib/scripts/install/production.sh deleted file mode 100644 index 2f70812fec..0000000000 --- a/contrib/scripts/install/production.sh +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env bash - -# ====== CONFIG ====== -INSTALLATION_DIRECTORY=/usr/share/mayan-edms/ -DB_NAME=mayan_edms -DB_USERNAME=mayan -DB_PASSWORD=test123 -# ==== END CONFIG ==== - -cat << EOF | tee -a /etc/motd.tail -********************************** - -Mayan EDMS Vagrant Production Box - -********************************** -EOF - -echo -e "\n -> Running apt-get update & upgrade \n" -apt-get -qq update -apt-get -y upgrade - -echo -e "\n -> Installing core binaries \n" -apt-get install nginx supervisor redis-server postgresql libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y - -echo -e "\n -> Setting up virtualenv \n" -rm -f ${INSTALLATION_DIRECTORY} -virtualenv ${INSTALLATION_DIRECTORY} -source ${INSTALLATION_DIRECTORY}bin/activate - -echo -e "\n -> Installing Mayan EDMS from PyPI \n" -pip install mayan-edms - -echo -e "\n -> Installing Python client for PostgreSQL, Redis, and uWSGI \n" -pip install psycopg2 redis uwsgi - -echo -e "\n -> Creating the database for the installation \n" -echo "CREATE USER mayan WITH PASSWORD '$DB_PASSWORD';" | sudo -u postgres psql -sudo -u postgres createdb -O $DB_USERNAME $DB_NAME - -echo -e "\n -> Creating the directories for the logs \n" -mkdir /var/log/mayan - -echo -e "\n -> Making a convenience symlink \n" -cd ${INSTALLATION_DIRECTORY} -ln -s lib/python2.7/site-packages/mayan . - -echo -e "\n -> Creating an initial settings file \n" -mayan-edms.py createsettings - -echo -e "\n -> Updating the mayan/settings/local.py file \n" -cat >> mayan/settings/local.py << EOF -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': '$DB_NAME', - 'USER': '$DB_USERNAME', - 'PASSWORD': '$DB_PASSWORD', - 'HOST': 'localhost', - 'PORT': '5432', - } -} - -BROKER_URL = 'redis://127.0.0.1:6379/0' -CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' -EOF - -echo -e "\n -> Migrating the database or initialize the project \n" -mayan-edms.py initialsetup - -echo -e "\n -> Disabling the default NGINX site \n" -rm -f /etc/nginx/sites-enabled/default - -echo -e "\n -> Creating a uwsgi.ini file \n" -cat > uwsgi.ini << EOF -[uwsgi] -chdir = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages/mayan -chmod-socket = 664 -chown-socket = www-data:www-data -env = DJANGO_SETTINGS_MODULE=mayan.settings.production -gid = www-data -logto = /var/log/uwsgi/%n.log -pythonpath = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages -master = True -max-requests = 5000 -socket = ${INSTALLATION_DIRECTORY}uwsgi.sock -uid = www-data -vacuum = True -wsgi-file = ${INSTALLATION_DIRECTORY}lib/python2.7/site-packages/mayan/wsgi.py -EOF - -echo -e "\n -> Creating the directory for the uWSGI log files \n" -mkdir -p /var/log/uwsgi - -echo -e "\n -> Creating the NGINX site file for Mayan EDMS, /etc/nginx/sites-available/mayan \n" -cat > /etc/nginx/sites-available/mayan << EOF -server { - listen 80; - server_name localhost; - - location / { - include uwsgi_params; - uwsgi_pass unix:${INSTALLATION_DIRECTORY}uwsgi.sock; - - client_max_body_size 30M; # Increse if your plan to upload bigger documents - proxy_read_timeout 30s; # Increase if your document uploads take more than 30 seconds - } - - location /static { - alias ${INSTALLATION_DIRECTORY}mayan/media/static; - expires 1h; - } - - location /favicon.ico { - alias ${INSTALLATION_DIRECTORY}mayan/media/static/appearance/images/favicon.ico; - expires 1h; - } -} -EOF - -echo -e "\n -> Enabling the NGINX site for Mayan EDMS \n" -ln -s /etc/nginx/sites-available/mayan /etc/nginx/sites-enabled/ - -echo -e "\n -> Creating the supervisor file for the uWSGI process, /etc/supervisor/conf.d/mayan-uwsgi.conf \n" -cat > /etc/supervisor/conf.d/mayan-uwsgi.conf << EOF -[program:mayan-uwsgi] -command = ${INSTALLATION_DIRECTORY}bin/uwsgi --ini ${INSTALLATION_DIRECTORY}uwsgi.ini -user = root -autostart = true -autorestart = true -redirect_stderr = true -EOF - -echo -e "\n -> Creating the supervisor file for the Celery worker, /etc/supervisor/conf.d/mayan-celery.conf \n" -cat > /etc/supervisor/conf.d/mayan-celery.conf << EOF -[program:mayan-worker] -command = ${INSTALLATION_DIRECTORY}bin/python ${INSTALLATION_DIRECTORY}bin/mayan-edms.py celery --settings=mayan.settings.production worker -Ofair -l ERROR -directory = ${INSTALLATION_DIRECTORY} -user = www-data -stdout_logfile = /var/log/mayan/worker-stdout.log -stderr_logfile = /var/log/mayan/worker-stderr.log -autostart = true -autorestart = true -startsecs = 10 -stopwaitsecs = 10 -killasgroup = true -priority = 998 - -[program:mayan-beat] -command = ${INSTALLATION_DIRECTORY}bin/python ${INSTALLATION_DIRECTORY}bin/mayan-edms.py celery --settings=mayan.settings.production beat -l ERROR -directory = ${INSTALLATION_DIRECTORY} -user = www-data -numprocs = 1 -stdout_logfile = /var/log/mayan/beat-stdout.log -stderr_logfile = /var/log/mayan/beat-stderr.log -autostart = true -autorestart = true -startsecs = 10 -stopwaitsecs = 1 -killasgroup = true -priority = 998 -EOF - -echo -e "\n -> Collecting the static files \n" -mayan-edms.py preparestatic --noinput - -echo -e "\n -> Making the installation directory readable and writable by the webserver user \n" -chown www-data:www-data ${INSTALLATION_DIRECTORY} -R - -echo -e "\n -> Restarting the services \n" -/etc/init.d/nginx restart -/etc/init.d/supervisor restart diff --git a/contrib/scripts/process_messages.py b/contrib/scripts/process_messages.py index f473f050b6..7989c2a572 100755 --- a/contrib/scripts/process_messages.py +++ b/contrib/scripts/process_messages.py @@ -13,11 +13,12 @@ APP_LIST = ( 'checkouts', 'common', 'converter', 'dashboards', 'dependencies', 'django_gpg', 'document_comments', 'document_indexing', 'document_parsing', 'document_signatures', 'document_states', - 'documents', 'dynamic_search', 'events', 'file_metadata', 'linking', - 'lock_manager', 'mayan_statistics', 'mailer', 'metadata', 'mirroring', - 'motd', 'navigation', 'ocr', 'permissions', 'platform', 'rest_api', - 'smart_settings', 'sources', 'storage', 'tags', 'task_manager', - 'user_management' + 'documents', 'dynamic_search', 'events', 'file_caching', + 'file_metadata', 'linking', 'lock_manager', 'mailer', + 'mayan_statistics', 'metadata', 'mirroring', 'motd', 'navigation', + 'ocr', 'permissions', 'platform', 'rest_api', 'smart_settings', + 'sources', 'storage', 'tags', 'task_manager', 'templating', + 'user_management', 'web_links' ) LANGUAGE_LIST = ( diff --git a/contrib/scripts/start_gunicorn.sh b/contrib/scripts/start_gunicorn.sh deleted file mode 100644 index 9e52a959c4..0000000000 --- a/contrib/scripts/start_gunicorn.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -NAME="mayan-edms" -DJANGODIR=/usr/share/mayan-edms -SOCKFILE=/var/tmp/filesystem.sock -USER=www-data -GROUP=www-data -NUM_WORKERS=3 -DJANGO_SETTINGS_MODULE=mayan.settings.production -DJANGO_WSGI_MODULE=mayan.wsgi -TIMEOUT=600 - -echo "Starting $NAME as `whoami`" - -# Activate the virtual environment -cd $DJANGODIR -source bin/activate -export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE -export PYTHONPATH=$DJANGODIR:$PYTHONPATH - -# Create the run directory if it doesn't exist -RUNDIR=$(dirname $SOCKFILE) -test -d $RUNDIR || mkdir -p $RUNDIR - -# Start your Django Unicorn -# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) -exec bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ - --name $NAME \ - --workers $NUM_WORKERS \ - --user=$USER --group=$GROUP \ - --log-level=debug \ - --bind=unix:$SOCKFILE \ - --timeout=$TIMEOUT - - diff --git a/docker/Dockerfile b/docker/Dockerfile index 8384ac883e..15d07fad65 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,7 @@ # BASE_IMAGE - Bare bones image with the base packages needed to run Mayan EDMS #### -FROM debian:9.8-slim as BASE_IMAGE +FROM debian:10.0-slim as BASE_IMAGE LABEL maintainer="Roberto Rosario roberto.rosario@mayan-edms.com" @@ -24,6 +24,7 @@ RUN set -x \ && DEBIAN_FRONTEND=noninteractive \ apt-get update \ && apt-get install -y --no-install-recommends \ + ca-certificates \ exiftool \ fonts-arphic-uming \ fonts-arphic-ukai \ @@ -33,11 +34,11 @@ apt-get update \ graphviz \ libfuse2 \ libmagic1 \ - libmariadbclient18 \ + libmariadb3 \ libreoffice \ libpq5 \ poppler-utils \ - redis-server \ + python3-distutils \ sane-utils \ sudo \ supervisor \ @@ -56,21 +57,20 @@ apt-get update \ && if [ "$(uname -m)" = "armv7l" ]; then \ ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib/ \ && ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib/ \ -; fi \ -# Discard data when Redis runs out of memory -&& echo "maxmemory-policy allkeys-lru" >> /etc/redis/redis.conf \ -# Disable saving the Redis database -echo "save \"\"" >> /etc/redis/redis.conf \ -# Only provision 1 database -&& echo "databases 1" >> /etc/redis/redis.conf +; fi #### # BUILDER_IMAGE - This image builds the Python package and is discarded afterwards +# only the build artifact is carried over to the next image. #### # Reuse image FROM BASE_IMAGE as BUILDER_IMAGE +# Python libraries caching +ARG PIP_INDEX_URL +ARG PIP_TRUSTED_HOST + WORKDIR /src # Copy the source files needed to build the Python package @@ -99,8 +99,8 @@ apt-get install -y --no-install-recommends \ libssl-dev \ g++ \ gcc \ - python-dev \ - python-virtualenv \ + python3-dev \ + python3-venv \ && mkdir -p "${PROJECT_INSTALL_DIR}" \ && chown -R mayan:mayan "${PROJECT_INSTALL_DIR}" \ && chown -R mayan:mayan /src @@ -110,32 +110,33 @@ USER mayan RUN set -a \ && . /config.env \ && set +a \ -&& python -m virtualenv "${PROJECT_INSTALL_DIR}" \ +&& python3 -m venv "${PROJECT_INSTALL_DIR}" \ && . "${PROJECT_INSTALL_DIR}/bin/activate" \ -&& pip install --no-cache-dir --no-use-pep517 \ - librabbitmq==$PYTHON_LIBRABBITMQ_VERSION \ - mysql-python==$PYTHON_MYSQL_VERSION \ +&& pip install --no-cache-dir \ + amqp==$PYTHON_AMQP_VERSION \ + mysqlclient==$PYTHON_MYSQL_VERSION \ psycopg2==$PYTHON_PSYCOPG2_VERSION \ redis==$PYTHON_REDIS_VERSION \ + flower==$PYTHON_FLOWER_VERSION \ # psutil is needed by ARM builds otherwise gevent and gunicorn fail to start && UNAME=`uname -m` && if [ "${UNAME#*arm}" != $UNAME ]; then \ - pip install --no-cache-dir --no-use-pep517 \ + pip install --no-cache-dir \ psutil==$PYTHON_PSUTIL_VERSION \ ; fi \ # Install the Python packages needed to build Mayan EDMS -&& pip install --no-cache-dir --no-use-pep517 -r /src/requirements/build.txt \ +&& pip install --no-cache-dir -r /src/requirements/build.txt \ # Build Mayan EDMS -&& python setup.py sdist \ +&& python3 setup.py sdist \ # Install the built Mayan EDMS package -&& pip install --no-cache-dir --no-use-pep517 dist/mayan* \ +&& pip install --no-cache-dir dist/mayan* \ # Install the static content -&& mayan-edms.py installjavascript \ +&& mayan-edms.py installdependencies \ && MAYAN_STATIC_ROOT=${PROJECT_INSTALL_DIR}/static mayan-edms.py preparestatic --link --noinput COPY --chown=mayan:mayan requirements/testing-base.txt "${PROJECT_INSTALL_DIR}" #### -# Final image - BASE_IMAGE + Mayan install directory from the builder image +# Final image - BASE_IMAGE + BUILDER_IMAGE artifact (Mayan install directory) #### FROM BASE_IMAGE @@ -151,7 +152,7 @@ VOLUME ["/var/lib/mayan"] ENTRYPOINT ["entrypoint.sh"] EXPOSE 8000 -CMD ["mayan"] +CMD ["run_all"] RUN ${PROJECT_INSTALL_DIR}/bin/mayan-edms.py platformtemplate supervisord_docker > /etc/supervisor/conf.d/mayan.conf \ && apt-get clean autoclean \ diff --git a/docker/Makefile b/docker/Makefile index 1f8160ccde..cf00170662 100755 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,23 +1,29 @@ #!make include config.env -APT_PROXY ?= `/sbin/ip route|awk '/docker0/ { print $$9 }'`:3142 +HOST_IP = `/sbin/ip route|awk '/docker0/ { print $$9 }'` +APT_PROXY ?= $(HOST_IP):3142 CONSOLE_COLUMNS ?= `echo $$(tput cols)` CONSOLE_LINES ?= `echo $$(tput lines)` IMAGE_VERSION ?= `cat docker/rootfs/version` +PIP_INDEX_URL ?= http://$(HOST_IP):3141/root/pypi/+simple/ +PIP_TRUSTED_HOST ?= $(HOST_IP) docker-build: ## Build a new image locally. docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile . docker-build-with-proxy: ## Build a new image locally using an APT proxy as APT_PROXY. - docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile --build-arg APT_PROXY=$(APT_PROXY) . +docker-build-with-proxy: devpi-start + docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile --build-arg APT_PROXY=$(APT_PROXY) --build-arg PIP_INDEX_URL=$(PIP_INDEX_URL) --build-arg PIP_TRUSTED_HOST=$(PIP_TRUSTED_HOST) --build-arg HTTP_PROXY=$(HTTP_PROXY) --build-arg HTTPS_PROXY=$(HTTPS_PROXY) . + $(MAKE) devpi-stop docker-shell: ## Launch a bash instance inside a running container. Pass the container name via DOCKER_CONTAINER. docker exec -e TERM=$(TERM) -e "COLUMNS=$(CONSOLE_COLUMNS)" -e "LINES=$(CONSOLE_LINES)" -it $(DOCKER_CONTAINER) /bin/bash docker-runtest-container: ## Run a test container. docker-runtest-container: docker-test-cleanup - docker run -d \ + docker run \ + -d \ --name test-mayan-edms \ -p 80:8000 \ -v test-mayan_data:/var/lib/mayan \ @@ -28,13 +34,14 @@ docker-runtest-cleanup: ## Delete the test container and the test volume. @docker volume rm test-mayan_data || true docker-runtest-all: ## Executed the test suite in a test container. - docker run --rm run-tests + docker run --rm mayanedms/mayanedms:$(IMAGE_VERSION) run_tests docker-compose-build: docker-compose -f docker/docker-compose.yml -p mayan-edms build -docker-compose-build-with-proxy: - docker-compose -f docker/docker-compose.yml -p mayan-edms build --build-arg APT_PROXY=$(APT_PROXY) +docker-compose-build-with-proxy: devpi-start + docker-compose -f docker/docker-compose.yml -p mayan-edms build --build-arg APT_PROXY=$(APT_PROXY) --build-arg PIP_INDEX_URL=$(PIP_INDEX_URL) --build-arg PIP_TRUSTED_HOST=$(PIP_TRUSTED_HOST) --build-arg HTTP_PROXY=$(HTTP_PROXY) --build-arg HTTPS_PROXY=$(HTTPS_PROXY) + $(MAKE) devpi-stop docker-compose-up: docker-compose -f docker/docker-compose.yml -p mayan-edms up @@ -44,7 +51,8 @@ docker-staging-network-create: docker network create mayan-staging docker-staging-container-postgresql-start: - docker run -d \ + docker run \ + -d \ --name mayan-staging-postgres \ --network=mayan-staging \ -e POSTGRES_USER=mayan \ @@ -54,9 +62,11 @@ docker-staging-container-postgresql-start: $(DOCKER_POSTGRES_IMAGE_VERSION) docker-staging-container-redis-start: - docker run -d \ + docker run \ + -d \ --name mayan-staging-redis \ --network=mayan-staging \ + -v mayan-staging-redis:/data \ $(DOCKER_REDIS_IMAGE_VERSION) \ redis-server \ --databases \ @@ -66,8 +76,17 @@ docker-staging-container-redis-start: --save \ "" +docker-staging-container-rabbitmq-start: + docker run \ + -d \ + --name mayan-staging-rabbitmq \ + --network=mayan-staging \ + -v mayan-staging-rabbitmq:/var/lib/rabbitmq \ + $(DOCKER_RABBITMQ_IMAGE_VERSION) \ + docker-staging-container-mayan-start: - docker run -d \ + sleep 5 && docker run \ + -d \ --name mayan-staging-app \ --network=mayan-staging \ -p 80:8000 \ @@ -76,18 +95,36 @@ docker-staging-container-mayan-start: -e MAYAN_DATABASE_NAME=mayan \ -e MAYAN_DATABASE_PASSWORD=mayanuserpass \ -e MAYAN_DATABASE_USER=mayan \ - -e MAYAN_BROKER_URL="redis://mayan-staging-redis:6379/0" \ + -e MAYAN_CELERY_BROKER_URL=$(MAYAN_CELERY_BROKER_URL) \ -e MAYAN_CELERY_RESULT_BACKEND="redis://mayan-staging-redis:6379/1" \ -v mayan-staging-app:/var/lib/mayan \ mayanedms/mayanedms:$(IMAGE_VERSION) -docker-staging-start: docker-staging-network-create docker-staging-container-postgresql-start docker-staging-container-redis-start docker-staging-container-mayan-start +docker-staging-start-with-rabbitmq: MAYAN_CELERY_BROKER_URL="amqp://guest:guest@mayan-staging-rabbitmq:5672/" +docker-staging-start-with-rabbitmq: docker-staging-start + +docker-staging-start-with-redis: MAYAN_CELERY_BROKER_URL="redis://mayan-staging-redis:6379/0" +docker-staging-start-with-redis: docker-staging-start + +docker-staging-start: docker-staging-cleanup docker-staging-network-create docker-staging-container-postgresql-start docker-staging-container-rabbitmq-start docker-staging-container-redis-start docker-staging-container-mayan-start docker logs -f mayan-staging-app docker-staging-cleanup: ## Delete the test container and the test volume. @docker rm -f mayan-staging-app || true @docker rm -f mayan-staging-redis || true + @docker rm -f mayan-staging-rabbitmq || true @docker rm -f mayan-staging-postgres || true @docker volume rm mayan-staging-app || true @docker volume rm mayan-staging-postgres || true + @docker volume rm mayan-staging-rabbitmq || true + @docker volume rm mayan-staging-redis || true @docker network rm mayan-staging || true + +devpi-init: + devpi-server --init || true + +devpi-start: devpi-init + devpi-server --start --host=0.0.0.0 || true + +devpi-stop: + devpi-server --stop || true diff --git a/docker/docker-compose-development.yml b/docker/docker-compose-development.yml deleted file mode 100755 index 48c71afe26..0000000000 --- a/docker/docker-compose-development.yml +++ /dev/null @@ -1,72 +0,0 @@ -version: '2.1' - -volumes: - broker: - driver: local - app: - driver: local - db: - driver: local - results: - driver: local - -services: - broker: - container_name: mayan-edms-broker - image: healthcheck/rabbitmq - environment: - RABBITMQ_DEFAULT_USER: mayan - RABBITMQ_DEFAULT_PASS: mayan - RABBITMQ_DEFAULT_VHOST: mayan - volumes: - - broker:/var/lib/rabbitmq - results: - container_name: mayan-edms-results - image: healthcheck/redis - volumes: - - results:/data - #db: - # container_name: mayan-edms-db - # image: healthcheck/mysql - # environment: - # MYSQL_DATABASE: mayan - # MYSQL_PASSWORD: mayan-password - # MYSQL_ROOT_PASSWORD: root-password - # MYSQL_USER: mayan - # volumes: - # - db:/var/lib/mysql - db: - container_name: mayan-edms-db - image: healthcheck/postgres - environment: - POSTGRES_DB: mayan - POSTGRES_PASSWORD: mayan-password - POSTGRES_USER: mayan - volumes: - - db:/var/lib/postgresql/data - mayan-edms: - container_name: mayan-edms-app - image: mayan-edms/next - build: - context: ./ - args: - - APT_PROXY=172.18.0.1:3142 - depends_on: - broker: - condition: service_healthy - db: - condition: service_healthy - results: - condition: service_healthy - environment: - MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan - MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0 - MAYAN_DATABASE_ENGINE: django.db.backends.postgresql - MAYAN_DATABASE_HOST: db - MAYAN_DATABASE_NAME: mayan - MAYAN_DATABASE_PASSWORD: mayan-password - MAYAN_DATABASE_USER: mayan - ports: - - "80:80" - volumes: - - app:/var/lib/mayan diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 978b417148..ba9c21140f 100755 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,58 +1,130 @@ -version: '2.1' +version: '3.7' -volumes: - broker: - driver: local - app: - driver: local - db: - driver: local - results: - driver: local +networks: + mayan-bridge: + driver: bridge services: - broker: - container_name: mayan-edms-broker - image: healthcheck/rabbitmq - environment: - RABBITMQ_DEFAULT_USER: mayan - RABBITMQ_DEFAULT_PASS: mayan - RABBITMQ_DEFAULT_VHOST: mayan - volumes: - - broker:/var/lib/rabbitmq - results: - container_name: mayan-edms-results - image: healthcheck/redis - volumes: - - results:/data - db: - container_name: mayan-edms-db - image: healthcheck/postgres - environment: - POSTGRES_DB: mayan - POSTGRES_PASSWORD: mayan-password - POSTGRES_USER: mayan - volumes: - - db:/var/lib/postgresql/data - mayan-edms: - container_name: mayan-edms-app - image: mayanedms/mayanedms:latest + app: + build: + context: .. + dockerfile: ./docker/Dockerfile depends_on: - broker: - condition: service_healthy - db: - condition: service_healthy - results: - condition: service_healthy - environment: - MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan - MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0 - MAYAN_DATABASE_ENGINE: django.db.backends.postgresql - MAYAN_DATABASE_HOST: db - MAYAN_DATABASE_NAME: mayan - MAYAN_DATABASE_PASSWORD: mayan-password - MAYAN_DATABASE_USER: mayan + - postgresql + - redis + # Enable to use RabbitMQ + #- rabbitmq + environment: &mayan_env + # Enable to use RabbitMQ + # MAYAN_CELERY_BROKER_URL: amqp://mayan:mayanrabbitpass@broker:5672/mayan + # Disable Redis Broker to use RabbitMQ as Broker + MAYAN_CELERY_BROKER_URL: redis://redis:6379/0 + MAYAN_CELERY_RESULT_BACKEND: redis://redis:6379/1 + MAYAN_DATABASES: "{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayandbpass','USER':'mayan','HOST':'postgresql'}}" + image: mayanedms/mayanedms:3.3 + networks: + - mayan-bridge ports: - "80:8000" + restart: unless-stopped volumes: - - app:/var/lib/mayan + - /docker-volumes/mayan-edms/media:/var/lib/mayan + + postgresql: + environment: + POSTGRES_DB: mayan + POSTGRES_PASSWORD: mayandbpass + POSTGRES_USER: mayan + image: postgres:9.6-alpine + networks: + - mayan-bridge + restart: unless-stopped + volumes: + - /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data + + redis: + command: + - redis-server + - --databases + - "2" + - --maxmemory-policy + - allkeys-lru + - --save + - "" + image: redis:5.0-alpine + networks: + - mayan-bridge + restart: unless-stopped + + # Optional services + + # celery_flower: + # command: + # - run_celery + # - flower + # depends_on: + # - postgresql + # - redis + # # Enable to use RabbitMQ + # # - rabbitmq + # environment: + # <<: *mayan_env + # image: mayanedms/mayanedms:3.3 + # networks: + # - mayan-bridge + # ports: + # - "5555:5555" + # restart: unless-stopped + + # Enable to use RabbitMQ + # rabbitmq: + # container_name: mayan-edms-rabbitmq + # image: healthcheck/rabbitmq + # environment: + # RABBITMQ_DEFAULT_USER: mayan + # RABBITMQ_DEFAULT_PASS: mayanrabbitpass + # RABBITMQ_DEFAULT_VHOST: mayan + # networks: + # - mayan-bridge + # restart: unless-stopped + # volumes: + # - /docker-volumes/mayan-edms/rabbitmq:/var/lib/rabbitmq + + # Enable to run standalone workers + # worker_fast: + # command: + # - run_worker + # - fast + # depends_on: + # - postgresql + # - redis + # # Enable to use RabbitMQ + # # - rabbitmq + # environment: + # <<: *mayan_env + # image: mayanedms/mayanedms:3.3 + # networks: + # - mayan-bridge + # restart: unless-stopped + # volumes: + # - /docker-volumes/mayan-edms/media:/var/lib/mayan + + # Enable to run frontend gunicorn + # frontend: + # command: + # - run_frontend + # depends_on: + # - postgresql + # - redis + # # Enable to use RabbitMQ + # # - rabbitmq + # environment: + # <<: *mayan_env + # image: mayanedms/mayanedms:3.3 + # networks: + # - mayan-bridge + # ports: + # - "81:8000" + # restart: unless-stopped + # volumes: + # - /docker-volumes/mayan-edms/media:/var/lib/mayan diff --git a/docker/rootfs/usr/local/bin/entrypoint.sh b/docker/rootfs/usr/local/bin/entrypoint.sh index 18b0aa7e78..88c9764a64 100755 --- a/docker/rootfs/usr/local/bin/entrypoint.sh +++ b/docker/rootfs/usr/local/bin/entrypoint.sh @@ -1,4 +1,7 @@ -#!/bin/sh +#!/bin/bash + +# Use bash and not sh to support argument slicing "${@:2}" +# sh defaults to dash instead of bash. set -e echo "mayan: starting entrypoint.sh" @@ -11,17 +14,13 @@ DEFAULT_USER_GID=1000 MAYAN_USER_UID=${MAYAN_USER_UID:-${DEFAULT_USER_UID}} MAYAN_USER_GID=${MAYAN_USER_GID:-${DEFAULT_USER_GID}} -export MAYAN_DEFAULT_BROKER_URL=redis://127.0.0.1:6379/0 -export MAYAN_DEFAULT_CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0 - export MAYAN_ALLOWED_HOSTS='["*"]' export MAYAN_BIN=/opt/mayan-edms/bin/mayan-edms.py -export MAYAN_BROKER_URL=${MAYAN_BROKER_URL:-${MAYAN_DEFAULT_BROKER_URL}} -export MAYAN_CELERY_RESULT_BACKEND=${MAYAN_CELERY_RESULT_BACKEND:-${MAYAN_DEFAULT_CELERY_RESULT_BACKEND}} export MAYAN_INSTALL_DIR=/opt/mayan-edms export MAYAN_PYTHON_BIN_DIR=/opt/mayan-edms/bin/ export MAYAN_MEDIA_ROOT=/var/lib/mayan export MAYAN_SETTINGS_MODULE=${MAYAN_SETTINGS_MODULE:-mayan.settings.production} +export DJANGO_SETTINGS_MODULE=${MAYAN_SETTINGS_MODULE} export MAYAN_GUNICORN_BIN=${MAYAN_PYTHON_BIN_DIR}gunicorn export MAYAN_GUNICORN_WORKERS=${MAYAN_GUNICORN_WORKERS:-2} @@ -29,8 +28,8 @@ export MAYAN_GUNICORN_TIMEOUT=${MAYAN_GUNICORN_TIMEOUT:-120} export MAYAN_PIP_BIN=${MAYAN_PYTHON_BIN_DIR}pip export MAYAN_STATIC_ROOT=${MAYAN_INSTALL_DIR}/static -MAYAN_WORKER_FAST_CONCURRENCY=${MAYAN_WORKER_FAST_CONCURRENCY:-1} -MAYAN_WORKER_MEDIUM_CONCURRENCY=${MAYAN_WORKER_MEDIUM_CONCURRENCY:-1} +MAYAN_WORKER_FAST_CONCURRENCY=${MAYAN_WORKER_FAST_CONCURRENCY:-0} +MAYAN_WORKER_MEDIUM_CONCURRENCY=${MAYAN_WORKER_MEDIUM_CONCURRENCY:-0} MAYAN_WORKER_SLOW_CONCURRENCY=${MAYAN_WORKER_SLOW_CONCURRENCY:-1} update_uid_gid() { @@ -67,11 +66,9 @@ else fi export MAYAN_WORKER_SLOW_CONCURRENCY -export CELERY_ALWAYS_EAGER=False +# Allow importing of user setting modules export PYTHONPATH=$PYTHONPATH:$MAYAN_MEDIA_ROOT -chown mayan:mayan /var/lib/mayan -R - apt_get_install() { apt-get -q update apt-get install -y --force-yes --no-install-recommends --auto-remove "$@" @@ -79,9 +76,9 @@ apt_get_install() { rm -rf /var/lib/apt/lists/* } -initialize() { - echo "mayan: initialize()" - su mayan -c "${MAYAN_BIN} initialsetup --force --no-javascript" +initialsetup() { + echo "mayan: initialsetup()" + su mayan -c "${MAYAN_BIN} initialsetup --force --no-dependencies" } os_package_installs() { @@ -98,43 +95,75 @@ pip_installs() { fi } -start() { +run_all() { echo "mayan: start()" rm -rf /var/run/supervisor.sock exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf } -upgrade() { - echo "mayan: upgrade()" - su mayan -c "${MAYAN_BIN} performupgrade --no-javascript" +performupgrade() { + echo "mayan: performupgrade()" + su mayan -c "${MAYAN_BIN} performupgrade --no-dependencies" +} + +make_ready() { + # Check if this is a new install, otherwise try to upgrade the existing + # installation on subsequent starts + if [ ! -f $INSTALL_FLAG ]; then + initialsetup + else + performupgrade + fi +} + +set_uid_guid() { + echo "mayan: changing uid/guid" + usermod mayan -u ${MAYAN_USER_UID:-${DEFAULT_USER_UID}} + groupmod mayan -g ${MAYAN_USER_GID:-${DEFAULT_USER_GID}} } os_package_installs || true pip_installs || true +chown mayan:mayan /var/lib/mayan -R case "$1" in -mayan) # Check if this is a new install, otherwise try to upgrade the existing - # installation on subsequent starts - if [ ! -f $INSTALL_FLAG ]; then - initialize - else - upgrade - fi - start - ;; +run_initialsetup) + initialsetup + ;; -run-tests) # Check if this is a new install, otherwise try to upgrade the existing - # installation on subsequent starts - if [ ! -f $INSTALL_FLAG ]; then - initialize - else - upgrade - fi - run-tests.sh - ;; +run_performupgrade) + performupgrade + ;; -*) su mayan -c "$@"; - ;; +run_all) + make_ready + run_all + ;; + +run_celery) + run_celery.sh "${@:2}" + ;; + +run_command) + su mayan -c "${MAYAN_BIN} ${@:2}" + ;; + +run_frontend) + run_frontend.sh + ;; + +run_tests) + make_ready + run_tests.sh "${@:2}" + ;; + +run_worker) + run_worker.sh "${@:2}" + ;; + +*) + su mayan -c "$@" + ;; esac diff --git a/docker/rootfs/usr/local/bin/run-tests.sh b/docker/rootfs/usr/local/bin/run-tests.sh deleted file mode 100755 index 173f82ac18..0000000000 --- a/docker/rootfs/usr/local/bin/run-tests.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -export DEBIAN_FRONTEND=noninteractive - -apt-get update -apt-get install -y --no-install-recommends gcc python-dev tesseract-ocr-deu - -su mayan -c "$MAYAN_PIP_BIN install -r ${MAYAN_INSTALL_DIR}/testing-base.txt" - -su mayan -c "$MAYAN_BIN test --mayan-apps --settings=mayan.settings.testing" diff --git a/docker/rootfs/usr/local/bin/run_celery.sh b/docker/rootfs/usr/local/bin/run_celery.sh new file mode 100755 index 0000000000..a4aba0c8a2 --- /dev/null +++ b/docker/rootfs/usr/local/bin/run_celery.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Use -A and not --app. Both are the same but behave differently +# -A can be located before the command while --app cannot. +su mayan -c "${MAYAN_PYTHON_BIN_DIR}celery -A mayan $@" diff --git a/docker/rootfs/usr/local/bin/run_frontend.sh b/docker/rootfs/usr/local/bin/run_frontend.sh new file mode 100755 index 0000000000..f3c3967ffb --- /dev/null +++ b/docker/rootfs/usr/local/bin/run_frontend.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +MAYAN_GUNICORN_MAX_REQUESTS=${MAYAN_GUNICORN_MAX_REQUESTS:-500} +MAYAN_GUNICORN_MAX_REQUESTS_JITTERS=${MAYAN_GUNICORN_MAX_REQUESTS_JITTERS:-50} +MAYAN_GUNICORN_WORKER_CLASS=${MAYAN_GUNICORN_WORKER_CLASS:-sync} + +su mayan -c "${MAYAN_PYTHON_BIN_DIR}gunicorn -w ${MAYAN_GUNICORN_WORKERS} mayan.wsgi --max-requests ${MAYAN_GUNICORN_MAX_REQUESTS} --max-requests-jitter ${MAYAN_GUNICORN_MAX_REQUESTS_JITTERS} --worker-class ${MAYAN_GUNICORN_WORKER_CLASS} --bind 0.0.0.0:8000 --timeout ${MAYAN_GUNICORN_TIMEOUT}" diff --git a/docker/rootfs/usr/local/bin/run_tests.sh b/docker/rootfs/usr/local/bin/run_tests.sh new file mode 100755 index 0000000000..c05275963f --- /dev/null +++ b/docker/rootfs/usr/local/bin/run_tests.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +export DEBIAN_FRONTEND=noninteractive +TEST_ARGUMENT=${@:-"--mayan-apps"} + +apt-get update +apt-get install -y --no-install-recommends gcc python3-dev tesseract-ocr-deu + +su mayan -c "${MAYAN_PIP_BIN} install -r ${MAYAN_INSTALL_DIR}/testing-base.txt" + +su mayan -c "${MAYAN_BIN} test ${TEST_ARGUMENT} --settings=mayan.settings.testing" diff --git a/docker/rootfs/usr/local/bin/run_worker.sh b/docker/rootfs/usr/local/bin/run_worker.sh new file mode 100755 index 0000000000..5cb0997ea4 --- /dev/null +++ b/docker/rootfs/usr/local/bin/run_worker.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +export MAYAN_WORKER_NAME=${MAYAN_WORKER_NAME:-$1} + +QUEUE_LIST_DEFAULT=`su mayan -c "${MAYAN_PYTHON_BIN_DIR}mayan-edms.py platformtemplate worker_queues"` + +MAYAN_QUEUE_LIST=${MAYAN_QUEUE_LIST:-${QUEUE_LIST_DEFAULT}} + +# Use -A and not --app. Both are the same but behave differently +# -A can be located before the command while --app cannot. +# Pass ${@:2} to allow overriding the defaults arguments +su mayan -c "${MAYAN_PYTHON_BIN_DIR}celery -A mayan worker -Ofair -l ERROR -Q ${MAYAN_QUEUE_LIST} ${@:2}" diff --git a/docker/rootfs/version b/docker/rootfs/version index 17ce91803c..a0891f563f 100755 --- a/docker/rootfs/version +++ b/docker/rootfs/version @@ -1 +1 @@ -3.2.11 +3.3.4 diff --git a/docker/stack.yml b/docker/stack.yml index c8a7b243bd..95bff43909 100644 --- a/docker/stack.yml +++ b/docker/stack.yml @@ -9,24 +9,32 @@ volumes: services: db: - image: postgres environment: POSTGRES_DB: mayan - POSTGRES_PASSWORD: mayan-password + POSTGRES_PASSWORD: mayandbpass POSTGRES_USER: mayan + image: postgres volumes: - db:/var/lib/postgresql/data app: + environment: + MAYAN_CELERY_BROKER_URL: redis://redis:6379/1 + MAYAN_CELERY_RESULT_BACKEND: redis://redis:6379/0 + MAYAN_DATABASES: "{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayandbpass','USER':'mayan','HOST':'db'}}" image: mayanedms/mayanedms:latest ports: - 80:8000 - environment: - MAYAN_DATABASE_ENGINE: django.db.backends.postgresql - MAYAN_DATABASE_HOST: db - MAYAN_DATABASE_NAME: mayan - MAYAN_DATABASE_PASSWORD: mayan-password - MAYAN_DATABASE_USER: mayan - MAYAN_DATABASE_CONN_MAX_AGE: 0 volumes: - app:/var/lib/mayan + + redis: + command: + - redis-server + - --databases + - "2" + - --maxmemory-policy + - allkeys-lru + - --save + - "" + image: redis:5.0 diff --git a/docs/_ext/djangodocs.py b/docs/_ext/djangodocs.py deleted file mode 100644 index 3cf00a38e1..0000000000 --- a/docs/_ext/djangodocs.py +++ /dev/null @@ -1,229 +0,0 @@ -""" -Sphinx plugins for Django documentation. -""" -import os -import re - -from docutils import nodes, transforms -try: - import json -except ImportError: - try: - import simplejson as json - except ImportError: - try: - from django.utils import simplejson as json - except ImportError: - json = None - -from sphinx import addnodes, roles, __version__ as sphinx_ver -from sphinx.builders.html import StandaloneHTMLBuilder -from sphinx.writers.html import SmartyPantsHTMLTranslator -from sphinx.util.console import bold -from sphinx.util.compat import Directive - -# RE for option descriptions without a '--' prefix -simple_option_desc_re = re.compile( - r'([-_a-zA-Z0-9]+)(\s*.*?)(?=,\s+(?:/|-|--)|$)') - -def setup(app): - app.add_crossref_type( - directivename = "setting", - rolename = "setting", - indextemplate = "pair: %s; setting", - ) - app.add_crossref_type( - directivename = "templatetag", - rolename = "ttag", - indextemplate = "pair: %s; template tag" - ) - app.add_crossref_type( - directivename = "templatefilter", - rolename = "tfilter", - indextemplate = "pair: %s; template filter" - ) - app.add_crossref_type( - directivename = "fieldlookup", - rolename = "lookup", - indextemplate = "pair: %s; field lookup type", - ) - app.add_description_unit( - directivename = "django-admin", - rolename = "djadmin", - indextemplate = "pair: %s; django-admin command", - parse_node = parse_django_admin_node, - ) - app.add_description_unit( - directivename = "django-admin-option", - rolename = "djadminopt", - indextemplate = "pair: %s; django-admin command-line option", - parse_node = parse_django_adminopt_node, - ) - app.add_config_value('django_next_version', '0.0', True) - app.add_directive('versionadded', VersionDirective) - app.add_directive('versionchanged', VersionDirective) - app.add_builder(DjangoStandaloneHTMLBuilder) - - -class VersionDirective(Directive): - has_content = True - required_arguments = 1 - optional_arguments = 1 - final_argument_whitespace = True - option_spec = {} - - def run(self): - env = self.state.document.settings.env - arg0 = self.arguments[0] - is_nextversion = env.config.django_next_version == arg0 - ret = [] - node = addnodes.versionmodified() - ret.append(node) - if not is_nextversion: - if len(self.arguments) == 1: - linktext = 'Please see the release notes ' % (arg0) - xrefs = roles.XRefRole()('doc', linktext, linktext, self.lineno, self.state) - node.extend(xrefs[0]) - node['version'] = arg0 - else: - node['version'] = "Development version" - node['type'] = self.name - if len(self.arguments) == 2: - inodes, messages = self.state.inline_text(self.arguments[1], self.lineno+1) - node.extend(inodes) - if self.content: - self.state.nested_parse(self.content, self.content_offset, node) - ret = ret + messages - env.note_versionchange(node['type'], node['version'], node, self.lineno) - return ret - - -class DjangoHTMLTranslator(SmartyPantsHTMLTranslator): - """ - Django-specific reST to HTML tweaks. - """ - - # Don't use border=1, which docutils does by default. - def visit_table(self, node): - self._table_row_index = 0 # Needed by Sphinx - self.body.append(self.starttag(node, 'table', CLASS='docutils')) - - # ? Really? - def visit_desc_parameterlist(self, node): - self.body.append('(') - self.first_param = 1 - self.param_separator = node.child_text_separator - - def depart_desc_parameterlist(self, node): - self.body.append(')') - - if sphinx_ver < '1.0.8': - # - # Don't apply smartypants to literal blocks - # - def visit_literal_block(self, node): - self.no_smarty += 1 - SmartyPantsHTMLTranslator.visit_literal_block(self, node) - - def depart_literal_block(self, node): - SmartyPantsHTMLTranslator.depart_literal_block(self, node) - self.no_smarty -= 1 - - # - # Turn the "new in version" stuff (versionadded/versionchanged) into a - # better callout -- the Sphinx default is just a little span, - # which is a bit less obvious that I'd like. - # - # FIXME: these messages are all hardcoded in English. We need to change - # that to accomodate other language docs, but I can't work out how to make - # that work. - # - version_text = { - 'deprecated': 'Deprecated in Django %s', - 'versionchanged': 'Changed in Django %s', - 'versionadded': 'New in Django %s', - } - - def visit_versionmodified(self, node): - self.body.append( - self.starttag(node, 'div', CLASS=node['type']) - ) - title = "%s%s" % ( - self.version_text[node['type']] % node['version'], - len(node) and ":" or "." - ) - self.body.append('%s ' % title) - - def depart_versionmodified(self, node): - self.body.append("\n") - - # Give each section a unique ID -- nice for custom CSS hooks - def visit_section(self, node): - old_ids = node.get('ids', []) - node['ids'] = ['s-' + i for i in old_ids] - node['ids'].extend(old_ids) - SmartyPantsHTMLTranslator.visit_section(self, node) - node['ids'] = old_ids - -def parse_django_admin_node(env, sig, signode): - command = sig.split(' ')[0] - env._django_curr_admin_command = command - title = "django-admin.py %s" % sig - signode += addnodes.desc_name(title, title) - return sig - -def parse_django_adminopt_node(env, sig, signode): - """A copy of sphinx.directives.CmdoptionDesc.parse_signature()""" - from sphinx.domains.std import option_desc_re - count = 0 - firstname = '' - for m in option_desc_re.finditer(sig): - optname, args = m.groups() - if count: - signode += addnodes.desc_addname(', ', ', ') - signode += addnodes.desc_name(optname, optname) - signode += addnodes.desc_addname(args, args) - if not count: - firstname = optname - count += 1 - if not count: - for m in simple_option_desc_re.finditer(sig): - optname, args = m.groups() - if count: - signode += addnodes.desc_addname(', ', ', ') - signode += addnodes.desc_name(optname, optname) - signode += addnodes.desc_addname(args, args) - if not count: - firstname = optname - count += 1 - if not firstname: - raise ValueError - return firstname - - -class DjangoStandaloneHTMLBuilder(StandaloneHTMLBuilder): - """ - Subclass to add some extra things we need. - """ - - name = 'djangohtml' - - def finish(self): - super(DjangoStandaloneHTMLBuilder, self).finish() - if json is None: - self.warn("cannot create templatebuiltins.js due to missing simplejson dependency") - return - self.info(bold("writing templatebuiltins.js...")) - xrefs = self.env.domaindata["std"]["objects"] - templatebuiltins = { - "ttags": [n for ((t, n), (l, a)) in xrefs.items() - if t == "templatetag" and l == "ref/templates/builtins"], - "tfilters": [n for ((t, n), (l, a)) in xrefs.items() - if t == "templatefilter" and l == "ref/templates/builtins"], - } - outfilename = os.path.join(self.outdir, "templatebuiltins.js") - f = open(outfilename, 'wb') - f.write('var django_template_builtins = ') - json.dump(templatebuiltins, f) - f.write(';\n') - f.close(); diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 5b7b241614..77d0d5d8fc 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -3,3 +3,15 @@ background: #2c3e50; padding: 3px; } + +.document a.internal { + text-decoration: none; + border-bottom: 1px dotted #707070; +} + +.document a.internal:visited { + color: #2980B9; + text-decoration: none; + border-bottom: 1px dotted #707070; +} + diff --git a/docs/chapters/acls.rst b/docs/chapters/acls.txt similarity index 98% rename from docs/chapters/acls.rst rename to docs/chapters/acls.txt index 02b9bad972..848f79d6eb 100644 --- a/docs/chapters/acls.rst +++ b/docs/chapters/acls.txt @@ -1,6 +1,6 @@ -******************** +==================== Access control lists -******************** +==================== Besides the permissions system explained in :doc:`../chapters/permissions`, Mayan EDMS provides per object permission granting. This feature is used to diff --git a/docs/chapters/app_creation.rst b/docs/chapters/app_creation.rst deleted file mode 100644 index 5fab2e8e74..0000000000 --- a/docs/chapters/app_creation.rst +++ /dev/null @@ -1,159 +0,0 @@ -************ -App creation -************ - -Mayan EDMS apps are essentially Django app with some extra code to register -navigation, permissions and other relationships. - - -App modules -=========== - -- __init__.py - - Should be empty if possible. No initialization code should be here, use the - ready() method of the MayanAppConfig class in the apps.py module. - -- admin.py - - Standard Django app module to define how models are to be presented in the - admin interface. - -- api_views.py - - REST API views go here. Mayan EDMS uses Django REST Framework API view - classes. - -- apps.py - - Contains the MayanAppConfig subclass as required by Django 1.7 and up. This - is a place to define the app name and translatable verbose name as well as - code to be execute when the modules of the app are ready. - -- classes.py - - Hold python classes to be used internally or externally. Any class defined by - the app that is not a model. - -- events.py - - Define event class instances that are later committed to a log by custom - code. - -- exceptions.py - - Custom exceptions defined by the app. - -- fields.py - - Place any custom form field classed you define here. - -- forms.py - - Standard Django app module that hold custom form classes. - -- handlers.py - - Contains the signal handlers, functions that will process a given signal - emitted from this or other apps. Connect the handler functions to the - corresponding signal in the ready() method of the MayanAppConfig subclass in - apps.py - -- html_widgets.py - - Classes to render an HTML widget. HTML widget are not the same as Django's - native form widgets. Form widgets only work as part of a form field. - HTML widgets are for use outside of forms, such as in a table cell. - -- licenses.py - - This module outlines the license text of the third party content used in - the app. It could be other Python libraries, JavaScript libraries, etc. - -- links.py - - Defines the links to be used by the app. Import only from the navigation app - and the local permissions.py file. - -- literals.py - - Stores magic numbers, module choices (if static), settings defaults, and - constants. Should contain all capital case variables. Must not import from - any other module. - -- managers.py - - Standard Django app module that hold custom model managers. These act as - model class method to performs actions in a series of model instances or - utilitarian actions on external models instances. - -- models.py - - Standard Django app module that defines ORM persistent data schema. - -- permissions.py - - Defines the permissions to be used to validate user access by links and views. - Imports only from the permissions app. Link or view conditions such as - testing for is_staff or is_super_user flag are defined in this same module. - -- runtime.py - - Use this module when you need the same instance of a class for the entire app. - This module acts as a shared memory space for the other modules of the app or - other apps. - -- search.py - - Search model definitions. Define which field of the app's models are - searchable. - -- serializers.py - - Hold Django REST Framework serializers used by the api_views.py module. - -- settings.py - - Define the configuration settings instances that the app will use. - -- signals.py - - Any custom defined signal goes here. - -- statistics.py - - Provides functions that will compute any sort of statistical information on - the app’s data. - -- tasks.py - - Code to be execute in the background or as an out-of-process action. - -- tests/ directory - - Hold test modules. There should be one test_*.py module for each aspect being - tested, examples: test_api.py, test_views.py, test_parsers.py, test_permissions.py - Any shared constant data used by the tests should be added to tests/literals.py - -- utils.py - - Holds utilitarian code that doesn't fit on any other app module or that is - used by several modules in the app. Anything used internally by the app that - is not a class or a literal (should be as little as possible) - -- widgets.py - - Custom form widgets go here. This should be the only place with presentation - directives in the app (aside the templates). - - -Views -===== - -The module common.generics provides custom generic class based views to be used. -The basic views used to create, edit, view and delete objects in Mayan EDMS -are: SingleObjectCreateView, SingleObjectDetailView, SingleObjectEditView, -and SingleObjectListView - -These views handle aspects relating to view permissions, object permissions, -post action redirection and template context generation. diff --git a/docs/chapters/backups.rst b/docs/chapters/backups.rst deleted file mode 100644 index 496ce9c766..0000000000 --- a/docs/chapters/backups.rst +++ /dev/null @@ -1,70 +0,0 @@ -******* -Backups -******* - -To backup your install of Mayan EDMS just copy the actual document files and -the database content. If you are using the default storage backend, the -document files should be found in the ``media`` folder of your installation. - -To dump the content of your database manager refer to the documentation chapter -regarding database data "dumping". - -Here is an example of how to perform a backup and a restore of a PostgreSQL -database. - -To dump the database into an SQL text file:: - - pg_dump -h -U -c -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql - -Example:: - - pg_dump -h 127.0.0.1 -U mayan -c mayan -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql - -To restore the database from the SQL text file:: - - psql -h -U -d -W -f - -Example:: - - psql -h 127.0.0.1 -U mayan -d mayan -W -f 2018-06-07_18-10-56.sql - -Here is an example of how to perform a backup and a restore of a PostgreSQL -Docker container using a compressed dump file. A dump file is not compatible or -can be used interchangeable with an SQL text file. - -To backup a PostgreSQL Docker container:: - - docker exec pg_dump -U -Fc -c > `date +%Y-%m-%d"_"%H-%M-%S`.dump - -Example:: - - docker exec mayan-edms-db pg_dump -U mayan -Fc -c mayan > `date +%Y-%m-%d"_"%H-%M-%S`.dump - -This will produce a compressed dump file with the current date and time as the filename. - -To restore a PostgreSQL Docker container:: - - docker exec -i pg_restore -U -d < - -Since it is not possible to drop a currently open PostgreSQL database, this -command must be used on a new and empty PostsgreSQL container. - -Example:: - - docker run -d \ - --name mayan-edms-pg-new \ - --restart=always \ - -p 5432:5432 \ - -e POSTGRES_USER=mayan \ - -e POSTGRES_DB=mayan \ - -e POSTGRES_PASSWORD=mayanuserpass \ - -v /docker-volumes/mayan-edms/postgres-new:/var/lib/postgresql/data \ - |DOCKER_POSTGRES_IMAGE_VERSION| - - docker exec -i mayan-edms-pg-new pg_restore -U mayan -d mayan < 2018-06-07_17-09-34.dump - -More information at: - - - PostgreSQL: https://www.postgresql.org/docs/current/static/backup.html - - MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html - - SQLite: Just copy the file ``mayan/media/db.sqlite3`` diff --git a/docs/chapters/backups.txt b/docs/chapters/backups.txt new file mode 100644 index 0000000000..c9f3f397e6 --- /dev/null +++ b/docs/chapters/backups.txt @@ -0,0 +1,18 @@ +======= +Backups +======= + +To backup your install of Mayan EDMS just copy the ``media`` folder and +the database content. + +If you are using the default storage backend, the ``media`` should be located +at |MAYAN_MEDIA_ROOT|:: + + sudo tar -zcvf backup.tar.gz |MAYAN_MEDIA_ROOT| + +To dump the content of your database manager refer to the documentation chapter +regarding database data "dumping". + +- PostgreSQL: https://www.postgresql.org/docs/current/backup-dump.html +- MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html + diff --git a/docs/chapters/cabinets.rst b/docs/chapters/cabinets.txt similarity index 50% rename from docs/chapters/cabinets.rst rename to docs/chapters/cabinets.txt index 619acdbfbe..f9dec72226 100644 --- a/docs/chapters/cabinets.rst +++ b/docs/chapters/cabinets.txt @@ -1,13 +1,11 @@ +======== Cabinets ======== Cabinets are a multi-level method to organize documents. Each cabinet can -contain documents as well as other sub level cabinets. Cabinets can -be added from the :menuselection:`Cabinets --> Add new` menu. +contain documents as well as other sub level cabinets. With a cabinet structure created, the next step is to add documents to them. -To add documents to a cabinet, select the cabinet tab of a document, and -select :menuselection:`Actions --> Add to cabinets` link. Documents can also be added in bulk to one or more cabinets from any view that lists documents. diff --git a/docs/chapters/checkouts.rst b/docs/chapters/checkouts.txt similarity index 96% rename from docs/chapters/checkouts.rst rename to docs/chapters/checkouts.txt index 830aa67609..360a09a4fd 100644 --- a/docs/chapters/checkouts.rst +++ b/docs/chapters/checkouts.txt @@ -1,6 +1,6 @@ -********* +========= Checkouts -********* +========= Checkouts are a way to block certain accesses or actions of a document for a period of time. diff --git a/docs/chapters/database_conversion.rst b/docs/chapters/database_conversion.rst deleted file mode 100644 index 52f153f57c..0000000000 --- a/docs/chapters/database_conversion.rst +++ /dev/null @@ -1,103 +0,0 @@ -******************* -Database conversion -******************* - -Version 3.1.x added a new management command to help convert data residing in -an SQLite database to other database managers like PostgreSQL. Here is the -conversion procedure. - -Direct install -============== - -* Make a backup of your existing SQLite database and documents by copying the - ``|MAYAN_MEDIA_ROOT|`` folder. -* :doc:`Upgrade to at least version 3.1.3. <../releases/3.1.3>` -* Migrate the existing SQLite database with the command ``performupgrade``:: - - sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| |MAYAN_BIN| performupgrade - -* Install PostgreSQL:: - - sudo apt-get install postgresql libpq-dev - -* Provision a PostgreSQL database:: - - sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';" - sudo -u postgres createdb -O mayan mayan - -* Install the Python client for PostgreSQL:: - - sudo -u mayan |MAYAN_PIP_BIN| install --no-cache-dir --no-use-pep517 psycopg2==2.7.3.2 - -* Copy the newly created fallback config file:: - - cp |MAYAN_MEDIA_ROOT|/config_backup.yml |MAYAN_MEDIA_ROOT|/config.yml - -* Edit the configuration file to add the entry for the PostgreSQL database and - rename the SQLite database to 'old':: - - # Before - DATABASES: - default: - ATOMIC_REQUESTS: false - AUTOCOMMIT: true - CONN_MAX_AGE: 0 - ENGINE: django.db.backends.sqlite3 - HOST: '' - NAME: |MAYAN_MEDIA_ROOT|/db.sqlite3 - OPTIONS: {} - PASSWORD: '' - PORT: '' - TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null} - TIME_ZONE: null - USER: '' - - # After - DATABASES: - old: - ATOMIC_REQUESTS: false - AUTOCOMMIT: true - CONN_MAX_AGE: 0 - ENGINE: django.db.backends.sqlite3 - HOST: '' - NAME: |MAYAN_MEDIA_ROOT|/db.sqlite3 - OPTIONS: {} - PASSWORD: '' - PORT: '' - TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null} - TIME_ZONE: null - USER: '' - default: - ATOMIC_REQUESTS: false - AUTOCOMMIT: true - CONN_MAX_AGE: 0 - ENGINE: django.db.backends.postgresql - HOST: '127.0.0.1' - NAME: |MAYAN_MEDIA_ROOT|/db.sqlite3 - OPTIONS: {} - PASSWORD: 'mayanuserpass' - PORT: '' - TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null} - TIME_ZONE: null - USER: 'mayan' - -* Migrate the new database to create the empty tables:: - - sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| |MAYAN_BIN| migrate - -* Convert the data in the SQLite and store it in the PostgreSQL database:: - - sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| |MAYAN_BIN| convertdb --from=old --to=default --force - -* Update the supervisor config file to have Mayan EDMS run from the PostgreSQL database:: - - [supervisord] - environment= - <...> - MAYAN_DATABASE_ENGINE=django.db.backends.postgresql, - MAYAN_DATABASE_HOST=127.0.0.1, - MAYAN_DATABASE_NAME=mayan, - MAYAN_DATABASE_PASSWORD=mayanuserpass, - MAYAN_DATABASE_USER=mayan, - MAYAN_DATABASE_CONN_MAX_AGE=0, - <...> diff --git a/docs/chapters/deploying.rst b/docs/chapters/deploying.txt similarity index 51% rename from docs/chapters/deploying.rst rename to docs/chapters/deploying.txt index 5c9abe4ebb..7889435e59 100644 --- a/docs/chapters/deploying.rst +++ b/docs/chapters/deploying.txt @@ -1,6 +1,8 @@ -****************** -Direct deployments -****************** +.. _deployment_basic: + +================= +Direct deployment +================= Mayan EDMS should be deployed like any other Django_ project and preferably using virtualenv_. Below are some ways to deploy and use Mayan EDMS. @@ -22,89 +24,96 @@ This setup uses less memory and CPU resources at the expense of some speed. For another setup that offers more performance and scalability refer to the `Advanced deployment`_ below. -1. Install binary dependencies: -------------------------------- +#. Install binary dependencies: + If using a Debian_ or Ubuntu_ based Linux distribution, get the executable - requirements using:: + requirements using: + + .. code-block:: bash sudo apt-get install exiftool g++ gcc ghostscript gnupg1 graphviz \ libfuse2 libjpeg-dev libmagic1 libpq-dev libpng-dev libreoffice \ - libtiff-dev poppler-utils postgresql python-dev python-virtualenv \ + libtiff-dev poppler-utils postgresql python3-dev python3-virtualenv redis-server sane-utils supervisor tesseract-ocr zlib1g-dev -y .. note:: - Platforms with the ARM CPU might also need additional requirements. - :: + Platforms with the ARM CPU might also need additional requirements: + + .. code-block:: bash sudo apt-get install libffi-dev libssl-dev -y -2. Create the user account for the installation: ------------------------------------------------- - This will create an unprivileged user account that is also unable to login. - :: +#. Create the user account for the installation: - sudo adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" + This will create an unprivileged user account that is also unable to login: + + .. code-block:: bash + + sudo adduser mayan --disabled-password --disabled-login --gecos "" -3. Create the parent directory where the project will be deployed: ------------------------------------------------------------------- +#. Create the parent directory where the project will be deployed: + ``/opt/`` is a good choice as it is meant is for "software and add-on packages that are not part of the default installation". (https://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/opt.html). - Create the ``/opt`` directory if it doesn't already exists. - :: + Create the ``/opt`` directory if it doesn't already exists: + + .. code-block:: bash sudo mkdir /opt -4. Create the Python virtual environment: ------------------------------------------ +#. Create the Python virtual environment: + This will keep all the Python packages installed here isolated from the rest - of the Python packages in the system. - :: + of the Python packages in the system: - sudo virtualenv |MAYAN_INSTALLATION_DIRECTORY| + .. code-block:: bash + + sudo virtualenv |MAYAN_INSTALLATION_DIRECTORY| -p /usr/bin/python3 -5. Make the mayan user the owner of the installation directory: ---------------------------------------------------------------- - :: +#. Make the mayan user the owner of the installation directory: + + .. code-block:: bash sudo chown mayan:mayan |MAYAN_INSTALLATION_DIRECTORY| -R -6. Install Mayan EDMS from PyPI: --------------------------------- - :: +#. Install Mayan EDMS from PyPI: - sudo -u mayan |MAYAN_PIP_BIN| install --no-cache-dir --no-use-pep517 mayan-edms + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 mayan-edms -7. Install the Python client for PostgreSQL and Redis: ------------------------------------------------------- - :: +#. Install the Python client for PostgreSQL and Redis: - sudo -u mayan |MAYAN_PIP_BIN| install --no-cache-dir --no-use-pep517 psycopg2==|PYTHON_PSYCOPG2_VERSION| redis==|PYTHON_REDIS_VERSION| + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psycopg2==|PYTHON_PSYCOPG2_VERSION| redis==|PYTHON_REDIS_VERSION| .. note:: - Platforms with the ARM CPU might also need additional requirements. - :: + Platforms with the ARM CPU might also need additional requirements: - sudo -u mayan |MAYAN_PIP_BIN| install --no-cache-dir --no-use-pep517 psutil==|PYTHON_PSUTIL_VERSION| + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psutil==|PYTHON_PSUTIL_VERSION| -8. Create the database for the installation: --------------------------------------------- - :: +#. Create the database for the installation: + + .. code-block:: bash sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';" sudo -u postgres createdb -O mayan mayan -9. Initialize the project: --------------------------- +#. Initialize the project: + This step will create all the database structures, download static media files like JavaScript libraries and HTML frameworks, and create and initial admin account with a random password. @@ -121,67 +130,67 @@ For another setup that offers more performance and scalability refer to the .. warning:: If this step is interrupted, even if it is later resumed, will - cause the automatic admin user to not be created in some cases. Make - sure all environment variables and values are correct. If this + cause the automatic admin user to not be created in some cases. Make + sure all environment variables and values are correct. If this happens, refer to the troubleshooting chapters: :ref:`troubleshooting-autoadmin-account` and :ref:`troubleshooting-admin-password`. - :: + .. code-block:: bash - sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ - MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ - MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ |MAYAN_BIN| initialsetup -10. Collect the static files: ------------------------------ - This step merges and compressed static media files so they can be served more - effectively. +#. Collect the static files: - :: + This step merges and compressed static media files so they can be served more + effectively. - sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ - |MAYAN_BIN| preparestatic --noinput + .. code-block:: bash + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput -11. Create the supervisor file at ``|MAYAN_SUPERVISOR_CONF|``: ------------------------------------------------------------------------- - :: +#. Create the supervisor file at ``|MAYAN_SUPERVISOR_CONF|``: - sudo MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ - MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ - MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ - |MAYAN_BIN| platformtemplate supervisord > |MAYAN_SUPERVISOR_CONF| + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" -12. Configure Redis: --------------------- - Configure Redis to discard data when it runs out of memory, not save its - database and only keep 1 database: - :: +#. Configure Redis: - sudo echo "maxmemory-policy allkeys-lru" >> /etc/redis/redis.conf - sudo echo "save \"\"" >> /etc/redis/redis.conf - sudo echo "databases 1" >> /etc/redis/redis.conf - sudo systemctl restart redis + Configure Redis to discard data when it runs out of memory, not save its + database and only keep 1 database: -13. Enable and restart the services [1_]: ------------------------------------------ - :: + .. code-block:: bash - sudo systemctl enable supervisor - sudo systemctl restart supervisor + sudo echo "maxmemory-policy allkeys-lru" >> /etc/redis/redis.conf + sudo echo "save \"\"" >> /etc/redis/redis.conf + sudo echo "databases 2" >> /etc/redis/redis.conf + sudo systemctl restart redis + +#. Enable and restart the services [1_]: + + .. code-block:: bash + + sudo systemctl enable supervisor + sudo systemctl restart supervisor -14. Cleaning up: ----------------- - The following operating system dependencies are only needed during - installation and can be removed. - :: +#. Cleaning up: - sudo apt-get remove --purge libjpeg-dev libpq-dev libpng-dev libtiff-dev zlib1g-dev + The following operating system dependencies are only needed during + installation and can be removed. + + .. code-block:: bash + + sudo apt-get remove --purge libjpeg-dev libpq-dev libpng-dev libtiff-dev zlib1g-dev .. _deployment_advanced: @@ -195,58 +204,64 @@ persistent by default, this means that pending tasks are not lost in the case of a restart or power failure. The Gunicorn workers are increased to 3. -1. Install RabbitMQ: --------------------- +#. Install RabbitMQ: If using a Debian_ or Ubuntu_ based Linux distribution, get the executable - requirements using:: + requirements using: + + .. code-block:: bash sudo apt-get install rabbitmq-server -y -2. Install the Python client for RabbitMQ: ------------------------------------------- - :: +#. Install the Python client for RabbitMQ: - sudo -u mayan |MAYAN_PIP_BIN| install --no-cache-dir --no-use-pep517 librabbitmq==|PYTHON_LIBRABBITMQ_VERSION| + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 amqp==|PYTHON_AMQP_VERSION| -3. Create the RabbitMQ user and vhost: --------------------------------------- - :: +#. Create the RabbitMQ user and vhost: + + .. code-block:: bash sudo rabbitmqctl add_user mayan mayanrabbitmqpassword sudo rabbitmqctl add_vhost mayan sudo rabbitmqctl set_permissions -p mayan mayan ".*" ".*" ".*" -4. Edit the supervisor file at ``|MAYAN_SUPERVISOR_CONF|``: ---------------------------------------------------------------------- - Replace (paying attention to the comma at the end):: +#. Edit the supervisor file at ``|MAYAN_SUPERVISOR_CONF|``: - MAYAN_BROKER_URL="redis://127.0.0.1:6379/0", + Replace (paying attention to the comma at the end): - with:: + .. code-block:: ini - MAYAN_BROKER_URL="amqp://mayan:mayanrabbitmqpassword@localhost:5672/mayan", + MAYAN_CELERY_BROKER_URL="redis://127.0.0.1:6379/0", - increase the number of Gunicorn workers to 3 in the line (``-w 2`` section):: + with: + + .. code-block:: ini + + MAYAN_CELERY_BROKER_URL="amqp://mayan:mayanrabbitmqpassword@localhost:5672/mayan", + + increase the number of Gunicorn workers to 3 in the line (``-w 2`` section): + + .. code-block:: ini command = |MAYAN_GUNICORN_BIN| -w 2 mayan.wsgi --max-requests 1000 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120 remove the concurrency limit (or increase it) of the fast worker (remove ``--concurrency=1``). -5. Restart the services: ------------------------- - :: +#. Restart the services: + + .. code-block:: bash sudo supervisorctl reread sudo supervisorctl restart all - [1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740 .. _Debian: https://www.debian.org/ diff --git a/docs/chapters/development.rst b/docs/chapters/development.rst deleted file mode 100644 index c5cb508b5b..0000000000 --- a/docs/chapters/development.rst +++ /dev/null @@ -1,573 +0,0 @@ -*********** -Development -*********** - -Mayan EDMS is under active development, and contributions are welcome. - -If you have a feature request, suggestion or bug report, please open a new -issue on the `GitLab issue tracker`_. To submit patches, please send a merge -request on GitLab_. - -.. _GitLab: https://gitlab.com/mayan-edms/mayan-edms/ -.. _`GitLab issue tracker`: https://gitlab.com/mayan-edms/mayan-edms/issues - - -Project philosophies -==================== - -How to think about Mayan EDMS when doing changes or adding new features; -why things are the way they are in Mayan EDMS: - -- Functionality must be as market/sector independent as possible, code for the - 95% of use cases. -- Each user must be able to configure and customize it to their needs after - install. -- Abstract as much as possible, each app must be an expert in just one thing, - for other things they should use the API/classes/functions of other apps. -- Assume as little as possible about anything outside the project - (hardware, OS, storage). -- Provide Python based abstraction so that a default install runs with a single - step. -- No hard dependencies on binaries unless there is no other choice. -- Provide “drivers” or switchable backends to allow users to fine tune the - installation. -- Call to binaries only when there is no other choice or the Python choices are - not viable/mature/efficient. -- Each app is as independent and self contained as possible. Exceptions, the - basic requirements: navigation, permissions, common, main. -- If an app is meant to be used by more than one other app, it should be as - generic as possible in regard to the project and another app will bridge the functionality. - - - Example: since indexing (document_indexing) only applies to documents, the - app is specialized and depends on the documents app. - - -Coding conventions -================== - -Follow PEP8 ------------ - -Whenever possible, but don't obsess over things like line length: - -.. code-block:: bash - - $ flake8 --ignore=E501,E128,E122 |less - -To perform automatic PEP8 checks, install flake8's git hook using: - -.. code-block:: bash - - $ flake8 --install-hook git - - -Imports -------- - -Import order should be: - -- Standard Python modules -- Installed Python modules -- Core Django modules -- Installed Django modules -- Mayan EDMS modules -- Local imports - -Example: - -.. code-block:: bash - - from __future__ import absolute_import - - # Standard Python library - import base64 - - # 3rd party installed Python libraries - import requests - - # Django core modules - from django.db.models import Q - from django.template.defaultfilters import slugify - from django.utils.translation import ugettext - from django.utils.translation import ugettext_lazy as _ - - # 3rd party installed Django libraries - from rest_framework import APIView - - # Mayan apps - from metadata.classes import MetadataClass - - # Local app imports (relative) - from .conf.settings import ( - AVAILABLE_INDEXING_FUNCTIONS, - MAX_SUFFIX_COUNT, SLUGIFY_PATHS - ) - from .exceptions import MaxSuffixCountReached - from .filesystem import ( - fs_create_index_directory, fs_create_document_link, - fs_delete_document_link, fs_delete_index_directory, - assemble_suffixed_filename - ) - from .models import Index, IndexInstanceNode, DocumentRenameCount - -All local app module imports are in relative form. Local app module name is to -be referenced as little as possible, unless required by a specific feature, -trick, restriction (e.g., Runtime modification of the module's attributes). - -Incorrect: - -.. code-block:: bash - - - # documents app views.py model - from documents.models import Document - -Correct: - -.. code-block:: bash - - # documents app views.py model - from .models import Document - - -Dependencies ------------- - -Mayan EDMS apps follow a hierarchical model of dependency. Apps import from -their parents or siblings, never from their children. Think plugins. A parent -app must never assume anything about a possible existing child app. The -documents app and the Document model are the basic entities; they must never -import anything else. The common and main apps are the base apps. - - -Variables ---------- - -Naming of variables should follow a Major to Minor convention, usually -including the purpose of the variable as the first piece of the name, using -underscores as spaces. camelCase is not used in Mayan EDMS. - -Examples: - -Links: - -.. code-block:: bash - - link_document_page_transformation_list = ... - link_document_page_transformation_create = ... - link_document_page_transformation_edit = ... - link_document_page_transformation_delete = ... - -Constants: - -.. code-block:: bash - - PERMISSION_SMART_LINK_VIEW = ... - PERMISSION_SMART_LINK_CREATE = ... - PERMISSION_SMART_LINK_DELETE = ... - PERMISSION_SMART_LINK_EDIT = ... - -Classes: - -.. code-block:: bash - - class Document(models.Model): - class DocumentPage(models.Model): - class DocumentPageTransformation(models.Model): - class DocumentType(models.Model): - class DocumentTypeFilename(models.Model): - - -Strings -------- - -Quotation character used in Mayan EDMS for strings is the single quote. -Double quote is used for multiple line comments or HTML markup. - - -Migrations ----------- - -Migrations should do only one thing (example: either create a table, move data -to a new table or remove an old table) to aid retrying on failure. - - -General -------- - -Code should appear in their modules in alphabetic order or in their order of -importance if it makes more sense for the specific application. This makes -visual scanning easier on modules with a large number of imports, views or -classes. Class methods that return a value should be pretended with a -``get_`` to differentiate from an object’s properties. When a variable refers -to a file it should be named as follows: - -- filename: The file’s name and extension only. -- filepath: The entire path to the file including the filename. -- path: A path to a directory. - -Flash messages should end with a period as applicable for the language. -Only exception is when the tail of the message contains an exceptions message -as passed directly from the exception object. - -Source Control -============== - -Mayan EDMS source is controlled with Git_. - -The project is publicly accessible, hosted and can be cloned from **GitLab** using:: - - $ git clone https://gitlab.com/mayan-edms/mayan-edms.git - - -Git branch structure --------------------- - -Mayan EDMS follows a simplified model layout based on Vincent Driessen's -`Successful Git Branching Model`_ blog post. - -``/versions/micro`` - Working branch for the next bugfix release. Micro increment (third digit). - Only bug fixes, minor features, back-ported urgent features. This - branch is stable and safe for production. -``/versions/minor`` - Working branch for the next minor release (second digit). New features, - occasional breakage. Not for production but should run in test - environment most of the time. This is the branch you will want to - try out if you want to check out new features. -``/versions/major`` - Working branch for the next major release (first digit). New features, - incompatible changes to the user facing interfaces. Broken most of the - time, not for production and should only be cloned by developers - with experience with Mayan's development. -``master`` - Current production release (|version|). Points to the latest version of - the latest series. Production quality code. -``features/`` - Working branches for unfinished and unmerged feature. Likely unstable, - don't use in production. Once the feature is complete, it is merged - into one of the versions branches and deleted. - -Special branches: - -``releases/all`` - Pushing code to this branch will trigger the build and release - a new Docker image, Documentation and Python package. -``releases/docker`` - Pushing code to this branch will trigger the build and release - of a new Docker image to Docker Hub. -``releases/documentation`` - Pushing code to this branch will trigger the build and release - of new documentation. -``releases/python`` - Pushing code to this branch will trigger the build and release - of a new Python package to PyPI. -``nightly`` - Pushing code to this branch will trigger the build and release - of a new Docker image based on development code to the GitLab image - repository only. The image will not be published to Docker Hub. - -Each release is tagged separately using annotated Git tags. - -When submitting patches, please place your code in its own ``feature/`` branch -prior to opening a Merge Request on GitLab_. - -.. _Git: http://git-scm.org -.. _`Successful Git Branching Model`: http://nvie.com/posts/a-successful-git-branching-model/ - - -Commit messages ---------------- - -#. Use English as the language for the commit messages. -#. Provide a subject line composed of a tag and a short explanation:: - - Indexing: Add document base property reindex - -#. Keep the subject line to 50 or less characters. -#. Capitalize the subject line. -#. Don't end the subject line with a period, leave like a phrase in English. -#. Use active voice in the. Say what the commit will do when applied not what - you did:: - - Add new properties to the model. - - Vs. - :: - - Added new properties to the model. - -#. Limit the body of the commit to 72 characters. -#. When a commit fixes or improves an issue add the issue number in the commit - message. Either in the subject or in the body. -#. Sign commit messages. -#. Use explicit language even for minor commits. Don't do:: - - Fix typo - - Use:: - - Document: Fix typo in label description - - -Steps to deploy a development version -===================================== - -.. code-block:: bash - - $ git clone https://gitlab.com/mayan-edms/mayan-edms.git - $ cd mayan-edms - $ git checkout - $ virtualenv venv - $ source venv/bin/activate - $ pip install -r requirements.txt - $ ./manage.py initialsetup - $ ./manage.py runserver - - -Contributing changes -==================== -Follow the latest contributing guidelines outlined here: https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md - - -Debugging -========= - -Mayan EDMS makes extensive use of Django's new -:django-docs:`logging capabilities `. - -By default debug logging for all apps is turned on. If you wish to customize -how logging is managed turn off automatic logging by setting -`COMMON_AUTO_LOGGING` to ``False`` and add the following lines to your -``settings/local.py`` file:: - - LOGGING = { - 'version': 1, - 'disable_existing_loggers': True, - 'formatters': { - 'verbose': { - 'format': '%(levelname)s %(asctime)s %(name)s %(process)d %(thread)d %(message)s' - }, - 'intermediate': { - 'format': '%(name)s <%(process)d> [%(levelname)s] "%(funcName)s() %(message)s"' - }, - 'simple': { - 'format': '%(levelname)s %(message)s' - }, - }, - 'handlers': { - 'console':{ - 'level':'DEBUG', - 'class':'logging.StreamHandler', - 'formatter': 'intermediate' - } - }, - 'loggers': { - 'documents': { - 'handlers':['console'], - 'propagate': True, - 'level':'DEBUG', - }, - 'common': { - 'handlers':['console'], - 'propagate': True, - 'level':'DEBUG', - }, - } - } - - -Likewise, to see the debug output of the ``tags`` app, just add the following inside the ``loggers`` block:: - - - 'tags': { - 'handlers':['console'], - 'propagate': True, - 'level':'DEBUG', - }, - - -Documentation -============= - -The documentation is written in `reStructured Text`_ format, processed with -Sphinx_, and resides in the ``docs`` directory. In order to build it, you will -first need to install the documentation editing dependencies with:: - - $ pip install -r requirements/documentation.txt - -Then, to build an HTML version of the documentation, run the following command -from the **docs** directory:: - - $ make docs-serve - -The generated documentation can be viewed by browsing to http://127.0.0.1:8000 -or by browsing to the ``docs/_build/html`` directory. - -You can also generate the documentation in formats other than HTML. Consult the -Sphinx_ documentation for more details. - -.. _`reStructured Text`: http://docutils.sourceforge.net/rst.html -.. _Sphinx: http://sphinx.pocoo.org - - -Installable package -=================== - -Source file package -------------------- - -This is the sequence of step used to produce an installable package: - -1. Generate the packaged version (will produce dist/mayan-edms-x.y.z.tar.gz):: - - $ make sdist - -2. Do a test install:: - - $ cd /tmp - $ virtualenv venv - $ source venv/bin/activate - $ pip install /dist/mayan-edms-x.y.z.tar.gz - $ mayan-edms.py initialsetup - $ mayan-edms.py runserver - - -Wheel package -------------- - -1. Install the development requirements:: - - $ pip install -r requirements/development.txt - -2. Create wheel package using the makefile:: - - $ make wheel - -3. Do a test install:: - - $ cd /tmp - $ virtualenv venv - $ source venv/bin/activate - $ pip install /dist/mayan_edms-x.y.z-py2-none-any.whl - $ mayan-edms.py initialsetup - $ mayan-edms.py runserver - - -Version numbering -================= - -Mayan EDMS uses the Semantic Versioning (http://semver.org/) method to choose -version numbers along with Python's PEP-0440 (https://www.python.org/dev/peps/pep-0440/) -to format them. - -X.YaN # Alpha release -X.YbN # Beta release -X.YrcN # Release Candidate -X.Y # Final release - - -Release checklist -================= - -#. Check for missing migrations:: - - make check-missing-migrations - -#. Synchronize translations:: - - make translations-pull - -#. Compile translations:: - - make translations-compile - -#. Update changelog. -#. Write release notes. -#. Scan the code with flake8 for simple style warnings. -#. Check README.rst format with:: - - python setup.py check -r -s - - or with:: - - make check-readme - -#. Bump version in ``mayan/__init__.py`` and ``docker/rootfs/version``:: - - make increase-version PART= - -#. Update requirements version in ``setup.py`` using: - :: - - make generate-setup - -#. Commit as version bump. -#. Build source package and test: - :: - - make test-sdist-via-docker-ubuntu - -#. Build wheel package and test: - :: - - make test-wheel-via-docker-ubuntu - -#. Tag version: - :: - - git tag -a vX.Y.Z -m "Version X.Y.Z" - -#. Generate set ``setup.py`` again to update the build number:: - - make generate-setup - -#. Commit the new ``setup.py`` file. - -#. Release the version using one of the two following methods: GitLab CI or - manual - -Release using GitLab CI ------------------------ - -#. Push the current brach: - :: - - git push - -#. Push the new tags: - :: - - git push --tags - - -#. Delete the corresponding ``releases/`` branch: - :: - - git push origin :releases/ - -#. Push the current branch to the corresponding origin ``releases/`` branch: - :: - - git push origin :releases/ - - -Manual release --------------- - -#. Build and upload a test release: - :: - - make release-test-via-docker-ubuntu - -#. Build and upload a final release: - :: - - make release-via-docker-ubuntu - -Other steps ------------ - -#. Update the contrib/scripts/install/docker.sh values - -#. Upload contrib/scripts/install/docker.sh to https://get.mayan-edms.com diff --git a/docs/chapters/caa_entity.rst b/docs/chapters/development/caa_entity.txt similarity index 98% rename from docs/chapters/caa_entity.rst rename to docs/chapters/development/caa_entity.txt index e9762f1009..53a8937931 100644 --- a/docs/chapters/caa_entity.rst +++ b/docs/chapters/development/caa_entity.txt @@ -1,6 +1,6 @@ -************************************************** +================================================== Mayan EDMS Entity Contributor Assignment Agreement -************************************************** +================================================== Thank you for your interest in contributing to Mayan EDMS ("We" or "Us"). @@ -14,6 +14,7 @@ software project managed by Us. 1. Definitions ============== + "You" means any Legal Entity on behalf of whom a Contribution has been received by Us. "Legal Entity" means an entity which is not a natural person. "Affiliates" means other Legal Entities that control, are controlled by, or @@ -55,6 +56,7 @@ first Submit a Contribution to Us, whichever is earlier. 2. Grant of Rights ================== + 2.1 Copyright Assignment ------------------------ @@ -101,6 +103,7 @@ license the Contribution only under the terms of the license or licenses which We are using on the Submission Date for the Material (including any rights to adopt any future version of a license if permitted). + 2.4 Moral Rights ---------------- @@ -108,12 +111,14 @@ If moral rights apply to the Contribution, to the maximum extent permitted by law, You waive and agree not to assert such moral rights against Us or our successors in interest, or any of our licensees, either direct or indirect. + 2.5 Our Rights -------------- You acknowledge that We are not obligated to use Your Contribution as part of the Material and may decide to include any Contribution We consider appropriate. + 2.6 Reservation of Rights ------------------------- @@ -159,6 +164,7 @@ OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. 6. Miscellaneous ================ + 6.1 Jurisdiction ---------------- @@ -170,19 +176,25 @@ and the parties intend to avoid the application of the UN Convention to this Agreement and, thus, exclude the application of the UN Convention in its entirety to this Agreement. + 6.2 Acceptance -------------- + This Agreement sets out the entire agreement between You and Us for Your Contributions to Us and overrides all other agreements or understandings. + 6.3 Third parties ----------------- + If You or We assign the rights or obligations received through this Agreement to a third party, as a condition of the assignment, that third party must agree in writing to abide by all the rights and obligations in the Agreement. + 6.4 Unmet responsibilities -------------------------- + The failure of either party to require performance by the other party of any provision of this Agreement in one situation shall not affect the right of a party to require such performance at any time in the future. A waiver of @@ -190,8 +202,10 @@ performance under a provision in one situation shall not be considered a waiver of the performance of the provision in the future or a waiver of the provision in its entirety. + 6.5 Continuation ---------------- + If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible with a provision that comes closest to the meaning of the original provision and which is enforceable. diff --git a/docs/chapters/caa_individual.rst b/docs/chapters/development/caa_individual.txt similarity index 98% rename from docs/chapters/caa_individual.rst rename to docs/chapters/development/caa_individual.txt index f47ed4fd2d..55a0d6bdd1 100644 --- a/docs/chapters/caa_individual.rst +++ b/docs/chapters/development/caa_individual.txt @@ -1,6 +1,6 @@ -****************************************************** +====================================================== Mayan EDMS Individual Contributor Assignment Agreement -****************************************************** +====================================================== Thank you for your interest in contributing to Mayan EDMS ("We" or "Us"). @@ -11,6 +11,7 @@ caa@mayan-edms.com. This is a legally binding document, so please read it carefully before agreeing to it. The Agreement may cover more than one software project managed by Us. + 1. Definitions ============== @@ -43,9 +44,11 @@ or otherwise designated in writing by You as "Not a Contribution." "Effective Date" means the date You execute this Agreement or the date You first Submit a Contribution to Us, whichever is earlier. + 2. Grant of Rights ================== + 2.1 Copyright Assignment ------------------------ @@ -87,6 +90,7 @@ and provided that this license is conditioned upon compliance with Section 2.3. 2.3 Outbound License -------------------- + As a condition on the grant of rights in Sections 2.1 and 2.2, We agree to license the Contribution only under the terms of the license or licenses which We are using on the Submission Date for the Material (including any rights to @@ -156,6 +160,7 @@ OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. 6. Miscellaneous ================ + 6.1 Jurisdiction ---------------- @@ -167,12 +172,14 @@ and the parties intend to avoid the application of the UN Convention to this Agreement and, thus, exclude the application of the UN Convention in its entirety to this Agreement. + 6.2 Acceptance -------------- This Agreement sets out the entire agreement between You and Us for Your Contributions to Us and overrides all other agreements or understandings. + 6.3 Third parties ----------------- @@ -180,6 +187,7 @@ If You or We assign the rights or obligations received through this Agreement to a third party, as a condition of the assignment, that third party must agree in writing to abide by all the rights and obligations in the Agreement. + 6.4 Unmet responsibilities -------------------------- @@ -190,6 +198,7 @@ performance under a provision in one situation shall not be considered a waiver of the performance of the provision in the future or a waiver of the provision in its entirety. + 6.5 Continuation ---------------- diff --git a/docs/chapters/development/code_structure.txt b/docs/chapters/development/code_structure.txt new file mode 100644 index 0000000000..602c0a5be9 --- /dev/null +++ b/docs/chapters/development/code_structure.txt @@ -0,0 +1,243 @@ +============== +Code structure +============== + + +Follow PEP8 +----------- + +Whenever possible, but don't obsess over things like line length: + +.. code-block:: bash + + $ flake8 --ignore=E501,E128,E122 |less + +To perform automatic PEP8 checks, install flake8's git hook using: + +.. code-block:: bash + + $ flake8 --install-hook git + + +Imports +------- + +Import order should be: + +- Standard Python modules +- Installed Python modules +- Core Django modules +- Installed Django modules +- Mayan EDMS modules +- Local imports + +Example: + +.. code-block:: bash + + from __future__ import absolute_import + + # Standard Python library + import base64 + + # 3rd party installed Python libraries + import requests + + # Django core modules + from django.db.models import Q + from django.template.defaultfilters import slugify + from django.utils.translation import ugettext + from django.utils.translation import ugettext_lazy as _ + + # 3rd party installed Django libraries + from rest_framework import APIView + + # Mayan apps + from metadata.classes import MetadataClass + + # Local app imports (relative) + from .conf.settings import ( + AVAILABLE_INDEXING_FUNCTIONS, + MAX_SUFFIX_COUNT, SLUGIFY_PATHS + ) + from .exceptions import MaxSuffixCountReached + from .filesystem import ( + fs_create_index_directory, fs_create_document_link, + fs_delete_document_link, fs_delete_index_directory, + assemble_suffixed_filename + ) + from .models import Index, IndexInstanceNode, DocumentRenameCount + +All local app module imports are in relative form. Local app module name is to +be referenced as little as possible, unless required by a specific feature, +trick, restriction (e.g., Runtime modification of the module's attributes). + +Incorrect: + +.. code-block:: bash + + + # documents app views.py model + from documents.models import Document + +Correct: + +.. code-block:: bash + + # documents app views.py model + from .models import Document + + +Dependencies +------------ + +Mayan EDMS apps follow a hierarchical model of dependency. Apps import from +their parents or siblings, never from their children. Think plugins. A parent +app must never assume anything about a possible existing child app. The +documents app and the Document model are the basic entities; they must never +import anything else. The common and main apps are the base apps. + + +Variables +--------- + +Naming of variables should follow a Major to Minor convention, usually +including the purpose of the variable as the first piece of the name, using +underscores as spaces. camelCase is not used in Mayan EDMS. + +Examples: + +Links: + +.. code-block:: bash + + link_document_page_transformation_list = ... + link_document_page_transformation_create = ... + link_document_page_transformation_edit = ... + link_document_page_transformation_delete = ... + +Constants: + +.. code-block:: bash + + PERMISSION_SMART_LINK_VIEW = ... + PERMISSION_SMART_LINK_CREATE = ... + PERMISSION_SMART_LINK_DELETE = ... + PERMISSION_SMART_LINK_EDIT = ... + +Classes: + +.. code-block:: bash + + class Document(models.Model): + class DocumentPage(models.Model): + class DocumentPageTransformation(models.Model): + class DocumentType(models.Model): + class DocumentTypeFilename(models.Model): + + +Strings +------- + +Quotation character used in Mayan EDMS for strings is the single quote. +Double quote is used for multiple line comments or HTML markup. + + +Migrations +---------- + +Migrations should do only one thing (example: either create a table, move data +to a new table or remove an old table) to aid retrying on failure. + + +General +------- + +Code should appear in their modules in alphabetic order or in their order of +importance if it makes more sense for the specific application. This makes +visual scanning easier on modules with a large number of imports, views or +classes. Class methods that return a value should be pretended with a +``get_`` to differentiate from an object’s properties. When a variable refers +to a file it should be named as follows: + +- filename: The file’s name and extension only. +- filepath: The entire path to the file including the filename. +- path: A path to a directory. + +Flash messages should end with a period as applicable for the language. +Only exception is when the tail of the message contains an exceptions message +as passed directly from the exception object. + + +Steps to deploy a development version +===================================== + +.. code-block:: bash + + $ git clone |SOURCE_CODE_GIT| + $ cd mayan-edms + $ git checkout + $ virtualenv venv + $ source venv/bin/activate + $ pip install -r requirements.txt + $ ./manage.py initialsetup + $ ./manage.py preparestatic + $ ./manage.py runserver + + + +Debugging +========= + +Mayan EDMS makes extensive use of Django's new +:django-docs:`logging capabilities `. + +By default debug logging for all apps is turned on. If you wish to customize +how logging is managed turn off automatic logging by setting +`COMMON_AUTO_LOGGING` to ``False`` and add the following lines to your +``settings/local.py`` file:: + + LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'formatters': { + 'verbose': { + 'format': '%(levelname)s %(asctime)s %(name)s %(process)d %(thread)d %(message)s' + }, + 'intermediate': { + 'format': '%(name)s <%(process)d> [%(levelname)s] "%(funcName)s() %(message)s"' + }, + 'simple': { + 'format': '%(levelname)s %(message)s' + }, + }, + 'handlers': { + 'console':{ + 'level':'DEBUG', + 'class':'logging.StreamHandler', + 'formatter': 'intermediate' + } + }, + 'loggers': { + 'documents': { + 'handlers':['console'], + 'propagate': True, + 'level':'DEBUG', + }, + 'common': { + 'handlers':['console'], + 'propagate': True, + 'level':'DEBUG', + }, + } + } + + +Likewise, to see the debug output of the ``tags`` app, just add the following inside the ``loggers`` block:: + + + 'tags': { + 'handlers':['console'], + 'propagate': True, + 'level':'DEBUG', + }, diff --git a/docs/chapters/development/contributing.txt b/docs/chapters/development/contributing.txt new file mode 100644 index 0000000000..cf886e5b7d --- /dev/null +++ b/docs/chapters/development/contributing.txt @@ -0,0 +1,18 @@ +============ +Contributing +============ + +Mayan EDMS is under active development, and contributions are welcome. + +If you have a feature request, suggestion or bug report, please open a new +issue on the `GitLab issue tracker`_. To submit patches, please send a merge +request on GitLab_. + +.. _GitLab: |SOURCE_CODE_REPOSITORY| +.. _`GitLab issue tracker`: |SOURCE_CODE_ISSUES| + + +Contributing changes +==================== +Follow the latest contributing guidelines outlined here: +|SOURCE_CODE_REPOSITORY|blob/master/CONTRIBUTING.md diff --git a/docs/chapters/development/documentation.txt b/docs/chapters/development/documentation.txt new file mode 100644 index 0000000000..85b7692a1f --- /dev/null +++ b/docs/chapters/development/documentation.txt @@ -0,0 +1,24 @@ +============= +Documentation +============= + +The documentation is written in `reStructured Text`_ format, processed with +Sphinx_, and resides in the ``docs`` directory. In order to build it, you will +first need to install the documentation editing dependencies with:: + + $ pip install -r requirements/documentation.txt + +Then, to build an HTML version of the documentation, run the following command +from the **docs** directory:: + + $ make docs-serve + +The generated documentation can be viewed by browsing to http://127.0.0.1:8000 +or by browsing to the ``docs/_build/html`` directory. + +You can also generate the documentation in formats other than HTML. Consult the +Sphinx_ documentation for more details. + +.. _`reStructured Text`: http://docutils.sourceforge.net/rst.html +.. _Sphinx: http://sphinx.pocoo.org + diff --git a/docs/chapters/development/index.txt b/docs/chapters/development/index.txt new file mode 100644 index 0000000000..0f0dabe301 --- /dev/null +++ b/docs/chapters/development/index.txt @@ -0,0 +1,29 @@ +============== +For developers +============== + +- :doc:`philosophies` +- :doc:`code_structure` +- :doc:`documentation` +- :doc:`source_control` +- :doc:`contributing` +- :doc:`releases` +- :doc:`translations` +- :doc:`../../mercs/index` +- :doc:`caa_entity` +- :doc:`caa_individual` + + +.. toctree:: + :hidden: + + philosophies + code_structure + documentation + source_control + contributing + releases + translations + ../../mercs/index + caa_entity + caa_individual diff --git a/docs/chapters/development/philosophies.txt b/docs/chapters/development/philosophies.txt new file mode 100644 index 0000000000..a42eefb5fe --- /dev/null +++ b/docs/chapters/development/philosophies.txt @@ -0,0 +1,29 @@ +==================== +Project philosophies +==================== + +How to think about Mayan EDMS when doing changes or adding new features; +why things are the way they are in Mayan EDMS: + +- Functionality must be as market/sector independent as possible, code for the + 95% of use cases. +- Each user must be able to configure and customize it to their needs after + install. +- Abstract as much as possible, each app must be an expert in just one thing, + for other things they should use the API/classes/functions of other apps. +- Assume as little as possible about anything outside the project + (hardware, OS, storage). +- Provide Python based abstraction so that a default install runs with a single + step. +- No hard dependencies on binaries unless there is no other choice. +- Provide “drivers” or switchable backends to allow users to fine tune the + installation. +- Call to binaries only when there is no other choice or the Python choices are + not viable/mature/efficient. +- Each app is as independent and self contained as possible. Exceptions, the + basic requirements: navigation, permissions, common, main. +- If an app is meant to be used by more than one other app, it should be as + generic as possible in regard to the project and another app will bridge the functionality. + + - Example: since indexing (document_indexing) only applies to documents, the + app is specialized and depends on the documents app. diff --git a/docs/chapters/development/releases.txt b/docs/chapters/development/releases.txt new file mode 100644 index 0000000000..04b17635b5 --- /dev/null +++ b/docs/chapters/development/releases.txt @@ -0,0 +1,173 @@ +=================== +Installable package +=================== + +Source file package +------------------- + +This is the sequence of step used to produce an installable package: + +1. Generate the packaged version (will produce dist/mayan-edms-x.y.z.tar.gz):: + + $ make sdist + +2. Do a test install:: + + $ cd /tmp + $ virtualenv venv + $ source venv/bin/activate + $ pip install /dist/mayan-edms-x.y.z.tar.gz + $ mayan-edms.py initialsetup + $ mayan-edms.py preparestatic + $ mayan-edms.py runserver + + +Wheel package +------------- + +1. Install the development requirements:: + + $ pip install -r requirements/development.txt + +2. Create wheel package using the makefile:: + + $ make wheel + +3. Do a test install:: + + $ cd /tmp + $ virtualenv venv + $ source venv/bin/activate + $ pip install /dist/mayan_edms-x.y.z-py2-none-any.whl + $ mayan-edms.py initialsetup + $ mayan-edms.py preparestatic + $ mayan-edms.py runserver + + +Version numbering +================= + +Mayan EDMS uses the Semantic Versioning (http://semver.org/) method to choose +version numbers along with Python's PEP-0440 (https://www.python.org/dev/peps/pep-0440/) +to format them. + +X.YaN # Alpha release +X.YbN # Beta release +X.YrcN # Release Candidate +X.Y # Final release + + +Release checklist +================= + +#. Check for missing migrations:: + + make check-missing-migrations + +#. Synchronize translations:: + + make translations-pull + +#. Compile translations:: + + make translations-compile + +#. Update changelog. +#. Write release notes. +#. Scan the code with flake8 for simple style warnings. +#. Check README.rst format with:: + + python setup.py check -r -s + + or with:: + + make check-readme + +#. Bump version in ``mayan/__init__.py`` and ``docker/rootfs/version``:: + + make increase-version PART= + +#. Update requirements version in ``setup.py`` using: + :: + + make generate-setup + +#. Commit as version bump. +#. Build source package and test: + :: + + make test-sdist-via-docker-ubuntu + +#. Build wheel package and test: + :: + + make test-wheel-via-docker-ubuntu + +#. Tag version: + :: + + git tag -a vX.Y.Z -m "Version X.Y.Z" + +#. Generate set ``setup.py`` again to update the build number:: + + make generate-setup + +#. Commit the new ``setup.py`` file. + +#. Release the version using one of the two following methods: GitLab CI or + manual + + +Release using GitLab CI using the makefile +------------------------------------------ + +#. Use of the GitLab makefile targets: ``gitlab-release-all``, + ``gitlab-release-docker``, ``gitlab-release-documentation``, + ``gitlab-release-python``. + + +Release using GitLab CI manually +-------------------------------- + +#. Push the current brach: + :: + + git push + + +#. Push the new tags: + :: + + git push --tags + + +#. Delete the corresponding ``releases/`` branch: + :: + + git push origin :releases/ + +#. Push the current branch to the corresponding origin ``releases/`` branch: + :: + + git push origin :releases/ + + +Manual release +-------------- + +#. Build and upload a test release: + :: + + make release-test-via-docker-ubuntu + +#. Build and upload a final release: + :: + + make release-via-docker-ubuntu + +Other steps +----------- + +#. Update the contrib/scripts/install/docker.sh values + +#. Upload contrib/scripts/install/docker.sh to https://get.mayan-edms.com diff --git a/docs/chapters/development/source_control.txt b/docs/chapters/development/source_control.txt new file mode 100644 index 0000000000..8c7c754a1d --- /dev/null +++ b/docs/chapters/development/source_control.txt @@ -0,0 +1,99 @@ +============== +Source Control +============== + +Mayan EDMS source is controlled with Git_. + +The project is publicly accessible, hosted and can be cloned from **GitLab** using:: + + $ git clone |SOURCE_CODE_GIT| + + +Git branch structure +-------------------- + +Mayan EDMS follows a simplified model layout based on Vincent Driessen's +`Successful Git Branching Model`_ blog post. + +``/versions/micro`` + Working branch for the next bugfix release. Micro increment (third digit). + Only bug fixes, minor features, back-ported urgent features. This + branch is stable and safe for production. +``/versions/minor`` + Working branch for the next minor release (second digit). New features, + occasional breakage. Not for production but should run in test + environment most of the time. This is the branch you will want to + try out if you want to check out new features. +``/versions/major`` + Working branch for the next major release (first digit). New features, + incompatible changes to the user facing interfaces. Broken most of the + time, not for production and should only be cloned by developers + with experience with Mayan's development. +``master`` + Current production release (|version|). Points to the latest version of + the latest series. Production quality code. +``features/`` + Working branches for unfinished and unmerged feature. Likely unstable, + don't use in production. Once the feature is complete, it is merged + into one of the versions branches and deleted. + +Special branches: + +``releases/all`` + Pushing code to this branch will trigger the build and release + a new Docker image, Documentation and Python package. +``releases/docker`` + Pushing code to this branch will trigger the build and release + of a new Docker image to Docker Hub. +``releases/documentation`` + Pushing code to this branch will trigger the build and release + of new documentation. +``releases/python`` + Pushing code to this branch will trigger the build and release + of a new Python package to PyPI. +``nightly`` + Pushing code to this branch will trigger the build and release + of a new Docker image based on development code to the GitLab image + repository only. The image will not be published to Docker Hub. + +Each release is tagged separately using annotated Git tags. + +When submitting patches, please place your code in its own ``feature/`` branch +prior to opening a Merge Request on |SOURCE_CODE_ISSUES|. + +.. _Git: http://git-scm.org +.. _`Successful Git Branching Model`: http://nvie.com/posts/a-successful-git-branching-model/ + + +Commit messages +--------------- + +#. Use English as the language for the commit messages. +#. Provide a subject line composed of a tag and a short explanation:: + + Indexing: Add document base property reindex + +#. Keep the subject line to 50 or less characters. +#. Capitalize the subject line. +#. Don't end the subject line with a period, leave like a phrase in English. +#. Use active voice in the. Say what the commit will do when applied not what + you did:: + + Add new properties to the model. + + Vs. + :: + + Added new properties to the model. + +#. Limit the body of the commit to 72 characters. +#. When a commit fixes or improves an issue add the issue number in the commit + message. Either in the subject or in the body. +#. Sign commit messages. +#. Use explicit language even for minor commits. Don't do:: + + Fix typo + + Use:: + + Document: Fix typo in label description diff --git a/docs/chapters/translations.rst b/docs/chapters/development/translations.txt similarity index 97% rename from docs/chapters/translations.rst rename to docs/chapters/development/translations.txt index 24ff6bb84d..b9f20d3dde 100644 --- a/docs/chapters/translations.rst +++ b/docs/chapters/development/translations.txt @@ -1,6 +1,6 @@ -************ +============ Translations -************ +============ Translations are handled online via the **Transifex** website: https://www.transifex.com/projects/p/mayan-edms/. To create a translation team diff --git a/docs/chapters/docker.rst b/docs/chapters/docker.rst deleted file mode 100644 index 6683b0b4c1..0000000000 --- a/docs/chapters/docker.rst +++ /dev/null @@ -1,456 +0,0 @@ -============ -Docker image -============ - -How to use this image -===================== - -.. _docker_install: - -Start a Mayan EDMS Docker image -------------------------------- - -With Docker properly installed, proceed to download the Mayan EDMS Docker -image using the command:: - - docker pull mayanedms/mayanedms: - -Instead of a specific version tag you may use then generic ``:latest`` tag -to the get latest version available automatically. If you use the ``:latest`` -tag here, remember to do so in the next steps also.:: - - docker pull mayanedms/mayanedms:latest - -Then download the PostgreSQL Docker image:: - - docker pull |DOCKER_POSTGRES_IMAGE_VERSION| - -Create and run a PostgreSQL container:: - - docker run -d \ - --name mayan-edms-postgres \ - --restart=always \ - -p 5432:5432 \ - -e POSTGRES_USER=mayan \ - -e POSTGRES_DB=mayan \ - -e POSTGRES_PASSWORD=mayanuserpass \ - -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \ - |DOCKER_POSTGRES_IMAGE_VERSION| - -The PostgreSQL container will have one database named ``mayan``, with an user -named ``mayan`` too, with a password of ``mayanuserpass``. The container will -expose its internal 5432 port (PostgreSQL's default port) via the host's -5432 port. The data of this container will reside on the host's -``/docker-volumes/mayan-edms/postgres`` folder. - -Finally create and run a Mayan EDMS container:: - - docker run -d \ - --name mayan-edms \ - --restart=always \ - -p 80:8000 \ - -e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ - -e MAYAN_DATABASE_HOST=172.17.0.1 \ - -e MAYAN_DATABASE_NAME=mayan \ - -e MAYAN_DATABASE_PASSWORD=mayanuserpass \ - -e MAYAN_DATABASE_USER=mayan \ - -e MAYAN_DATABASE_CONN_MAX_AGE=0 \ - -v /docker-volumes/mayan-edms/media:/var/lib/mayan \ - mayanedms/mayanedms: - -The Mayan EDMS container will connect to the PostgreSQL container via the -``172.17.0.1`` IP address (the Docker host's default IP address). It will -connect using the ``django.db.backends.postgresql`` database driver and -connect to the ``mayan`` database using the ``mayan`` user with the password -``mayanuserpass``. The container will keep connections to the database -for up to 60 seconds in an attempt to reuse them increasing response time -and reducing memory usage. The files of the container will be store in the -host's ``/docker-volumes/mayan-edms/media`` folder. The container will -expose its web service running on port 8000 on the host's port 80. - -The container will be available by browsing to ``http://localhost`` or to -the IP address of the computer running the container. - -If another web server is running on port 80 use a different port in the -``-p`` option. For example: ``-p 81:8000``. - - -Using a dedicated Docker network --------------------------------- - -Use this method to avoid having to expose PostreSQL port to the host's network -or if you have other PostgreSQL instances but still want to use the default -port of 5432 for this installation. - -Create the network:: - - docker network create mayan - -Launch the PostgreSQL container with the network option and remove the port -binding (``-p 5432:5432``):: - - docker run -d \ - --name mayan-edms-postgres \ - --network=mayan \ - --restart=always \ - -e POSTGRES_USER=mayan \ - -e POSTGRES_DB=mayan \ - -e POSTGRES_PASSWORD=mayanuserpass \ - -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \ - |DOCKER_POSTGRES_IMAGE_VERSION| - -Launch the Mayan EDMS container with the network option and change the -database hostname to the PostgreSQL container name (``mayan-edms-postgres``) -instead of the IP address of the Docker host (``172.17.0.1``):: - - docker run -d \ - --name mayan-edms \ - --network=mayan \ - --restart=always \ - -p 80:8000 \ - -e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ - -e MAYAN_DATABASE_HOST=mayan-edms-postgres \ - -e MAYAN_DATABASE_NAME=mayan \ - -e MAYAN_DATABASE_PASSWORD=mayanuserpass \ - -e MAYAN_DATABASE_USER=mayan \ - -e MAYAN_DATABASE_CONN_MAX_AGE=0 \ - -v /docker-volumes/mayan-edms/media:/var/lib/mayan \ - mayanedms/mayanedms: - - -Stopping and starting the container ------------------------------------ - -To stop the container use:: - - docker stop mayan-edms - - -To start the container again:: - - docker start mayan-edms - - -.. _docker_environment_variables: - - -Environment Variables ---------------------- - -The Mayan EDMS image can be configure via environment variables. - -``MAYAN_DATABASE_ENGINE`` - -Defaults to ``None``. This environment variable configures the database -backend to use. If left unset, SQLite will be used. The database backends -supported by this Docker image are: - -- ``'django.db.backends.postgresql'`` -- ``'django.db.backends.mysql'`` -- ``'django.db.backends.sqlite3'`` - -When using the SQLite backend, the database file will be saved in the Docker -volume. The SQLite database as used by Mayan EDMS is meant only for development -or testing, never use it in production. - -``MAYAN_DATABASE_NAME`` - -Defaults to 'mayan'. This optional environment variable can be used to define -the database name that Mayan EDMS will connect to. For more information read -the pertinent Django documentation page: -:django-docs:`Connecting to the database ` - -``MAYAN_DATABASE_USER`` - -Defaults to 'mayan'. This optional environment variable is used to set the -username that will be used to connect to the database. For more information -read the pertinent Django documentation page: -:django-docs:`Settings, USER ` - -``MAYAN_DATABASE_PASSWORD`` - -Defaults to ''. This optional environment variable is used to set the -password that will be used to connect to the database. For more information -read the pertinent Django documentation page: -:django-docs:`Settings, PASSWORD ` - -``MAYAN_DATABASE_HOST`` - -Defaults to `None`. This optional environment variable is used to set the -hostname that will be used to connect to the database. This can be the -hostname of another container or an IP address. For more information read -the pertinent Django documentation page: -:django-docs:`Settings, HOST ` - -``MAYAN_DATABASE_PORT`` - -Defaults to `None`. This optional environment variable is used to set the -port number to use when connecting to the database. An empty string means -the default port. Not used with SQLite. For more information read the -pertinent Django documentation page: -:django-docs:`Settings, PORT ` - -``MAYAN_BROKER_URL`` - -This optional environment variable determines the broker that Celery will use -to relay task messages between the frontend code and the background workers. -For more information read the pertinent Celery Kombu documentation page: `Broker URL`_ - -.. _Broker URL: http://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls - -This Docker image supports using Redis and RabbitMQ as brokers. - -Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment -variables are specified, the built-in Redis server inside the container will -be disabled. - -``MAYAN_CELERY_RESULT_BACKEND`` - -This optional environment variable determines the results backend that Celery -will use to relay result messages from the background workers to the frontend -code. For more information read the pertinent Celery Kombu documentation page: -`Task result backend settings`_ - -.. _Task result backend settings: http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend - -This Docker image supports using Redis and RabbitMQ as result backends. - -Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment -variables are specified, the built-in Redis server inside the container will -be disabled. - -``MAYAN_SETTINGS_MODULE`` - -Optional. Allows loading an alternate settings file. - -``MAYAN_DATABASE_CONN_MAX_AGE`` - -Amount in seconds to keep a database connection alive. Allow reuse of database -connections. For more information read the pertinent Django documentation -page: :django-docs:`Settings, CONN_MAX_AGE ` -According to new information Gunicorn's microthreads don't share connections -and will exhaust the available Postgres connections available if a number -other than 0 is used. Reference: https://serverfault.com/questions/635100/django-conn-max-age-persists-connections-but-doesnt-reuse-them-with-postgresq -and https://github.com/benoitc/gunicorn/issues/996 - -``MAYAN_GUNICORN_TIMEOUT`` - -Optional. Changes the amount of time the frontend worker will wait for a -request to finish before raising a timeout error. The default is 120 -seconds. - -``MAYAN_GUNICORN_WORKERS`` - -Optional. This environment variable controls the number of frontend workers -that will be executed. If not specified the default is 2. For heavier loads, -user a higher number. A formula recommended for this setting is the number -of CPU cores + 1. - -``MAYAN_WORKER_FAST_CONCURRENCY`` - -Optional. Changes the concurrency (number of child processes) of the Celery -worker consuming the queues in the fast (low latency, short tasks) category. -Default is 1. Use 0 to disable hardcoded concurrency and allow the Celery -worker to launch its default number of child processes (equal to the number -of CPUs detected). - -``MAYAN_WORKER_MEDIUM_CONCURRENCY`` - -Optional. Changes the concurrency (number of child processes) of the Celery -worker consuming the queues in the medium (medium latency, long running tasks) -category. Default is 1. Use 0 to disable hardcoded concurrency and allow the -Celery worker to launch its default number of child processes (equal to the -number of CPUs detected). - -``MAYAN_WORKER_SLOW_CONCURRENCY`` - -Optional. Changes the concurrency (number of child processes) of the Celery -worker consuming the queues in the slow (high latency, very long running tasks) -category. Default is 1. Use 0 to disable hardcoded concurrency and allow the -Celery worker to launch its default number of child processes (equal to the -number of CPUs detected). - -``MAYAN_USER_UID`` - -Optional. Changes the UID of the ``mayan`` user internal to the Docker -container. Defaults to 1000. - -``MAYAN_USER_GID`` - -Optional. Changes the GID of the ``mayan`` user internal to the Docker -container. Defaults to 1000. - - -.. _docker-accessing-outside-data: - -Accessing outside data -====================== - -To use Mayan EDMS's staging folders or watch folders from Docker, the data -for these source must be made accessible to the container. This is done by -mounting the folders in the host computer to folders inside the container. -This is necessary because Docker containers do not have access to host data -on purpose. For example, to make a folder in the host accessible as a watch -folder, add the following to the Docker command line when starting the -container:: - - -v /opt/scanned_files:/scanned_files - -The command line would look like this:: - - docker run ... -v /opt/scanned_files:/scanned_files mayanedms/mayanedms:latest - -Now create a watch folder in Mayan EDMS using the path ``/scanned_files`` -and the documents from the host folder ``/opt/scanned_files`` will be -automatically available. Use the same procedure to mount host folders to be -used as staging folders. In this example ``/scanned_files`` was used as the -container directory, but any path can be used as long as: - -- the path not an already existing path -- the path is not used by any other program -- the path is a single level path - - -Performing backups -================== - -To backup the existing data, stop the image and copy the content of the volume. -For the example:: - - docker run -d --name mayan-edms --restart=always -p 80:8000 \ - -v /docker-volumes/mayan:/var/lib/mayan \ - -v /opt/scanned_files:/scanned_files mayanedms/mayanedms:latest - -That would be the ``/docker-volumes/mayan folder``:: - - sudo tar -zcvf backup.tar.gz /docker-volumes/mayan - sudo chown `whoami` backup.tar.gz - -If using an external PostgreSQL or MySQL database or database containers, these -too need to be backed up using their respective procedures. A simple solution -is to copy the entire database container volume after the container has -been stopped. - - -Restoring from a backup -======================= - -Uncompress the backup archive in the original docker volume using:: - - sudo tar -xvzf backup.tar.gz -C / - - -Upgrading -========= - -Upgrading a Mayan EDMS Docker container is actually a matter of stopping and -deleting the container, downloading the most recent version of the image and -starting a container again. The container will take care of updating the -database structure to the newest version if necessary. - -**IMPORTANT!** Do not delete the volume storing the data, only the container. - -Stop the container to be upgraded:: - - docker stop mayan-edms - - -Remove the container:: - - docker rm mayan-edms - - -Pull the new image version:: - - docker pull mayanedms/mayanedms:latest - - -Start the container again with the new image version:: - - docker run -d --name mayan-edms --restart=always -p 80:8000 -v /docker-volumes/mayan:/var/lib/mayan mayanedms/mayanedms:latest - - -Building the image -================== - -Clone the repository with:: - - git clone https://gitlab.com/mayan-edms/mayan-edms.git - -Change to the directory of the cloned repository:: - - cd mayan-edms - -Execute Docker's build command using the provided makefile:: - - make docker-build - -Or using an APT cache to speed up the build:: - - make docker-build-with-proxy APT_PROXY=172.17.0.1:3142 - -Replace the IP address `172.17.0.1` with the IP address of the computer -running the APT proxy and caching service. - - -Customizing the image -===================== - -Simple method -------------- - -If you just need to add a few Ubuntu or Python packages to your installation, -you can use the following environment variables: - -``MAYAN_APT_INSTALLS`` - -Specifies a list of Ubuntu .deb packages to be installed via APT when the -container is first created. The installed packages are not lost when the image -is stopped. Example: To install the Tesseract OCR language packs for German -and Spanish add the following in your ``docker start`` command line:: - - -e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa" - -``MAYAN_PIP_INSTALLS`` - -Specifies a list of Python packages to be installed via ``pip``. Packages will -be downloaded from the Python Package Index (https://pypi.python.org) by -default. - - -Using Docker compose -==================== - -To deploy a complete production stack using the included Docker compose file -execute:: - - docker-compose -f docker-compose.yml up -d - -This Docker compose file will provision four containers: - -- Postgres as the database -- Redis as the Celery result storage -- RabbitMQ as the Celery broker -- Mayan EDMS using the above service containers - -To stop the stack use:: - - docker-compose -f docker-compose.yml stop - -The stack will also create four volumes to store the data of each container. -These are: - -- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose. -- mayan_broker - The broker volume, in this case RabbitMQ. -- mayan_db - The database volume, in this case Postgres. -- mayan_results - The celery result backend volume, in this case Redis. - - -Nightly images -============== -The continuous integration pipeline used for testing development builds also -produces a resulting Docker image. These are build automatically and their -stability is not guaranteed. They should never be used in production. -If you want to try out the Docker images the development uses or want a sneak -peek at the new features being worked on checkout the container registry at: -https://gitlab.com/mayan-edms/mayan-edms/container_registry diff --git a/docs/chapters/docker/accessing_data.txt b/docs/chapters/docker/accessing_data.txt new file mode 100644 index 0000000000..5006d4c62d --- /dev/null +++ b/docs/chapters/docker/accessing_data.txt @@ -0,0 +1,30 @@ +.. _docker-accessing-outside-data: + + +====================== +Accessing outside data +====================== + +To use Mayan EDMS's staging folders or watch folders from Docker, the data +for these source must be made accessible to the container. This is done by +mounting the folders in the host computer to folders inside the container. +This is necessary because Docker containers do not have access to host data +on purpose. For example, to make a folder in the host accessible as a watch +folder, add the following to the Docker command line when starting the +container:: + + -v /opt/scanned_files:/scanned_files + +The command line would look like this:: + + docker run ... -v /opt/scanned_files:/scanned_files mayanedms/mayanedms:latest + +Now create a watch folder in Mayan EDMS using the path ``/scanned_files`` +and the documents from the host folder ``/opt/scanned_files`` will be +automatically available. Use the same procedure to mount host folders to be +used as staging folders. In this example ``/scanned_files`` was used as the +container directory, but any path can be used as long as: + +- the path not an already existing path +- the path is not used by any other program +- the path is a single level path diff --git a/docs/chapters/docker/backups.txt b/docs/chapters/docker/backups.txt new file mode 100644 index 0000000000..99f8162104 --- /dev/null +++ b/docs/chapters/docker/backups.txt @@ -0,0 +1,47 @@ +.. _docker_backups: + +================== +Performing backups +================== + +#. Document files + + To backup the existing data, stop the image and copy the content of the volume. + For the example:: + + docker run -d --name mayan-edms --restart=always -p 80:8000 \ + -v /docker-volumes/mayan:/var/lib/mayan \ + -v /opt/scanned_files:/scanned_files mayanedms/mayanedms:|DOCKER_MAYAN_IMAGE_VERSION| + + That would be the ``/docker-volumes/mayan folder``:: + + sudo tar -zcvf backup.tar.gz /docker-volumes/mayan + sudo chown `whoami` backup.tar.gz + +#. Database + + If using an external PostgreSQL or MySQL database or database containers, these + too need to be backed up using their respective procedures. A simple solution + is to copy the entire database container volume after the container has + been stopped. + + - PostgreSQL: https://www.postgresql.org/docs/current/backup-dump.html + - MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html + + +======================= +Restoring from a backup +======================= + + +#. Document files + + Uncompress the backup archive in the original docker volume using:: + + sudo tar -xvzf backup.tar.gz -C / + + +#. Database + + - PostgreSQL: https://www.postgresql.org/docs/current/backup-dump.html + - MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html diff --git a/docs/chapters/docker/building.txt b/docs/chapters/docker/building.txt new file mode 100644 index 0000000000..cce4b9f9c0 --- /dev/null +++ b/docs/chapters/docker/building.txt @@ -0,0 +1,25 @@ +.. _docker_building: + +================== +Building the image +================== + +Clone the repository with:: + + git clone |SOURCE_CODE_GIT| + +Change to the directory of the cloned repository:: + + cd mayan-edms + +Execute Docker's build command using the provided makefile:: + + make docker-build + +Or using an APT cache to speed up the build:: + + make docker-build-with-proxy APT_PROXY=172.17.0.1:3142 + +Replace the IP address `172.17.0.1` with the IP address of the computer +running the APT proxy and caching service. + diff --git a/docs/chapters/docker/commands.txt b/docs/chapters/docker/commands.txt new file mode 100644 index 0000000000..7442e6d0b2 --- /dev/null +++ b/docs/chapters/docker/commands.txt @@ -0,0 +1,10 @@ +.. _docker_commands: + +================================= +Executing commands on a container +================================= + +To perform Mayan EDMS commands in a running container that will take all the +settings from the container, use the following command:: + + docker exec -ti /usr/local/bin/entrypoint.sh "/opt/mayan-edms/bin/mayan-edms.py " diff --git a/docs/chapters/docker/customizing.txt b/docs/chapters/docker/customizing.txt new file mode 100644 index 0000000000..8d10ae5143 --- /dev/null +++ b/docs/chapters/docker/customizing.txt @@ -0,0 +1,21 @@ +===================== +Customizing the image +===================== + +If you just need to add a few Ubuntu or Python packages to your installation, +you can use the following environment variables: + +``MAYAN_APT_INSTALLS`` + +Specifies a list of Ubuntu .deb packages to be installed via APT when the +container is first created. The installed packages are not lost when the image +is stopped. Example: To install the Tesseract OCR language packs for German +and Spanish add the following in your ``docker start`` command line:: + + -e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa" + +``MAYAN_PIP_INSTALLS`` + +Specifies a list of Python packages to be installed via ``pip``. Packages will +be downloaded from the Python Package Index (https://pypi.python.org) by +default. diff --git a/docs/chapters/docker/docker_compose.txt b/docs/chapters/docker/docker_compose.txt new file mode 100644 index 0000000000..f4d5113d95 --- /dev/null +++ b/docs/chapters/docker/docker_compose.txt @@ -0,0 +1,30 @@ +.. _docker_compose: + +==================== +Using Docker compose +==================== + +To deploy a complete production stack using the included Docker compose file +execute:: + + docker-compose -f docker-compose.yml up -d + +This Docker compose file will provision four containers: + +- Postgres as the database +- Redis as the Celery result storage +- RabbitMQ as the Celery broker +- Mayan EDMS using the above service containers + +To stop the stack use:: + + docker-compose -f docker-compose.yml stop + +The stack will also create four volumes to store the data of each container. +These are: + +- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose. +- mayan_broker - The broker volume, in this case RabbitMQ. +- mayan_db - The database volume, in this case Postgres. +- mayan_results - The celery result backend volume, in this case Redis. + diff --git a/docs/chapters/docker/drivers.txt b/docs/chapters/docker/drivers.txt new file mode 100644 index 0000000000..af869b0501 --- /dev/null +++ b/docs/chapters/docker/drivers.txt @@ -0,0 +1,12 @@ +.. _docker_image_drivers: + +================ +Included drivers +================ + +The Docker image supports using Redis and RabbitMQ as result backends. For +databases, the image includes support for PostgreSQL and MySQL/MariaDB. +Support for additional brokers or databases may be added using the +``MAYAN_APT_INSTALL`` environment variable. + + diff --git a/docs/chapters/docker/environment_variables.txt b/docs/chapters/docker/environment_variables.txt new file mode 100644 index 0000000000..872cc8b43b --- /dev/null +++ b/docs/chapters/docker/environment_variables.txt @@ -0,0 +1,63 @@ +.. index:: Docker environment variables +.. _docker_environment_variables: + + +===================== +Environment Variables +===================== + +The common set of settings can also be modified via environment variables when +using the Docker image. In addition to the common set of settings, some Docker +image specific environment variables are available. + +``MAYAN_SETTINGS_MODULE`` + +Optional. Allows loading an alternate settings file. + + +``MAYAN_GUNICORN_TIMEOUT`` + +Optional. Changes the amount of time the frontend worker will wait for a +request to finish before raising a timeout error. The default is 120 +seconds. + +``MAYAN_GUNICORN_WORKERS`` + +Optional. This environment variable controls the number of frontend workers +that will be executed. If not specified the default is 2. For heavier loads, +user a higher number. A formula recommended for this setting is the number +of CPU cores + 1. + +``MAYAN_WORKER_FAST_CONCURRENCY`` + +Optional. Changes the concurrency (number of child processes) of the Celery +worker consuming the queues in the fast (low latency, short tasks) category. +Default is 1. Use 0 to disable hardcoded concurrency and allow the Celery +worker to launch its default number of child processes (equal to the number +of CPUs detected). + +``MAYAN_WORKER_MEDIUM_CONCURRENCY`` + +Optional. Changes the concurrency (number of child processes) of the Celery +worker consuming the queues in the medium (medium latency, long running tasks) +category. Default is 1. Use 0 to disable hardcoded concurrency and allow the +Celery worker to launch its default number of child processes (equal to the +number of CPUs detected). + +``MAYAN_WORKER_SLOW_CONCURRENCY`` + +Optional. Changes the concurrency (number of child processes) of the Celery +worker consuming the queues in the slow (high latency, very long running tasks) +category. Default is 1. Use 0 to disable hardcoded concurrency and allow the +Celery worker to launch its default number of child processes (equal to the +number of CPUs detected). + +``MAYAN_USER_UID`` + +Optional. Changes the UID of the ``mayan`` user internal to the Docker +container. Defaults to 1000. + +``MAYAN_USER_GID`` + +Optional. Changes the GID of the ``mayan`` user internal to the Docker +container. Defaults to 1000. diff --git a/docs/chapters/docker/index.txt b/docs/chapters/docker/index.txt new file mode 100644 index 0000000000..d1e045521e --- /dev/null +++ b/docs/chapters/docker/index.txt @@ -0,0 +1,35 @@ +.. index:: Docker + +====== +Docker +====== + +Docker is a container technology. Containers are a standard unit of software +that packages up code and all its dependencies. + + +- Installation: :doc:`install_simple` | :doc:`install_docker_network` | :doc:`docker_compose` | :doc:`start_stop` +- Setup: :doc:`environment_variables` | :doc:`drivers` +- Integration: :doc:`accessing_data` +- Development: :doc:`building` | :doc:`customizing` | :doc:`nightly` +- Administration: :doc:`backups` | :doc:`upgrading` | :doc:`commands` + + +.. toctree:: + :hidden: + + install_simple + install_docker_network + start_stop + environment_variables + drivers + accessing_data + backups + upgrading + building + customizing + docker_compose + nightly + commands + + diff --git a/docs/chapters/docker/install_docker_network.txt b/docs/chapters/docker/install_docker_network.txt new file mode 100644 index 0000000000..bf5797b4a0 --- /dev/null +++ b/docs/chapters/docker/install_docker_network.txt @@ -0,0 +1,67 @@ +.. _docker_install_networked: + +================================ +Using a dedicated Docker network +================================ + +Use this method to avoid having to expose PostreSQL port to the host's network +or if you have other PostgreSQL instances but still want to use the default +port of 5432 for this installation. + +#. Create the network: + + .. code-block:: bash + + docker network create mayan + +#. Launch the PostgreSQL container with the network option and remove the + port binding (``-p 5432:5432``): + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms-postgres \ + --network=mayan \ + --restart=always \ + -e POSTGRES_USER=mayan \ + -e POSTGRES_DB=mayan \ + -e POSTGRES_PASSWORD=mayanuserpass \ + -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \ + |DOCKER_POSTGRES_IMAGE_VERSION| + +#. Launch the Redis container with the network option and remove the port + binding (``-p 6379:6379``): + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms-redis \ + --network=mayan \ + |DOCKER_REDIS_IMAGE_VERSION| \ + redis-server \ + --databases \ + "2" \ + --maxmemory-policy \ + allkeys-lru \ + --save \ + "" + +#. Launch the Mayan EDMS container with the network option and change the + database hostname to the PostgreSQL container name (``mayan-edms-postgres``) + instead of the IP address of the Docker host (``172.17.0.1``): + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms \ + --network=mayan \ + --restart=always \ + -p 80:8000 \ + -e MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'mayan-edms-postgres'}}" \ + -e MAYAN_CELERY_BROKER_URL="redis://mayan-edms-redis:6379/0" \ + -e MAYAN_CELERY_RESULT_BACKEND="redis://mayan-edms-redis:6379/1" \ + -v /docker-volumes/mayan-edms/media:/var/lib/mayan \ + mayanedms/mayanedms:|DOCKER_MAYAN_IMAGE_VERSION| diff --git a/docs/chapters/docker/install_simple.txt b/docs/chapters/docker/install_simple.txt new file mode 100644 index 0000000000..3b677052ef --- /dev/null +++ b/docs/chapters/docker/install_simple.txt @@ -0,0 +1,117 @@ +.. _docker_install: + + +========================== +Simple Docker installation +========================== + +#. Install Docker: + + .. code-block:: bash + + wget -qO- https://get.docker.com/ | sh + + If you don't want run an automated script, follow the instructions outlined + in their documentation: https://docs.docker.com/install/ + + Once the Docker installation is finished, proceed to the link below to install + the Docker image for Mayan EDMS. + + +#. Download the Mayan EDMS Docker image: + + With Docker properly installed, proceed to download the Mayan EDMS Docker + image using the command: + + .. code-block:: bash + + docker pull mayanedms/mayanedms:|DOCKER_MAYAN_IMAGE_VERSION| + + +#. Download the PostgreSQL Docker image: + + .. code-block:: bash + + docker pull |DOCKER_POSTGRES_IMAGE_VERSION| + + +#. Download the Redis Docker image: + + .. code-block:: bash + + docker pull |DOCKER_REDIS_IMAGE_VERSION| + + +#. Create and run a PostgreSQL container: + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms-postgres \ + --restart=always \ + -p 5432:5432 \ + -e POSTGRES_USER=mayan \ + -e POSTGRES_DB=mayan \ + -e POSTGRES_PASSWORD=mayanuserpass \ + -v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \ + |DOCKER_POSTGRES_IMAGE_VERSION| + + The PostgreSQL container will have one database named ``mayan``, with an user + named ``mayan`` too, with a password of ``mayanuserpass``. The container will + expose its internal 5432 port (PostgreSQL's default port) via the host's + 5432 port. The data of this container will reside on the host's + ``/docker-volumes/mayan-edms/postgres`` folder. + + +#. Create and run a Redis container: + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms-redis \ + --restart=always \ + -p 6379:6379 + |DOCKER_REDIS_IMAGE_VERSION| \ + redis-server \ + --databases \ + "2" \ + --maxmemory-policy \ + allkeys-lru \ + --save \ + "" + + The Redis container will have two databases, one for background task messages, + and the other to hold the results of those background tasks. Redis is + configure to not save its content to disk and to automatically clear up + memory. + +#. Create and run a Mayan EDMS container: + + .. code-block:: bash + + docker run \ + -d \ + --name mayan-edms \ + --restart=always \ + -p 80:8000 \ + -e MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'172.17.0.1'}}" \ + -e MAYAN_CELERY_BROKER_URL="redis://172.17.0.1:6379/0" \ + -e MAYAN_CELERY_RESULT_BACKEND="redis://172.17.0.1:6379/1" \ + -v /docker-volumes/mayan-edms/media:/var/lib/mayan \ + mayanedms/mayanedms:|DOCKER_MAYAN_IMAGE_VERSION| + + The Mayan EDMS container will connect to the PostgreSQL container via the + ``172.17.0.1`` IP address (the Docker host's default IP address). It will + connect using the ``django.db.backends.postgresql`` database driver and + connect to the ``mayan`` database using the ``mayan`` user with the password + ``mayanuserpass``. The files of the container will be store in the + host's ``/docker-volumes/mayan-edms/media`` folder. The container will + expose its web service running on port 8000 on the host's port 80. + + The container will be available by browsing to ``http://localhost`` or to + the IP address of the computer running the container. + + If another web server is running on port 80 use a different port in the + ``-p`` option. For example: ``-p 81:8000``. diff --git a/docs/chapters/docker/nightly.txt b/docs/chapters/docker/nightly.txt new file mode 100644 index 0000000000..d65f01e217 --- /dev/null +++ b/docs/chapters/docker/nightly.txt @@ -0,0 +1,12 @@ +============== +Nightly images +============== + +The continuous integration pipeline used for testing development builds also +produces a resulting Docker image. These are build automatically and their +stability is not guaranteed. They should never be used in production. +If you want to try out the Docker images the development uses or want a sneak +peek at the new features being worked on checkout the container registry at: +|SOURCE_CODE_REPOSITORY|container_registry + + diff --git a/docs/chapters/docker/start_stop.txt b/docs/chapters/docker/start_stop.txt new file mode 100644 index 0000000000..4c05302eb9 --- /dev/null +++ b/docs/chapters/docker/start_stop.txt @@ -0,0 +1,13 @@ +=================================== +Stopping and starting the container +=================================== + +To stop the container use:: + + docker stop mayan-edms + + +To start the container again:: + + docker start mayan-edms + diff --git a/docs/chapters/docker/upgrading.txt b/docs/chapters/docker/upgrading.txt new file mode 100644 index 0000000000..3e15d2ad5a --- /dev/null +++ b/docs/chapters/docker/upgrading.txt @@ -0,0 +1,30 @@ +========= +Upgrading +========= + +Upgrading a Mayan EDMS Docker container is actually a matter of stopping and +deleting the container, downloading the most recent version of the image and +starting a container again. The container will take care of updating the +database structure to the newest version if necessary. + +**IMPORTANT!** Do not delete the volume storing the data, only the container. + +Stop the container to be upgraded:: + + docker stop mayan-edms + + +Remove the container:: + + docker rm mayan-edms + + +Pull the new image version:: + + docker pull mayanedms/mayanedms:latest + + +Start the container again with the new image version:: + + docker run -d --name mayan-edms --restart=always -p 80:8000 -v /docker-volumes/mayan:/var/lib/mayan mayanedms/mayanedms:latest + diff --git a/docs/chapters/document_types.rst b/docs/chapters/document_types.txt similarity index 68% rename from docs/chapters/document_types.rst rename to docs/chapters/document_types.txt index 65ec4a7927..77b9ba7e37 100644 --- a/docs/chapters/document_types.rst +++ b/docs/chapters/document_types.txt @@ -1,3 +1,4 @@ +============== Document types ============== @@ -67,22 +68,3 @@ assigned when uploaded into Mayan EDMS. A document can only be of one type at a given moment, but if needed, the type of a document can be changed. Upon changing its type, the document will lose its previous settings and attributes, and will inherit the settings and attributes of its new type. - - -Creating document types -======================= - -.. admonition:: Permissions required - :class: warning - - The "Create document types" permission is required for this action. - - -#. Go to the :menuselection:`System --> Setup --> Document types` menu. -#. From the :guilabel:`Actions` dropdown select :guilabel:`Create document type`. -#. Enter a label to be shown to users when using this document type. -#. Optional: Enter a period of time after which documents of this type will be moved to the trash. -#. Optional: Select the unit of time for the period after which the document will be moved to the trash. -#. Optional: Enter a period of time after which documents moved to the trash will be permanently deleted. -#. Optional: Select the unit of time for the period of time after which the documents moved to the trash will be permanently deleted -#. Press :guilabel:`Submit`. diff --git a/docs/chapters/file_storage.rst b/docs/chapters/file_storage.txt similarity index 98% rename from docs/chapters/file_storage.rst rename to docs/chapters/file_storage.txt index c1232e432f..56efab30fe 100644 --- a/docs/chapters/file_storage.rst +++ b/docs/chapters/file_storage.txt @@ -1,6 +1,6 @@ -************ +============ File storage -************ +============ The files are stored and placed under Mayan EDMS "control" to avoid filename clashes each file gets renamed to its ``UUID`` (Universally Unique ID), diff --git a/docs/chapters/index_examples.rst b/docs/chapters/indexes/examples.txt similarity index 94% rename from docs/chapters/index_examples.rst rename to docs/chapters/indexes/examples.txt index 81af5e7fbb..f1b666b41b 100644 --- a/docs/chapters/index_examples.rst +++ b/docs/chapters/indexes/examples.txt @@ -1,9 +1,9 @@ - +============== Index examples --------------- +============== Index of document types -^^^^^^^^^^^^^^^^^^^^^^^ +======================= .. admonition:: Permissions required :class: warning @@ -56,7 +56,7 @@ of types "Invoice" and "Letter", these will now go into the level "Correspondenc Index document by department, taken from the first character of the invoice number metadata -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +=========================================================================================== Requires one index node with the template:: @@ -66,7 +66,7 @@ Requires one index node with the template:: Nested date index from a date contained in a metadata -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +===================================================== Assuming the metadata type is named **date_issued** with a date format of YYYY-MM-DD. The target is to have two levels: one for years and another @@ -91,7 +91,7 @@ sub level for months. Index by OCR content -^^^^^^^^^^^^^^^^^^^^ +==================== This example indexes documents in a "quarterly report" level if they have the fragment “quarterly report” in the OCR text:: @@ -105,21 +105,21 @@ The same applies to text content extracted for the document:: Index documents not found in any cabinet -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +======================================== :: {% if document.cabinets.count == 0 %}No Cabinets{% endif %} Index documents not tagged -^^^^^^^^^^^^^^^^^^^^^^^^^^ +========================== :: {% if document.tags.count == 0 %}No Tags{% endif %} Index documents specifically, by the year of a metadata field otherwise by their uploaded year -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +============================================================================================== :: {% for tag in document.tags.all %}{% if tag.label == "Taxes" %}{% if document.metadata_value_of.tax_year|length_is:"4" %}{{ document.metadata_value_of.tax_year }}{% else %}{{ document.date_added|date:"Y" }}{% endif %}{% endif %}{% endfor %} diff --git a/docs/chapters/indexes/index.txt b/docs/chapters/indexes/index.txt new file mode 100644 index 0000000000..57095a211d --- /dev/null +++ b/docs/chapters/indexes/index.txt @@ -0,0 +1,23 @@ +.. index:: Indexes + +================ +Document indexes +================ + +Document indexes are a multi level structure similar to folder in a filesystem, +however the hierarchy of the levels is automatically created, updated, or deleted +based on rules set by the administrator. + +- :doc:`indexes` +- :doc:`examples` +- :doc:`mirroring` + +.. toctree:: + :hidden: + + indexes + mirroring + examples + + + diff --git a/docs/chapters/indexes.rst b/docs/chapters/indexes/indexes.txt similarity index 61% rename from docs/chapters/indexes.rst rename to docs/chapters/indexes/indexes.txt index 3c050c7108..0a736e0d12 100644 --- a/docs/chapters/indexes.rst +++ b/docs/chapters/indexes/indexes.txt @@ -1,10 +1,11 @@ -Indexes -======= +=============== +Index structure +=============== Indexes are an automatic method to hierarchically organize documents in -relation to their properties (:doc:`../chapters/metadata`, label, MIME type, +relation to their properties (:doc:`../metadata`, label, MIME type, etc). To use indexes you need to first create an index template. Once created, -associate the index to one or more :doc:`../chapters/document_types`. +associate the index to one or more :doc:`../document_types`. Index are hierarchical models so a tree template needs to be specified for them. This tree template will contain references to document metadata or properties @@ -75,41 +76,3 @@ that will be generate based on the tree template would be as follows: year_1 -> document_3; } - -.. include:: ../chapters/index_examples.rst - - -Mirroring ---------- - -Indexes can be exported as `FUSE `_ -filesystems. Using the management command ``mountindex`` we could export the -previous example index as follows:: - - mkdir -p ~/indexes/products - mayan-edms.py mountindex product-sheets-per-year ~/indexes/products - -The ``~/indexes/products`` directory will now have a directory and files structure -identical to that of the index. Once indexes are mounted with this command, they -behave like any other filesystem directory and can even be further shared -via the network with network file system software like -`Samba `_ or -`NFS `_. - -.. blockdiag:: - - blockdiag { - orientation = portrait - span_width = 200; - - index [ label = 'Product sheets per year', width=180 ]; - block_device [ height = 100, label = "Block device\n(Hard drive)", shape = flowchart.database ]; - network [ label = "Network", shape = cloud ]; - user [ label = "Users", shape = actor ]; - - index -> block_device [ label = "mirroring", fontsize = 8 ]; - block_device -> network -> user; - } - -Indexes and mirrored indexes are Read Only as they are generated as a result of -prior activities like document uploads, metadata changes. diff --git a/docs/chapters/indexes/mirroring.txt b/docs/chapters/indexes/mirroring.txt new file mode 100644 index 0000000000..da9cb2d9d2 --- /dev/null +++ b/docs/chapters/indexes/mirroring.txt @@ -0,0 +1,35 @@ +========= +Mirroring +========= + +Indexes can be exported as `FUSE `_ +filesystems. Using the management command ``mountindex`` we could export the +previous example index as follows:: + + mkdir -p ~/indexes/products + mayan-edms.py mountindex product-sheets-per-year ~/indexes/products + +The ``~/indexes/products`` directory will now have a directory and files structure +identical to that of the index. Once indexes are mounted with this command, they +behave like any other filesystem directory and can even be further shared +via the network with network file system software like +`Samba `_ or +`NFS `_. + +.. blockdiag:: + + blockdiag { + orientation = portrait + span_width = 200; + + index [ label = 'Product sheets per year', width=180 ]; + block_device [ height = 100, label = "Block device\n(Hard drive)", shape = flowchart.database ]; + network [ label = "Network", shape = cloud ]; + user [ label = "Users", shape = actor ]; + + index -> block_device [ label = "mirroring", fontsize = 8 ]; + block_device -> network -> user; + } + +Indexes and mirrored indexes are Read Only as they are generated as a result of +prior activities like document uploads, metadata changes. diff --git a/docs/chapters/languages.rst b/docs/chapters/languages.txt similarity index 95% rename from docs/chapters/languages.rst rename to docs/chapters/languages.txt index f3f77df3bc..1de64065b6 100644 --- a/docs/chapters/languages.rst +++ b/docs/chapters/languages.txt @@ -1,6 +1,6 @@ -********* +========= Languages -********* +========= The list of languages choices in the language dropdown used for documents is based on the current ISO 639 list. This list can be quite extensive. To reduce @@ -31,6 +31,6 @@ Example:: For more information check out the :ref:`environment variables ` chapter of the -:doc:`../topics/settings` topic. +:doc:`../parts/settings` topic. diff --git a/docs/chapters/mailing.rst b/docs/chapters/mailing.txt similarity index 82% rename from docs/chapters/mailing.rst rename to docs/chapters/mailing.txt index 702412e445..2a4f01d27f 100644 --- a/docs/chapters/mailing.rst +++ b/docs/chapters/mailing.txt @@ -1,12 +1,12 @@ -***************** +================= Mailing documents -***************** +================= Sending emails in Mayan EDMS is controlled by two different system depending on the type of email being sent. These are administrative emails like password reset emails and user emails sent from the application. To configure administrative email for things like password reset check the topic: -:doc:`../topics/administration` +:doc:`../parts/administration` Application emails ================== @@ -14,8 +14,7 @@ Application emails To allow users to send emails or documents from within the web interface, Mayan EDMS provides its our own email system called Mailing Profiles. Mailing Profiles support access control per user role and can use different -email backends. Mailing Profiles are created from the -:menuselection:`System --> Setup` menu. +email backends. Once created mailing profiles allow users to send email messages from within the user interface containing either an URL link to the document or diff --git a/docs/chapters/metadata.rst b/docs/chapters/metadata.rst deleted file mode 100644 index 7c1221c105..0000000000 --- a/docs/chapters/metadata.rst +++ /dev/null @@ -1,99 +0,0 @@ -******** -Metadata -******** - -Metadata is the name of the attribute of a document. The concept of metadata is -divided in two: **metadata types** (size, color, distance) and **metadata values** for -those types. Metadata types are defined in the setup menu and associated with -document types. Then when a document is uploaded, a value for that metadata -can be entered. There are two kinds of metadata type to document type relations: -optional and required. When a metadata type is optional for a document type, -it can be left blank for a document being uploaded and the upload will still -be successful. On the other hand required metadata type must be given a value -or it will not be possible to upload the document at hand. - -Examples of metadata type: Invoice number, color, employee id. - -The data entry of metadata types can be set to allow any value to be provided -(the default) or a list of possible values can be entered in the ``Lookup`` -configuration option and users will be presented with a drop down list of options -instead of the default text entry box. - -If metadata types are setup to allow any value to be entered a ``validation`` -option can be chosen to block the entry of invalid data. Metadata types also -provide ``parsers`` which will not block the entry of data but are able to -interpret and modify the value provided by the user to a conform to a specific -format. An example of a provided parser is the date parser which will interpret -and correct dates provided by users regardless of the format in which they are -entered. - - -Creating metadata types -======================= - -.. admonition:: Permissions required - :class: warning - - The "Create new metadata types" permission is required for this action. - - -#. Go to the :menuselection:`System --> Setup --> Metadata types` menu. -#. From the :guilabel:`Actions` dropdown select :guilabel:`Create new`. -#. Provide a name to reference this metadata type in other parts of the system. -#. Enter a label to be shown to users when using this metadata type. -#. Optional: Enter a default value for the metadata type. -#. Optional: Provide a comma separated list of options to restrict the data entry - when using this metadata type. -#. Optional: Select a validator and a parser to validate and cleanup the data - entry when not using a predetermined list of values. -#. Press :guilabel:`Submit`. - - -Assigning a metadata type to a document type -============================================ - -.. admonition:: Permissions required - :class: warning - - - The "Edit metadata types" permission is required for this action, globally or - via an ACL for a metadata type. - - Also the "Edit document type" permission - is required, globally or via an ACL for a document type. - - -This action can be performed in two ways. - -Option 1: Via the metadata type view ------------------------------------- - -#. Go to the :menuselection:`System --> Setup --> Metadata types` menu. -#. Click on the button :guilabel:`Document types` of the metadata type you which - to associate. -#. From the list of existing document types press either: - - - :guilabel:`None` if this metadata type will not be available for documents - of the type. - - :guilabel:`Optional` if this metadata type will be available and is - optional to provide a value for documents of the type. - - :guilabel:`Required` if this metadata type will be available and is - required to provide a value for documents of the type. - -#. Press :guilabel:`Save`. - - -Option 2: Via the document type view ------------------------------------- - -#. Go to the :menuselection:`System --> Setup --> Document types` menu. -#. Click on the button :guilabel:`Metadata types` of the metadata type you which - to associate. -#. From the list of existing metadata types press either: - - - :guilabel:`None` if this metadata type will not be available for documents - of the type. - - :guilabel:`Optional` if this metadata type will be available and is - optional to provide a value for documents of the type. - - :guilabel:`Required` if this metadata type will be available and is - required to provide a value for documents of the type. - -#. Press :guilabel:`Save`. diff --git a/docs/chapters/metadata.txt b/docs/chapters/metadata.txt new file mode 100644 index 0000000000..69e26e3e4d --- /dev/null +++ b/docs/chapters/metadata.txt @@ -0,0 +1,28 @@ +======== +Metadata +======== + +Metadata is the name of the attribute of a document. The concept of metadata is +divided in two: **metadata types** (size, color, distance) and **metadata values** for +those types. Metadata types are defined in the setup menu and associated with +document types. Then when a document is uploaded, a value for that metadata +can be entered. There are two kinds of metadata type to document type relations: +optional and required. When a metadata type is optional for a document type, +it can be left blank for a document being uploaded and the upload will still +be successful. On the other hand required metadata type must be given a value +or it will not be possible to upload the document at hand. + +Examples of metadata type: Invoice number, color, employee id. + +The data entry of metadata types can be set to allow any value to be provided +(the default) or a list of possible values can be entered in the ``Lookup`` +configuration option and users will be presented with a drop down list of options +instead of the default text entry box. + +If metadata types are setup to allow any value to be entered a ``validation`` +option can be chosen to block the entry of invalid data. Metadata types also +provide ``parsers`` which will not block the entry of data but are able to +interpret and modify the value provided by the user to a conform to a specific +format. An example of a provided parser is the date parser which will interpret +and correct dates provided by users regardless of the format in which they are +entered. diff --git a/docs/chapters/object_storage.rst b/docs/chapters/object_storage.rst deleted file mode 100644 index 3ae023ebac..0000000000 --- a/docs/chapters/object_storage.rst +++ /dev/null @@ -1,31 +0,0 @@ -************** -Object storage -************** - -It is possible to use object storage instead of the default filesystem based -storage. One such object storage system is Amazon S3 (Simple Storage Service) -API compatible object storage. The following steps will configure Mayan EDMS -to use a S3 style storage for documents. - -1. Install the django-storages and boto3 Python libraries. - - * For the direct deployment method of installation use:: - - pip install django-storages boto3 - - - * or if using the Docker image, add the following the command line that runs the container:: - - -e MAYAN_PIP_INSTALLS='django-storages boto3' - - -2. From the web interface navigate to the :menuselection:`System --> Setup --> Setting --> Documents` menu. -3. Locate the **DOCUMENTS_STORAGE_BACKEND** setting, press **Edit** and enter:: - - storages.backends.s3boto3.S3Boto3Storage - -4. Save and locate the setting **DOCUMENTS_STORAGE_BACKEND_ARGUMENTS**, press **Edit** and enter:: - - '{access_key: , secret_key: , bucket_name: }' - -5. Save and restart your Mayan EDMS installation for the setting to take effect. diff --git a/docs/chapters/ocr_backend.rst b/docs/chapters/ocr_backend.txt similarity index 97% rename from docs/chapters/ocr_backend.rst rename to docs/chapters/ocr_backend.txt index 24cdc70cdb..aedb603ee5 100644 --- a/docs/chapters/ocr_backend.rst +++ b/docs/chapters/ocr_backend.txt @@ -1,6 +1,6 @@ -*********** +=========== OCR backend -*********** +=========== Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract (https://github.com/tesseract-ocr/tesseract/), but it can diff --git a/docs/chapters/password_reset.rst b/docs/chapters/password_reset.txt similarity index 94% rename from docs/chapters/password_reset.rst rename to docs/chapters/password_reset.txt index 3485cffe41..52f0c265b5 100644 --- a/docs/chapters/password_reset.rst +++ b/docs/chapters/password_reset.txt @@ -1,6 +1,6 @@ -************** +============== Password reset -************** +============== To use the password reset feature, administrative emails need to be configured. These are sent by the system itself and not by the users. Their usage and @@ -27,7 +27,7 @@ Example:: To change the reference URL in the password reset emails on in the default document mailing template modify the ``COMMON_PROJECT_URL`` setting. For information on the different ways to change a setting check the -:doc:`../topics/settings` topic. +:doc:`../parts/settings` topic. To test the email settings use the management command ``sendtestemail``. Example:: diff --git a/docs/chapters/permissions.rst b/docs/chapters/permissions.txt similarity index 97% rename from docs/chapters/permissions.rst rename to docs/chapters/permissions.txt index 5cf4568f28..7808b42419 100644 --- a/docs/chapters/permissions.rst +++ b/docs/chapters/permissions.txt @@ -1,6 +1,6 @@ -*********** +=========== Permissions -*********** +=========== Mayan EDMS provides very fine control over which actions users can perform. Action control works by allowing ``roles``, that are composed of diff --git a/docs/chapters/quick_labels.rst b/docs/chapters/quick_labels.rst deleted file mode 100644 index 70993a9cd4..0000000000 --- a/docs/chapters/quick_labels.rst +++ /dev/null @@ -1,70 +0,0 @@ -************ -Quick labels -************ - -Quick labels are predetermined filenames that allow the quick renaming of -documents as they are uploaded or after they have been uploaded. - -Quick labels are added and associated to a document type. - -Example of quick label: Invoice, Receipt from X store, Purchase order. - -It is possible to preserve the file extension when using quick labels. -Extensions are required for some operating system to be able to detect the -correct file type to access the content. - -For example if a document file is named "file0001.pdf" and the quick label -"Receipt from X store" is applied, the resulting document label will be -"Receipt from X store.pdf". - - -Creating quick labels -===================== - -.. admonition:: Permissions required - :class: warning - - The "Edit document types" permission is required for this action, either - globally or via an ACL for a document type. - - -Since quick labels are associated with document types, creating quick labels -must be done from the document type view. - -#. Go to the :menuselection:`System --> Setup --> Document types` menu. -#. In the document type list, click on the :guilabel:`Quick labels` button of - the document type for which you wish to create a quick label. -#. In the view titled "Quick labels for document type: ", - from the :guilabel:`Actions` dropdown select :guilabel:`Add quick label to document type`. -#. At the quick label creation form enter the desired label and press :guilabel:`Save`. - - -Using quick labels during upload -================================ - -#. Use the new document upload wizard from :menuselection:`Documents --> New document`. -#. Select a document type and navigate to the penultimate step, where you have - the option to drag and drop files to upload. -#. Select a an option from the :guilabel:`Quick document rename` dropdown. -#. Optionally select the :guilabel:`Preserve extension` checkbox to keep the file - extension. -#. Upload your documents. - - -Using quick labels for existing documents -========================================= - -.. admonition:: Permissions required - :class: warning - - The "Edit document properties" permission is required for this action, either - globally or via an ACL for a document or document type. - - -#. Navigate to the document preview view of the document to rename. Make sure - quick labels for the document type of the document select have been created. -#. From the :guilabel:`Actions` dropdown select :guilabel:`Edit Properties`. -#. Select a an option from the :guilabel:`Quick document rename` dropdown. -#. Optionally select the :guilabel:`Preserve extension` checkbox to keep the file - extension. -#. Press :guilabel:`Save` to rename the document. diff --git a/docs/chapters/quick_labels.txt b/docs/chapters/quick_labels.txt new file mode 100644 index 0000000000..1f7aadb53d --- /dev/null +++ b/docs/chapters/quick_labels.txt @@ -0,0 +1,18 @@ +============ +Quick labels +============ + +Quick labels are predetermined filenames that allow the quick renaming of +documents as they are uploaded or after they have been uploaded. + +Quick labels are added and associated to a document type. + +Example of quick label: Invoice, Receipt from X store, Purchase order. + +It is possible to preserve the file extension when using quick labels. +Extensions are required for some operating system to be able to detect the +correct file type to access the content. + +For example if a document file is named "file0001.pdf" and the quick label +"Receipt from X store" is applied, the resulting document label will be +"Receipt from X store.pdf". diff --git a/docs/chapters/api.rst b/docs/chapters/rest_api.txt similarity index 98% rename from docs/chapters/api.rst rename to docs/chapters/rest_api.txt index ee76a618c8..2114d63dff 100644 --- a/docs/chapters/api.rst +++ b/docs/chapters/rest_api.txt @@ -1,6 +1,6 @@ -*** -API -*** +======== +REST API +======== Mayan EDMS provides an HTTP REST Application Program Interface (or API). This API allows integration with 3rd party software using simple HTTP requests. @@ -8,7 +8,7 @@ API allows integration with 3rd party software using simple HTTP requests. Several API authentication methods are provides: **Session**, **Token**, and **HTTP Basic**. -The URL for the API can be found via the :menuselection:`Tools --> REST API +The URL for the API can be found via the :menuselection:`Tools --> REST API` menu. The API is also self-documenting. The live API documentation can be found in the :menuselection:`Tools --> API Documentation (Swagger)` menu for the Swagger version and in the diff --git a/docs/chapters/scaling_up.rst b/docs/chapters/scaling_up.rst deleted file mode 100644 index 7e173411f0..0000000000 --- a/docs/chapters/scaling_up.rst +++ /dev/null @@ -1,155 +0,0 @@ -********** -Scaling up -********** - -The default installation method fits most use cases. If you use case requires -more speed or capacity here are some suggestion that can help you improve the -performance of your installation. - - -Change the database manager -=========================== - -Use PostgreSQL or MySQL as the database manager. -Tweak the memory setting of the database manager to increase memory allocation. -More PostgreSQL specific examples are available in their wiki page: -https://wiki.postgresql.org/wiki/Performance_Optimization - - -Increase the number of Gunicorn workers -======================================= - -The Gunicorn workers process HTTP requests and affect the speed at which the -website responds. - -If you are using the Docker image, change the value of the -``MAYAN_GUNICORN_WORKERS`` environment variable (check the Docker image chapter: -:ref:`docker_environment_variables`). Normally this variable defaults to 2. -Increase this number to match the number of CPU cores + 1. - -If you are using the direct deployment methods, change the line that reads:: - - command = |MAYAN_GUNICORN_BIN| -w 2 mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120 - -And increase the value of the ``-w 2`` argument. This line is found in the -``[program:mayan-gunicorn]`` section of the supervisor configuration file. - - -Background task processing -========================== - -The Celery workers are system processes that take care of the background -tasks requested by the frontend interactions like document image rendering -and periodic tasks like OCR. There are several dozen tasks defined in the code. -These tasks are divided into queues based on the app of the relationship -between the tasks. The queues by default are divided into three groups -based on the speed at which they need to be processed. The document page -image rendering for example is categorized as a high volume, short duration -task. The OCR is a high volume, long duration task. Email checking is a -low volume, medium duration tasks. It is not advisable to have the same -worker processing OCR to process image rendering too. If the worker is -processing several OCR tasks it will not be able to provide fast images -when an user is browsing the user interface. This is why by default the -queues are split into 3 workers: fast, medium, and slow. Each worker will handle -queues based on the latency required by each queue group. - - -Optimizations -------------- - -* Increase the number of workers and redistribute the queues among them - (only possible with direct deployments). -* Launch more workers to service a queue. For example for faster document - image generation launch 2 workers to process the converter queue only - possible with direct deployments). -* By default each worker process uses 1 thread. You can increase the thread - count of each worker process with the Docker environment options: - - * ``MAYAN_WORKER_FAST_CONCURRENCY`` - * ``MAYAN_WORKER_MEDIUM_CONCURRENCY`` - * ``MAYAN_WORKER_SLOW_CONCURRENCY`` - -* If using direct deployment, increase the value of the ``--concurrency=1`` - argument of each worker in the supervisor file. You can also remove this - argument and let the Celery algorithm choose the number of threads to - launch. Usually this defaults to the number of CPU cores + 1. - - -Change the message broker -========================= -Messages are the method of communication between front end interactive code -and background tasks. In this regard messages can be thought as homologous -to tasks requests. Improving how many messages can be sent, stored and -sorted will impact the number of tasks the system can handle. To save on -memory, the basic deployment method and the Docker image default to using -Redis as a message broker. To increase capacity and reduce volatility of -messages (pending tasks are not lost during shutdown) use RabbitMQ to -shuffle messages. - -For direct installs refer to the :ref:`deployment_advanced` documentation -section for the required changes. - -For the Docker image, launch a separate RabbitMQ container -(https://hub.docker.com/_/rabbitmq/):: - - docker run -d --name mayan-edms-rabbitmq -e RABBITMQ_DEFAULT_USER=mayan -e RABBITMQ_DEFAULT_PASS=mayanrabbitmqpassword -e RABBITMQ_DEFAULT_VHOST=mayan |DOCKER_RABBITMQ_IMAGE_VERSION| - -Pass the MAYAN_BROKER_URL environment variable (https://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls) -to the Mayan EDMS container so that it uses the RabbitMQ container the -message broker:: - - -e MAYAN_BROKER_URL="amqp://mayan:mayanrabbitmqpassword@localhost:5672/mayan", - -When tasks finish, they leave behind a return status or the result of a -calculation, these are stored for a while so that whoever requested the -background task, is able retrieve the result. These results are stored in the -result storage. By default a Redis server is launched inside the Mayan EDMS -container. You can launch a separate Docker Redis container and tell the Mayan -EDMS container to use this via the ``MAYAN_CELERY_RESULT_BACKEND`` environment -variable. The format of this variable is explained here: http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend - - -Deployment type -=============== - -Docker provides a faster deployment and the overhead is not high on modern -systems. It is however memory and CPU limited by default and you need to -increase this limits. The settings to change the container resource limits -are here: https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory - -For the best performance possible use the advanced deployment method on a -host dedicated to serving only Mayan EDMS. - - -Storage -======= - -For best input and output speed use a block based local filesystem on an -SSD drive for the ``/media`` sub folder. The location of the ``/media`` folder -will be specified by the ``MEDIA_ROOT`` setting. - -If capacity is your bottom line, switch to an -:doc:`object storage <../chapters/object_storage>` system. - - -Use additional hosts -==================== - -When one host is not enough you can use multiple hosts and share the load. -Make sure that all hosts share the ``/media`` folder as specified by the -``MEDIA_ROOT`` setting, also the database, the broker, and the result storage. -One setting that needs to be changed in this configuration is the lock -manager backend. - -Resource locking is a technique to avoid two processes or tasks to modify -the same resource at the same time causing a race condition. Mayan EDMS uses -its own lock manager. By default the lock manager with use a simple file -based lock backend ideal for single host installations. For multiple hosts -installation the database backend must be used in other to coordinate the -resource locks between the different hosts over a share data medium. This is -accomplished by modifying the environment variable ``LOCK_MANAGER_BACKEND`` in -both the direct deployment or the Docker image. Use the value -``lock_manager.backends.model_lock.ModelLock`` to switch to the database -resource lock backend. If you can also write your own lock manager backend -for other data sharing mediums with better performance than a relational -database like Redis, Memcached, Zoo Keeper. diff --git a/docs/chapters/settings.rst b/docs/chapters/settings.txt similarity index 91% rename from docs/chapters/settings.rst rename to docs/chapters/settings.txt index 0af74302b5..b212c205a2 100644 --- a/docs/chapters/settings.rst +++ b/docs/chapters/settings.txt @@ -1,6 +1,6 @@ -******** +======== Settings -******** +======== Mayan EDMS can be configure via environment variables or by setting files. @@ -14,7 +14,7 @@ To use environment variables, lookup the name of the setting you want to override in the "Settings" menu. The "Settings" menu is located inside the "Setup" main menu. To pass a value via an environment variable append ``"MAYAN_"`` to the name of the settings option. For example, to change -the number of documents displayed per page (COMMON_PAGINATE_BY, by default 40), +the number of documents displayed per page (``COMMON_PAGINATE_BY``, by default 40), use:: export MAYAN_COMMON_PAGINATE_BY=10 @@ -32,8 +32,8 @@ Via YAML configuration file .. versionadded:: 3.1 It is possible to modify the different settings by creating or editing the -``media/config.yml`` file. This file is formatted in the YAML markup language ( -http://yaml.org/). Here is an example of what the looks like:: +``media/config.yml`` file. This file is formatted in the YAML markup language +(http://yaml.org/). Here is an example of what the looks like:: DOCUMENT_PARSING_AUTO_PARSING: true DOCUMENT_PARSING_PDFTOTEXT_PATH: /usr/bin/pdftotext @@ -69,7 +69,7 @@ documentation your ``mayan_settings`` folder should be located in the directory: If Mayan EDMS was installed using Docker, the ``mayan_settings`` folder will be found inside the install Docker volume. If you installed Mayan EDMS -according to the :doc:`../chapters/docker` instructions provided in this +according to the :doc:`../chapters/docker/index` instructions provided in this documentation your ``mayan_settings`` folder should be located in the directory: ``/docker-volumes/mayan/mayan_settings``. @@ -82,7 +82,7 @@ Create a file with any valid name and a ``.py`` extension in the Now add the corresponding lines to override the default settings. In the settings file, it is not necessary to prepend the string ``MAYAN_`` to the setting option. For example, to change the number of documents displayed -per page (COMMON_PAGINATE_BY, by default 40), +per page (``COMMON_PAGINATE_BY``, by default 40), use:: COMMON_PAGINATE_BY=10 @@ -110,16 +110,16 @@ or via the ``DJANGO_SETTINGS_MODULE`` environment variable like this:: To make the use of the custom Python setting file permanent, update the ``|MAYAN_SUPERVISOR_CONF|`` file. In the ``[supervisord]`` section, update the ``environment=`` value of -``DJANGO_SETTINGS_MODULE`` from the default ``mayan.settings.production`` to +``DJANGO_SETTINGS_MODULE`` from the default ``mayan.settings.production`` to ``mayan.media.mayan_settings.mysettings``. Pay attention to the indentation of the ``environment=`` entries. Force supervisor to read the changes and restart using:: - + sudo supervisorctl reread sudo supervisorctl restart all -For the :doc:`../chapters/docker` installation method, the full import path will be +For the :doc:`../chapters/docker/index` installation method, the full import path will be ``mayan_settings.mysettings`` and can only be passed via the ``MAYAN_SETTINGS_MODULE`` environment variable like this:: diff --git a/docs/chapters/signatures.rst b/docs/chapters/signatures.txt similarity index 97% rename from docs/chapters/signatures.rst rename to docs/chapters/signatures.txt index cb4a35e0dd..c7b1b7c4ab 100644 --- a/docs/chapters/signatures.rst +++ b/docs/chapters/signatures.txt @@ -1,6 +1,6 @@ -******************* +=================== Document signatures -******************* +=================== Mayan EDMS supports two types of document signatures: embedded and detached signatures. When a document with an embedded signature is diff --git a/docs/chapters/smart_links.rst b/docs/chapters/smart_links.txt similarity index 97% rename from docs/chapters/smart_links.rst rename to docs/chapters/smart_links.txt index 8670c3f888..596cd1bfba 100644 --- a/docs/chapters/smart_links.rst +++ b/docs/chapters/smart_links.txt @@ -1,3 +1,4 @@ +=========== Smart links =========== @@ -6,7 +7,7 @@ in their respective indexes. Smart links are useful when two documents are related somehow but are of different type or different hierarchical units. Example: A patient record can be related to a prescription drug information -document, but they each belong to their own :doc:`../chapters/indexes`. +document, but they each belong to their own :doc:`../chapters/indexes/index`. Smart links are rule based, but don't create any organizational structure. Smart links just show the documents that match the rules as evaluated against diff --git a/docs/chapters/sources.rst b/docs/chapters/sources.txt similarity index 85% rename from docs/chapters/sources.rst rename to docs/chapters/sources.txt index 1d054bb3df..cd12423550 100644 --- a/docs/chapters/sources.rst +++ b/docs/chapters/sources.txt @@ -1,3 +1,4 @@ +======= Sources ======= @@ -62,19 +63,3 @@ manager system. If you deployed a Mayan EDMS Docker container and want to use watched folders or staging folder, refer to the Docker chapter :ref:`docker-accessing-outside-data`. - - -Creating new sources -==================== - -.. admonition:: Permissions required - :class: warning - - The "Create new document sources" permission is required for this action. - - -#. Go to the :menuselection:`System --> Setup --> Sources` menu. -#. From the :guilabel:`Actions` dropdown select the new type of source to create. -#. Each source type will have different fields to customize its behavior. Enter - the required information in each field based on the help text provided. -#. Press :guilabel:`Save`. diff --git a/docs/chapters/tags.rst b/docs/chapters/tags.rst deleted file mode 100644 index dd55f71461..0000000000 --- a/docs/chapters/tags.rst +++ /dev/null @@ -1,46 +0,0 @@ -Tags -==== - -Tags are color coded properties that can be attached or removed from documents. -Tags allow giving documents a binary property. Documents can also be tagged -with more than one tag. - -Once tagged, documents can be searched by their tags. It is also possible to -show all the documents tagged with a particular -tag via the **Documents** link of each tag. - -To view, add, or remove tags from a specific document, go to the document view -and click on the **Tags** tab. This view will show the current tags of a -document. The **Actions** menu will now show two new options: one to attach -more tags to the document and another to remove tags from the document. - -It is also possible to tag documents in bulk by selecting several documents -from any view that displays a list documents and selecting the **Attach tag** -or **Remove tags** from the dropdown menu. - - -Creating tags -============= - -.. admonition:: Permissions required - :class: warning - - The "Create new tags" permission is required for this action. - - -#. Go to the :menuselection:`Tags --> Create` menu. -#. Enter a label to identify the tag. -#. Select a color for the tag. -#. Press :guilabel:`Submit`. - - -View all tags -============= - -.. admonition:: Permissions required - :class: warning - - The "View tags" permission is required for this action, globally or via an - ACL for a tag. - -#. Go to the :menuselection:`Tags --> All` menu. diff --git a/docs/chapters/tags.txt b/docs/chapters/tags.txt new file mode 100644 index 0000000000..9ec3ff6b02 --- /dev/null +++ b/docs/chapters/tags.txt @@ -0,0 +1,11 @@ +==== +Tags +==== + +Tags are color coded properties that can be attached or removed from documents. +Tags allow giving documents a binary property. Documents can also be tagged +with more than one tag. + +Once tagged, documents can be searched by their tags. It is also possible to +show all the documents tagged with a particular +tag via the **Documents** link of each tag. diff --git a/docs/chapters/transformations.rst b/docs/chapters/transformations.txt similarity index 91% rename from docs/chapters/transformations.rst rename to docs/chapters/transformations.txt index 47c69ecf07..94968b4127 100644 --- a/docs/chapters/transformations.rst +++ b/docs/chapters/transformations.txt @@ -1,6 +1,6 @@ -*************** +=============== Transformations -*************** +=============== Transformations are persistent manipulations to the previews of the stored documents. For example: a scanning equipment may only produce landscape PDFs. @@ -17,5 +17,5 @@ menu will have a new option that reads "Create new transformation". Currently, the available transformations are: rotation, zoom, crop, and resize. Once the document image has been corrected, resubmit it for OCR for improved results. -Transformations are not destructive and do not physically modify the document +Transformations are non destructive and do not physically modify the document file, they just modify the document's graphical representation. diff --git a/docs/chapters/upload_wizard.rst b/docs/chapters/upload_wizard.rst deleted file mode 100644 index 26fe160899..0000000000 --- a/docs/chapters/upload_wizard.rst +++ /dev/null @@ -1,84 +0,0 @@ -************* -Upload wizard -************* - -The steps needed to upgrade a document using form-tools' ``SessionWizard`` -were hardcoded in the ``source`` app. This made it very difficult to add or remove -wizard steps. - -The steps of the wizard are now defined by a new class called -``sources.wizard.WizardStep``. The existing steps to select a document type, -enter metadata and tag the document, have been converted to function as -``WizardSteps`` subclasses. The converted steps now live in - -``sources.wizards.WizardStepDocumentType``, ``tag.wizard_steps.WizardStepTags``, -and ``metadata.wizard_steps.WizardStepMetadata``. - -The steps need to define the following methods: - -- ``done``: This method is execute when the wizard finished the last step - an enter the step where the actual file are uploaded. This steps is used - to encode form data into the URL query string that will be passed to the - document upload view for each file uploaded. - -- ``condition``: This method is used to display the step conditionally. - If this method return True it will be displayed during the upload wizard - execution. To skip the step, return False or None. - -- ``get_form_initial``: This method is used to return the initial data - for the step form. Use this method to set up initial values for the step's - form fields. - -- ``step_post_upload_process``: This method will be executed once the - document finishes uploading. Use this method to process the information - encoded in the URL querystring by the step's `done`` method. - -Once the ``WizardStep`` subclass is defined, it needs to be registered. This -is done by calling the ``.register`` method of the ``WizardStep`` class with -the subclass as the argument. Example:: - - WizardStep.register(WizardStepMetadata) - -This statement must be located after the subclass definition. Finally, -the module defining the wizard step must be imported so that it is loaded -with the rest of the code and enabled. The best place to do this is in the -``.ready`` method of the apps' ``apps.py`` module. Example:: - - class TagsApp(MayanAppConfig): - has_rest_api = True - has_tests = True - name = 'tags' - verbose_name = _('Tags') - - def ready(self): - super(TagsApp, self).ready() - from actstream import registry - - from .wizard_steps import WizardStepTags # NOQA - -The ``WizardStep`` class also allows for unregistering existing steps. This -is accomplished by calling the ``.deregister`` method of the ``WizardStep`` -class and passing the subclass as the argument. This method should -also be called inside the ``.ready`` method of an apps' ``apps.py`` -module. Example:: - - - class TagsApp(MayanAppConfig): - has_rest_api = True - has_tests = True - name = 'tags' - verbose_name = _('Tags') - - def ready(self): - super(TagsApp, self).ready() - from actstream import registry - - from metadata.wizard_steps import WizardStepMetadata # NOQA - from sources.wizards import WizardStep # NOQA - from .wizard_steps import WizardStepTags # NOQA - - WizardStep.deregister(WizardStepTags) - - -This will cause the tags assignment step to not be assigned to the upload -wizard anymore. diff --git a/docs/chapters/versioning.rst b/docs/chapters/versioning.txt similarity index 60% rename from docs/chapters/versioning.rst rename to docs/chapters/versioning.txt index 36365f7079..74d3cf2a25 100644 --- a/docs/chapters/versioning.rst +++ b/docs/chapters/versioning.txt @@ -1,6 +1,6 @@ -******************* +=================== Document versioning -******************* +=================== Mayan EDMS has the ability to store different versions of the same document. A comment field is provided to allow users to summarize the new @@ -46,35 +46,3 @@ There is no limit to the number of versions a document can have. By default, the last version will be showed when working with the document but any of the versions can be inspected and viewed. - - -View a document version list -============================ - -.. admonition:: Permissions required - :class: warning - - The "View documents' versions list" permission is required for this action, - either globally or via an ACL for a document or document type. - - -#. Navigate to the select document's preview view. -#. Click on the sibebar's :guilabel:`Versions` button. - - -Uploading a new document version -================================ - -.. admonition:: Permissions required - :class: warning - - The "Create new document versions" permission is required for this action, - either globally or via an ACL for a document or document type. - - -#. Navigate to the select document's versions list view. -#. From the :guilabel:`Actions` dropdown select :guilabel:`Upload new version`. -#. Optionally type a comment explaining the changes in the new version. -#. Press the :guilabel:`Browse` button and select a new file. -#. Press :guilabel:`Save` upload the new version. - diff --git a/docs/chapters/workflows.rst b/docs/chapters/workflows.txt similarity index 99% rename from docs/chapters/workflows.rst rename to docs/chapters/workflows.txt index 3cd6db6081..64fbc115a9 100644 --- a/docs/chapters/workflows.rst +++ b/docs/chapters/workflows.txt @@ -1,6 +1,6 @@ -********* +========= Workflows -********* +========= Introduction ============ diff --git a/docs/conf.py b/docs/conf.py index e3300b7885..34b66ad465 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -41,8 +41,7 @@ sys.path.append( # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -# extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode'] -# extensions = ["djangodocs", "sphinx.ext.intersphinx"] +# extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.intersphinx'] extensions = [ 'sphinx_sitemap', 'sphinx.ext.extlinks', 'sphinxcontrib.blockdiag', 'sphinxcontrib.spelling', @@ -56,7 +55,7 @@ blockdiag_latex_image_format = 'PDF' templates_path = ['_templates'] # The suffix of source filenames. -source_suffix = '.rst' +source_suffix = '.txt' # The encoding of source files. # source_encoding = 'utf-8-sig' diff --git a/docs/index.rst b/docs/index.txt similarity index 66% rename from docs/index.rst rename to docs/index.txt index cbe8f1e4d9..566f262d90 100644 --- a/docs/index.rst +++ b/docs/index.txt @@ -17,28 +17,32 @@ repository for electronic documents. .. toctree:: :hidden: - topics/features - topics/installation + parts/features + parts/installation releases/index - topics/getting_started - topics/adding_documents - topics/access_control - topics/categorization - topics/collaboration - topics/settings - topics/storage - topics/integration - topics/docker - topics/advanced - topics/administration - topics/troubleshooting - topics/development - topics/faq - topics/license - topics/contact + parts/getting_started + parts/access_control + parts/categorization + parts/collaboration + parts/settings + parts/storage + chapters/rest_api + chapters/docker/index + parts/advanced + parts/administration + parts/troubleshooting + chapters/development/index + parts/faq + parts/license + parts/contact + .. _Docker: https://www.docker.com/ .. _Django: http://www.djangoproject.com/ .. _Free Open Source: http://en.wikipedia.org/wiki/Open_source .. _Electronic Document Management System: https://en.wikipedia.org/wiki/Document_management_system .. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt + + +.. + parts/adding_documents diff --git a/docs/mercs/0001-merc-process.rst b/docs/mercs/0001-merc-process.txt similarity index 100% rename from docs/mercs/0001-merc-process.rst rename to docs/mercs/0001-merc-process.txt diff --git a/docs/mercs/0002-test-writing.rst b/docs/mercs/0002-test-writing.txt similarity index 100% rename from docs/mercs/0002-test-writing.rst rename to docs/mercs/0002-test-writing.txt diff --git a/docs/mercs/0003-using-javascript-libraries.rst b/docs/mercs/0003-using-javascript-libraries.txt similarity index 100% rename from docs/mercs/0003-using-javascript-libraries.rst rename to docs/mercs/0003-using-javascript-libraries.txt diff --git a/docs/mercs/0004-support-forum.rst b/docs/mercs/0004-support-forum.txt similarity index 100% rename from docs/mercs/0004-support-forum.rst rename to docs/mercs/0004-support-forum.txt diff --git a/docs/mercs/0005-explicit-arguments.rst b/docs/mercs/0005-explicit-arguments.txt similarity index 100% rename from docs/mercs/0005-explicit-arguments.rst rename to docs/mercs/0005-explicit-arguments.txt diff --git a/docs/mercs/0006-lower-information-disclose.rst b/docs/mercs/0006-lower-information-disclose.txt similarity index 100% rename from docs/mercs/0006-lower-information-disclose.rst rename to docs/mercs/0006-lower-information-disclose.txt diff --git a/docs/mercs/index.rst b/docs/mercs/index.txt similarity index 98% rename from docs/mercs/index.rst rename to docs/mercs/index.txt index 95830779d6..ad441f9fca 100644 --- a/docs/mercs/index.rst +++ b/docs/mercs/index.txt @@ -1,6 +1,6 @@ -***** +===== MECRs -***** +===== Mayan EDMS Request For Comment documents index. diff --git a/docs/mercs/merging-roles-and-groups.rst b/docs/mercs/merging-roles-and-groups.txt similarity index 100% rename from docs/mercs/merging-roles-and-groups.rst rename to docs/mercs/merging-roles-and-groups.txt diff --git a/docs/topics/access_control.rst b/docs/parts/access_control.txt similarity index 52% rename from docs/topics/access_control.rst rename to docs/parts/access_control.txt index 458c893134..84c32606d0 100644 --- a/docs/topics/access_control.rst +++ b/docs/parts/access_control.txt @@ -1,6 +1,6 @@ -############## +============== Access control -############## +============== Mayan EDMS uses a role based permission system (https://en.wikipedia.org/wiki/Role-based_access_control) that provides a @@ -8,9 +8,12 @@ mechanism to control access to the contained documents and system functions. The role access control system is divided into two main groups: -* Permission grants to roles for the entire system. -* ACLs (access control lists). These are permission granted to a role for a +- :doc:`../chapters/permissions`: Permission grants to roles for the entire system. +- :doc:`../chapters/acls`: ACLs (access control lists). These are permission granted to a role for a specific object or group of objects. -.. include:: ../chapters/permissions.rst -.. include:: ../chapters/acls.rst +.. toctree:: + :hidden: + + ../chapters/permissions + ../chapters/acls diff --git a/docs/parts/administration.txt b/docs/parts/administration.txt new file mode 100644 index 0000000000..0dbe44eaa5 --- /dev/null +++ b/docs/parts/administration.txt @@ -0,0 +1,17 @@ +============== +Administration +============== + +- :doc:`../chapters/languages` +- :doc:`../chapters/password_reset` +- :doc:`../chapters/ocr_backend` +- :doc:`../chapters/backups` + + +.. toctree:: + :hidden: + + ../chapters/languages + ../chapters/password_reset + ../chapters/ocr_backend + ../chapters/backups diff --git a/docs/parts/advanced.txt b/docs/parts/advanced.txt new file mode 100644 index 0000000000..4adb5eb14f --- /dev/null +++ b/docs/parts/advanced.txt @@ -0,0 +1,20 @@ +=============== +Advanced topics +=============== + +- :doc:`../chapters/workflows` +- :doc:`../chapters/signatures` +- :doc:`../chapters/metadata` +- :doc:`../chapters/transformations` +- :doc:`../chapters/versioning` +- :doc:`../chapters/quick_labels` + +.. toctree:: + :hidden: + + ../chapters/workflows + ../chapters/signatures + ../chapters/metadata + ../chapters/transformations + ../chapters/versioning + ../chapters/quick_labels diff --git a/docs/parts/categorization.txt b/docs/parts/categorization.txt new file mode 100644 index 0000000000..9a271145cb --- /dev/null +++ b/docs/parts/categorization.txt @@ -0,0 +1,37 @@ +============== +Categorization +============== + +Mayan EDMS several ways to visual organize documents. Document categorization +allows showing users different views of document groups. These are divided +into ones requiring manual maintenance and others that are updated +automatically. + + +Manual methods +============== + +- :doc:`../chapters/document_types` +- :doc:`../chapters/cabinets` +- :doc:`../chapters/tags` + +.. toctree:: + :hidden: + + ../chapters/document_types + ../chapters/cabinets + ../chapters/tags + + +Automatic methods +================= + +- :doc:`../chapters/indexes/index` +- :doc:`../chapters/smart_links` + +.. toctree:: + :hidden: + + ../chapters/indexes/index + ../chapters/smart_links + diff --git a/docs/parts/collaboration.txt b/docs/parts/collaboration.txt new file mode 100644 index 0000000000..c2c7c4fae3 --- /dev/null +++ b/docs/parts/collaboration.txt @@ -0,0 +1,15 @@ +============= +Collaboration +============= + +Mayan EDMS includes several methods to allow users to collectively collaborate +when working with documents. + +- :doc:`../chapters/checkouts` +- :doc:`../chapters/mailing` + +.. toctree:: + :hidden: + + ../chapters/checkouts + ../chapters/mailing diff --git a/docs/parts/contact.txt b/docs/parts/contact.txt new file mode 100644 index 0000000000..8d3fb0b771 --- /dev/null +++ b/docs/parts/contact.txt @@ -0,0 +1,29 @@ +======= +Contact +======= + + +FAQ +=== + +* Try the :doc:`FAQ ` -- it's got answers to many common questions. + + +Forum +===== + +Search for information or post a question, report or feature request at: +https://forum.mayan-edms.com. + +Mayan EDMS developers do their best to reply to basic questions. +Be sure to use the search feature of the forum as some posts may already +contain the answers to your questions. + + +Bugs/ticket tracker +=================== + +Report bugs with Mayan EDMS or search existing ones using GitLab's `ticket tracker`_. + + +.. _ticket tracker: |SOURCE_CODE_ISSUES| diff --git a/docs/topics/faq.rst b/docs/parts/faq.txt similarity index 71% rename from docs/topics/faq.rst rename to docs/parts/faq.txt index a12c5b08c0..a3bf9eb792 100644 --- a/docs/topics/faq.rst +++ b/docs/parts/faq.txt @@ -1,23 +1,22 @@ -### +=== FAQ -### +=== -************* Non technical -************* +============= Contact -======= +------- Can I contact members of the development team? ----------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Direct access to members of the development team is reserved for clients of a support or consultation contract. I can't pay for support/consultation ------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A community forum is available at https://forum.mayan-edms.com. Members of the development team visit the forum on occasions and might answer some @@ -25,21 +24,21 @@ questions on a voluntary basis. I found a bug -------------- +^^^^^^^^^^^^^ -For bugs, open an issue at https://gitlab.com/mayan-edms/mayan-edms/issues. +For bugs, open an issue at |SOURCE_CODE_ISSUES|. I found a security issue ------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^ -Open an issue at https://gitlab.com/mayan-edms/mayan-edms/issues and mark it as +Open an issue at |SOURCE_CODE_ISSUES| and mark it as Confidential. Allow us at least 48 hours to find and release a fix for the issue before submitting it to the CVE database. I want to join the development team ------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Perfect! We need all the help we can get. Tell us where we can see what you've done using Mayan EDMS. It could be a fork, a new UI, an API client, a custom app, @@ -48,7 +47,7 @@ codebase. I submitted an issue and it has not been fixed ----------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There are many reason an issue might not get resolved and remain open for an extended period of time. We document on the issue itself the progress and when @@ -80,7 +79,7 @@ open with no resolution are: I submitted a merge request and has not been merged ---------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Merge requests must follow the development standards of the code as close a possible. They must also be atomic and as small as possible. The code must also @@ -89,10 +88,10 @@ customize it in some way based on your own preferences or needs. Distribution -============ +------------ Can I distribute Mayan EDMS under another name and/or logo? ------------------------------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Yes, the terms of the license allow this. However, the copyright notice must remain intact. If you use an alternate name, a notice indicating that yours is @@ -103,10 +102,10 @@ holders, or the core team in any way. Sale -==== +---- Can I sell Mayan EDMS as is or under another name? --------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Yes, selling Mayan EDMS is permitted. However, the copyright notice must remain intact. If you use an alternate name, a notice indicating that yours is @@ -119,7 +118,7 @@ type. Can I get exclusive distribution rights for my region? ------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ No, the terms of the license make the project freely available to everyone. Restricting distribution or sale would conflict with the license terms. This @@ -128,14 +127,14 @@ terms. Is there a commercial partnership program? ------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There was at one time but was retired. If there is interest it could be reinstated in the future. What is an EDMS? ----------------- +^^^^^^^^^^^^^^^^ EDMS stands for Electronic Document Management System and it is an more modern version of a DMS. A DMS is a Document Management System. A system to store, @@ -149,15 +148,15 @@ Management). Mayan EDMS started initially as a strict EDMS project but has been expanding its feature set and provide some functionality from other system types. -********* + Technical -********* +========= Database managers -================= +----------------- PostgreSQL vs. MySQL --------------------- +^^^^^^^^^^^^^^^^^^^^ Since Django abstracts database operations from a functional point of view Mayan EDMS will behave exactly the same either way. The only concern would be @@ -168,22 +167,24 @@ state and has to be reverted manually before trying again. LDAP -==== +---- How to do LDAP authentication ------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A sample settings file called ldap_connection_settings.py is included in the contrib/settings/ folder of the repository showing how to setup LDAP -authentication. This file can be found on the web at: https://gitlab.com/mayan-edms/mayan-edms/blob/master/contrib/settings/ldap_connection_settings.py. This is a community contributed file. Use the Python -settings file method to use this file. +authentication. This file can be found on the web at: +|SOURCE_CODE_REPOSITORY|blob/master/contrib/settings/ldap_connection_settings.py. +This is a community contributed file. Use the Python settings file method to +use this file. Operating systems -================= +----------------- How to install Mayan EDMS in Windows operating systems? -------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Mayan EDMS doesn't run natively on Windows. The best way is to use a virtual machine product, install Ubuntu or Debian, and proceed with the standard @@ -191,10 +192,10 @@ deployment instructions or use Docker inside a GNU/Linux virtual machine. Python -====== +------ Is virtualenv required as specified in the documentation? ---------------------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ It is not necessary, but it's a strong recommendation mainly to reduce dependency conflicts by isolation from the main Python system install. If not @@ -206,63 +207,25 @@ apparent reason. Does Mayan EDMS work with Python 3? ------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Yes but it is not production ready yet. Users are encouraged to deploy test -installations of Mayan EDMS on Python 3 and report findings. +Yes, version 3.3 ships with Python 3.7 support. Support for Python 2 will +be removed in version 4.0. -Static files -============ +How to upgrade an existing Python 2 virtualenv +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Mayan EDMS installed correctly and works, but static files are not served -------------------------------------------------------------------------- +Use:: -Django's development server doesn't serve static files unless the DEBUG option -is set to True, this mode of operation should only be used for development or -testing. For production deployments the management command:: + virtualenv -p - $ mayan-edms.py preparestatic +If you followed the deployment instructions, the command line would be:: -should be used and the resulting static folder served from a webserver. -For more information check the -:django-docs:`howto/static-files/` + virtualenv /opt/mayan-edms -p /usr/bin/python3 + +If using a dedicated user account for Mayan EDMS:: + + sudo -u virtualenv /opt/mayan-edms -p /usr/bin/python3 -Watch folders -============= - -The watched folder feature is not working ------------------------------------------ - -Make sure that the Celery BEAT scheduler is running correctly as it is the -element that triggers the periodic tasks. Check that the user running the Mayan -EDMS services has read and write permissions for the watch folder. - - - -Other -===== - -File system links not showing when serving content with ``Samba`` ------------------------------------------------------------------ - -Disable unix extensions in the [global] section and enable wide links for the file serving share - -Example:: - - [global] - unix extensions = no - - ... - - [digitalizacion] - path = /var/local/mayan - guest ok = yes - read only = yes - wide links = yes - follow symlinks = yes - - -Reference: -* http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html diff --git a/docs/parts/features.txt b/docs/parts/features.txt new file mode 100644 index 0000000000..88be28b56a --- /dev/null +++ b/docs/parts/features.txt @@ -0,0 +1,100 @@ +======== +Features +======== + +- :doc:`Document versioning <../chapters/versioning>`. + + - Store many versions of the same document, download or revert to a + previous version. + +- :doc:`Digital signatures <../chapters/signatures>`. + + - Check the authenticity of documents by verifying their embedded + cryptographic signatures or upload detached signatures for document + signed after they were stored. + +- :doc:`Collaboration tools <../parts/collaboration>`. + + - Discuss documents, or comment on new versions of a document. + +- :doc:`User-defined document metadata <../chapters/metadata>`. + + - Several metadata fields can be matched to a document type as per technical, + legal or structural requirements such as the `Dublin core`_. + - Metadata fields can have an initial value, which can be static or determined + by a template code snippet provided by the user. + +- :doc:`Documents can be uploaded from different sources <../chapters/sources>`. + + - Local file or server side file uploads, multifunctional copier, or even via + email. + +- Batch uploads. + + - Many documents can be upload in a single action. + - Clone a document's metadata for speedier uploads and eliminate repetitive + data entry. + +- Previews for many file formats. + + - Mayan EDMS provides image preview generation for many popular file + formats. + +- Office document format support. + + - Mayan EDMS can detect the presence of Libre Office and use it to support + word processing files, spreadsheets and presentations. + +- Full text searching. + + - Documents can be searched by their text content, their metadata or any other + file attribute such as name, extension, etc. + +- :doc:`Configurable document grouping <../parts/categorization>`. + + - Automatic linking of documents based on metadata values or document + properties. + +- :doc:`Advanced access control system <../chapters/permissions>`. + + - Role based access control. It is possible to create an unlimited amount + of different roles not being restricted to the traditional admin, + operator, guest paradigm. + - There is a permission for every atomic operation performed by users. + +- Multi page document support. + + - Multiple page PDF and TIFF files are supported. + +- :doc:`Automatic OCR processing <../chapters/ocr_backend>`. + + - The task of transcribing text from documents via OCR can be distributed + among several physical or virtual computers to decrease load and increase + availability. + - The current language of the document is passed to the corresponding OCR + engine to increase the text recognition rate. + +- Multilingual user interface. + + - Mayan EDMS being written using the Django_ framework, can be translated + to practically any language spoken in the world. For a list of translated + languages have a look at the Transifex_ project location. + +- :doc:`Plugable storage backends <../parts/storage>`. + + - It is very easy to use 3rd party plugins such as the ones available for + Amazon EC2. + +- :doc:`Color coded tags <../chapters/tags>`. + + - Labeled and color coded tags can be assigned for intuitive recognition. + +- :doc:`Workflows <../chapters/workflows>`. + + - Keep track of the state of documents, along with the log of the previous + state changes. + + +.. _`Dublin core`: http://dublincore.org/metadata-basics/ +.. _Django: https://www.djangoproject.com/ +.. _Transifex: https://www.transifex.com/projects/p/mayan-edms/ diff --git a/docs/topics/getting_started.rst b/docs/parts/getting_started.txt similarity index 69% rename from docs/topics/getting_started.rst rename to docs/parts/getting_started.txt index 75ff46a808..01d9779e47 100644 --- a/docs/topics/getting_started.rst +++ b/docs/parts/getting_started.txt @@ -1,13 +1,13 @@ -############### +=============== Getting started -############### +=============== These are the basic concepts you need to understand to start using Mayan EDMS. The absolute minimum setup to start using Mayan EDMS is: -#. A document type -#. A document source to add new documents +#. A document type: :doc:`../chapters/document_types` +#. A document source to add new documents: :doc:`../chapters/sources` that's it! @@ -17,6 +17,10 @@ installation. So you don't need to do anything more to start adding documents right now, however take your time reading the information below to get a deeper understanding about how these concepts work. -.. include:: ../chapters/document_types.rst -.. include:: ../chapters/sources.rst + +.. toctree:: + :hidden: + + ../chapters/document_types + ../chapters/sources diff --git a/docs/topics/installation.rst b/docs/parts/installation.txt similarity index 56% rename from docs/topics/installation.rst rename to docs/parts/installation.txt index 4695fa3421..b25e6054a6 100644 --- a/docs/topics/installation.rst +++ b/docs/parts/installation.txt @@ -1,48 +1,51 @@ -############ +============ Installation -############ +============ The easiest way to use Mayan EDMS is by using the official Docker_ image. Make sure Docker is properly installed and working before attempting to install Mayan EDMS. -***************************** Minimum hardware requirements -***************************** +============================= - 2 Gigabytes of RAM (1 Gigabyte if OCR is turned off). - Multiple core CPU (64 bit, faster than 1 GHz recommended). - Unix-like operating system like GNU/Linux. For other operating systems user container technologies like Docker or virtual machines. -**************** -Docker procedure -**************** + +Installation methods +==================== + +Docker +------ Docker is a computer program that performs operating-system-level virtualization also known as containerization. It allows independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines (VMs). -Docker can be installed using their automated script:: +- :ref:`docker_install` - wget -qO- https://get.docker.com/ | sh +.. toctree:: + :hidden: -This installs the latest versions of Docker. If you don't want run an automated -script follow the instructions outlined in their documentation: https://docs.docker.com/install/ + ../chapters/docker/install_simple -Once the Docker installation is finished, proceed to the link below to install -the Docker image for Mayan EDMS. -Docker image chapter: :ref:`docker_install` - -******************* Direct installation -******************* +------------------- For users with knowledge of Python, Django, Ubuntu, and databases. -Deployments chapter: :doc:`../chapters/deploying` +- :doc:`../chapters/deploying` + + +.. toctree:: + :hidden: + + ../chapters/deploying .. _Docker: https://www.docker.com/ diff --git a/docs/topics/license.rst b/docs/parts/license.txt similarity index 84% rename from docs/topics/license.rst rename to docs/parts/license.txt index e225b0a3ff..87f20c2da0 100644 --- a/docs/topics/license.rst +++ b/docs/parts/license.txt @@ -1,6 +1,6 @@ -####### +======= License -####### +======= Mayan EDMS is distributed under the `Apache 2.0 License`_. The complete license terms are included below. @@ -8,8 +8,7 @@ The complete license terms are included below. .. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt -************* License terms -************* +============= .. include:: ../../LICENSE diff --git a/docs/parts/settings.txt b/docs/parts/settings.txt new file mode 100644 index 0000000000..d5c44397eb --- /dev/null +++ b/docs/parts/settings.txt @@ -0,0 +1,4 @@ +.. toctree:: + :hidden: + + ../chapters/settings diff --git a/docs/parts/storage.txt b/docs/parts/storage.txt new file mode 100644 index 0000000000..208a9ce81b --- /dev/null +++ b/docs/parts/storage.txt @@ -0,0 +1,15 @@ +======= +Storage +======= + +Mayan EDMS stores documents in their original file format only changing the +filename to avoid collision. By default, documents files are stored in the +same filesystem as the program code but by using different drivers, these +can also be placed in other storage systems like object storage. + +- :doc:`../chapters/file_storage` + +.. toctree:: + :hidden: + + ../chapters/file_storage diff --git a/docs/topics/troubleshooting.rst b/docs/parts/troubleshooting.txt similarity index 73% rename from docs/topics/troubleshooting.rst rename to docs/parts/troubleshooting.txt index 71cd767e37..17d78e3482 100644 --- a/docs/topics/troubleshooting.rst +++ b/docs/parts/troubleshooting.txt @@ -1,14 +1,13 @@ -############### +=============== Troubleshooting -############### +=============== -******** Database -******** +======== MySQL error: ``OperationalError: (1267, "Illegal mix of collations (latin1_swedish_ci, IMPLICIT) and (utf8_general_ci, COERCIBLE) for operation '='”)`` -======================================================================================================================================================= +------------------------------------------------------------------------------------------------------------------------------------------------------- :: @@ -22,11 +21,11 @@ MySQL error: ``OperationalError: (1267, "Illegal mix of collations (latin1_swedi References: -* http://stackoverflow.com/questions/1073295/django-character-set-with-mysql-weirdness +- http://stackoverflow.com/questions/1073295/django-character-set-with-mysql-weirdness MySQL error: ``Incorrect string value: `'xE2x80x95rs6…'` for column `'content'` at row 1`` -========================================================================================== +------------------------------------------------------------------------------------------ When using MySQL and doing OCR on languages other than English @@ -35,19 +34,19 @@ Use utf-8 collation on MySQL server, or at least in table References: -* http://groups.google.com/group/django-users/browse_thread/thread/429447086fca6412 -* http://markmail.org/message/bqajx2utvmtriixi +- http://groups.google.com/group/django-users/browse_thread/thread/429447086fca6412 +- http://markmail.org/message/bqajx2utvmtriixi MySQL error: ``Error "django.db.utils.IntegrityError IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`…`.`…`, CONSTRAINT `…_refs_id_b0252274` FOREIGN KEY (`…`) REFERENCES `…` (`…`))')`` -=================================================================================================================================================================================================================================== +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Solution: Convert all MySQL tables to the same type, either all MyISAM or InnoDB PostgreSQL error: ``OperationalError: FATAL: sorry, too many clients already`` -=============================================================================== +------------------------------------------------------------------------------- Set ``MAYAN_DATABASE_CONN_MAX_AGE`` to 0 @@ -64,12 +63,11 @@ References: - https://github.com/benoitc/gunicorn/issues/996 -****** Docker -****** +====== MAYAN_APT_INSTALLS does not work for Archlinux with kernels > 4.14 -================================================================== +------------------------------------------------------------------ This is caused by a change from kernel 4.18 - 4.19. Metacopy on these kernels is set to yes in archlinux kernels (/sys/module/overlay/parameters/metacopy) @@ -81,19 +79,18 @@ The workaround is to disable metacopy:: References: -* https://bbs.archlinux.org/viewtopic.php?id=241866 -* https://www.spinics.net/lists/linux-unionfs/msg06316.html +- https://bbs.archlinux.org/viewtopic.php?id=241866 +- https://www.spinics.net/lists/linux-unionfs/msg06316.html -********* Passwords -********* +========= .. _troubleshooting-admin-password: Admin password reset -==================== +-------------------- To reset the password of the admin account use the following command:: @@ -125,7 +122,7 @@ And then execute the command:: .. _troubleshooting-autoadmin-account: Missing automatic admin account after installation -================================================== +-------------------------------------------------- This is caused when the ``initialsetup`` command is interrupted as the admin user is created outside of the database migrations. @@ -156,12 +153,11 @@ And then execute the command:: |MAYAN_BIN| createsuperuser -************ Watchfolders -************ +============ Incomplete files uploaded -========================= +------------------------- To avoid uploading files are they are being copied to the watchfolder, copy the files to a temporary directory on the same partition as the watchfolder first. @@ -169,15 +165,68 @@ Then move the files to the watchfolder. The move will be executed as an atomic operation and will prevent the files to be uploaded in the middle of the copying process. -************ + +The watched folder feature is not working +----------------------------------------- + +Make sure that the Celery BEAT scheduler is running correctly as it is the +element that triggers the periodic tasks. Check that the user running the Mayan +EDMS services has read and write permissions for the watch folder. + + Dependencies -************ +============ Error: ``unable to execute 'x86_64-linux-gnu-gcc': No such file or directory`` -============================================================================== +------------------------------------------------------------------------------ This happens when using the ``MAYAN_APT_INSTALLS`` feature. It means that the ``GCC`` package is required to compile the packages specified with ``MAYAN_APT_INSTALLS``. Solution: Include ``gcc`` in the list of packages specified with ``MAYAN_APT_INSTALLS``. + + +Static files +============ + +Mayan EDMS installed correctly and works, but static files are not served +------------------------------------------------------------------------- + +Django's development server doesn't serve static files unless the DEBUG option +is set to True, this mode of operation should only be used for development or +testing. For production deployments the management command:: + + $ mayan-edms.py preparestatic + +should be used and the resulting static folder served from a webserver. +For more information check the +:django-docs:`howto/static-files/` + + +Other +===== + +File system links not showing when serving content with ``Samba`` +----------------------------------------------------------------- + +Disable unix extensions in the [global] section and enable wide links for the file serving share + +Example:: + + [global] + unix extensions = no + + ... + + [digitalizacion] + path = /var/local/mayan + guest ok = yes + read only = yes + wide links = yes + follow symlinks = yes + + +Reference: + +- http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html diff --git a/docs/releases/0.10.1.rst b/docs/releases/0.10.1.txt similarity index 100% rename from docs/releases/0.10.1.rst rename to docs/releases/0.10.1.txt diff --git a/docs/releases/0.10.rst b/docs/releases/0.10.txt similarity index 100% rename from docs/releases/0.10.rst rename to docs/releases/0.10.txt diff --git a/docs/releases/0.11.1.rst b/docs/releases/0.11.1.txt similarity index 100% rename from docs/releases/0.11.1.rst rename to docs/releases/0.11.1.txt diff --git a/docs/releases/0.11.rst b/docs/releases/0.11.txt similarity index 100% rename from docs/releases/0.11.rst rename to docs/releases/0.11.txt diff --git a/docs/releases/0.12.1.rst b/docs/releases/0.12.1.txt similarity index 100% rename from docs/releases/0.12.1.rst rename to docs/releases/0.12.1.txt diff --git a/docs/releases/0.12.2.rst b/docs/releases/0.12.2.txt similarity index 100% rename from docs/releases/0.12.2.rst rename to docs/releases/0.12.2.txt diff --git a/docs/releases/0.12.rst b/docs/releases/0.12.txt similarity index 99% rename from docs/releases/0.12.rst rename to docs/releases/0.12.txt index bc18b14e02..7def3821ce 100644 --- a/docs/releases/0.12.rst +++ b/docs/releases/0.12.txt @@ -120,7 +120,7 @@ in the Initial data loading chapter. Refactored document indexing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -:doc:`The document indexing <../chapters/indexes>` functionality has been +:doc:`The document indexing <../chapters/indexes/index>` functionality has been improved and moved from experimental stage to beta stage. Index configuration menus are now available on the ``Setup`` menu and allows administrators to create skeleton trees that will diff --git a/docs/releases/0.13.rst b/docs/releases/0.13.txt similarity index 100% rename from docs/releases/0.13.rst rename to docs/releases/0.13.txt diff --git a/docs/releases/0.5.1.rst b/docs/releases/0.5.1.txt similarity index 100% rename from docs/releases/0.5.1.rst rename to docs/releases/0.5.1.txt diff --git a/docs/releases/0.5.rst b/docs/releases/0.5.txt similarity index 100% rename from docs/releases/0.5.rst rename to docs/releases/0.5.txt diff --git a/docs/releases/0.7.3.rst b/docs/releases/0.7.3.txt similarity index 100% rename from docs/releases/0.7.3.rst rename to docs/releases/0.7.3.txt diff --git a/docs/releases/0.7.4.rst b/docs/releases/0.7.4.txt similarity index 100% rename from docs/releases/0.7.4.rst rename to docs/releases/0.7.4.txt diff --git a/docs/releases/0.7.5.rst b/docs/releases/0.7.5.txt similarity index 100% rename from docs/releases/0.7.5.rst rename to docs/releases/0.7.5.txt diff --git a/docs/releases/0.7.6.rst b/docs/releases/0.7.6.txt similarity index 100% rename from docs/releases/0.7.6.rst rename to docs/releases/0.7.6.txt diff --git a/docs/releases/0.7.rst b/docs/releases/0.7.txt similarity index 100% rename from docs/releases/0.7.rst rename to docs/releases/0.7.txt diff --git a/docs/releases/0.8.1.rst b/docs/releases/0.8.1.txt similarity index 100% rename from docs/releases/0.8.1.rst rename to docs/releases/0.8.1.txt diff --git a/docs/releases/0.8.2.rst b/docs/releases/0.8.2.txt similarity index 100% rename from docs/releases/0.8.2.rst rename to docs/releases/0.8.2.txt diff --git a/docs/releases/0.8.3.rst b/docs/releases/0.8.3.txt similarity index 100% rename from docs/releases/0.8.3.rst rename to docs/releases/0.8.3.txt diff --git a/docs/releases/0.8.rst b/docs/releases/0.8.txt similarity index 100% rename from docs/releases/0.8.rst rename to docs/releases/0.8.txt diff --git a/docs/releases/0.9.1.rst b/docs/releases/0.9.1.txt similarity index 100% rename from docs/releases/0.9.1.rst rename to docs/releases/0.9.1.txt diff --git a/docs/releases/0.9.rst b/docs/releases/0.9.txt similarity index 100% rename from docs/releases/0.9.rst rename to docs/releases/0.9.txt diff --git a/docs/releases/1.0.rst b/docs/releases/1.0.txt similarity index 100% rename from docs/releases/1.0.rst rename to docs/releases/1.0.txt diff --git a/docs/releases/1.1.1.rst b/docs/releases/1.1.1.txt similarity index 100% rename from docs/releases/1.1.1.rst rename to docs/releases/1.1.1.txt diff --git a/docs/releases/1.1.rst b/docs/releases/1.1.txt similarity index 100% rename from docs/releases/1.1.rst rename to docs/releases/1.1.txt diff --git a/docs/releases/2.0.1.rst b/docs/releases/2.0.1.txt similarity index 100% rename from docs/releases/2.0.1.rst rename to docs/releases/2.0.1.txt diff --git a/docs/releases/2.0.2.rst b/docs/releases/2.0.2.txt similarity index 100% rename from docs/releases/2.0.2.rst rename to docs/releases/2.0.2.txt diff --git a/docs/releases/2.0.rst b/docs/releases/2.0.txt similarity index 100% rename from docs/releases/2.0.rst rename to docs/releases/2.0.txt diff --git a/docs/releases/2.1.1.rst b/docs/releases/2.1.1.txt similarity index 100% rename from docs/releases/2.1.1.rst rename to docs/releases/2.1.1.txt diff --git a/docs/releases/2.1.10.rst b/docs/releases/2.1.10.txt similarity index 100% rename from docs/releases/2.1.10.rst rename to docs/releases/2.1.10.txt diff --git a/docs/releases/2.1.11.rst b/docs/releases/2.1.11.txt similarity index 100% rename from docs/releases/2.1.11.rst rename to docs/releases/2.1.11.txt diff --git a/docs/releases/2.1.2.rst b/docs/releases/2.1.2.txt similarity index 100% rename from docs/releases/2.1.2.rst rename to docs/releases/2.1.2.txt diff --git a/docs/releases/2.1.3.rst b/docs/releases/2.1.3.txt similarity index 100% rename from docs/releases/2.1.3.rst rename to docs/releases/2.1.3.txt diff --git a/docs/releases/2.1.4.rst b/docs/releases/2.1.4.txt similarity index 100% rename from docs/releases/2.1.4.rst rename to docs/releases/2.1.4.txt diff --git a/docs/releases/2.1.5.rst b/docs/releases/2.1.5.txt similarity index 100% rename from docs/releases/2.1.5.rst rename to docs/releases/2.1.5.txt diff --git a/docs/releases/2.1.6.rst b/docs/releases/2.1.6.txt similarity index 100% rename from docs/releases/2.1.6.rst rename to docs/releases/2.1.6.txt diff --git a/docs/releases/2.1.7.rst b/docs/releases/2.1.7.txt similarity index 100% rename from docs/releases/2.1.7.rst rename to docs/releases/2.1.7.txt diff --git a/docs/releases/2.1.8.rst b/docs/releases/2.1.8.txt similarity index 100% rename from docs/releases/2.1.8.rst rename to docs/releases/2.1.8.txt diff --git a/docs/releases/2.1.9.rst b/docs/releases/2.1.9.txt similarity index 100% rename from docs/releases/2.1.9.rst rename to docs/releases/2.1.9.txt diff --git a/docs/releases/2.1.rst b/docs/releases/2.1.txt similarity index 100% rename from docs/releases/2.1.rst rename to docs/releases/2.1.txt diff --git a/docs/releases/2.2.rst b/docs/releases/2.2.txt similarity index 100% rename from docs/releases/2.2.rst rename to docs/releases/2.2.txt diff --git a/docs/releases/2.3.rst b/docs/releases/2.3.txt similarity index 100% rename from docs/releases/2.3.rst rename to docs/releases/2.3.txt diff --git a/docs/releases/2.4.rst b/docs/releases/2.4.txt similarity index 100% rename from docs/releases/2.4.rst rename to docs/releases/2.4.txt diff --git a/docs/releases/2.5.1.rst b/docs/releases/2.5.1.txt similarity index 100% rename from docs/releases/2.5.1.rst rename to docs/releases/2.5.1.txt diff --git a/docs/releases/2.5.2.rst b/docs/releases/2.5.2.txt similarity index 100% rename from docs/releases/2.5.2.rst rename to docs/releases/2.5.2.txt diff --git a/docs/releases/2.5.rst b/docs/releases/2.5.txt similarity index 100% rename from docs/releases/2.5.rst rename to docs/releases/2.5.txt diff --git a/docs/releases/2.6.1.rst b/docs/releases/2.6.1.txt similarity index 100% rename from docs/releases/2.6.1.rst rename to docs/releases/2.6.1.txt diff --git a/docs/releases/2.6.2.rst b/docs/releases/2.6.2.txt similarity index 100% rename from docs/releases/2.6.2.rst rename to docs/releases/2.6.2.txt diff --git a/docs/releases/2.6.3.rst b/docs/releases/2.6.3.txt similarity index 100% rename from docs/releases/2.6.3.rst rename to docs/releases/2.6.3.txt diff --git a/docs/releases/2.6.4.rst b/docs/releases/2.6.4.txt similarity index 100% rename from docs/releases/2.6.4.rst rename to docs/releases/2.6.4.txt diff --git a/docs/releases/2.6.rst b/docs/releases/2.6.txt similarity index 100% rename from docs/releases/2.6.rst rename to docs/releases/2.6.txt diff --git a/docs/releases/2.7.1.rst b/docs/releases/2.7.1.txt similarity index 100% rename from docs/releases/2.7.1.rst rename to docs/releases/2.7.1.txt diff --git a/docs/releases/2.7.2.rst b/docs/releases/2.7.2.txt similarity index 100% rename from docs/releases/2.7.2.rst rename to docs/releases/2.7.2.txt diff --git a/docs/releases/2.7.3.rst b/docs/releases/2.7.3.txt similarity index 100% rename from docs/releases/2.7.3.rst rename to docs/releases/2.7.3.txt diff --git a/docs/releases/2.7.rst b/docs/releases/2.7.txt similarity index 100% rename from docs/releases/2.7.rst rename to docs/releases/2.7.txt diff --git a/docs/releases/3.0.1.rst b/docs/releases/3.0.1.txt similarity index 100% rename from docs/releases/3.0.1.rst rename to docs/releases/3.0.1.txt diff --git a/docs/releases/3.0.2.rst b/docs/releases/3.0.2.txt similarity index 100% rename from docs/releases/3.0.2.rst rename to docs/releases/3.0.2.txt diff --git a/docs/releases/3.0.3.rst b/docs/releases/3.0.3.txt similarity index 100% rename from docs/releases/3.0.3.rst rename to docs/releases/3.0.3.txt diff --git a/docs/releases/3.0.rst b/docs/releases/3.0.txt similarity index 100% rename from docs/releases/3.0.rst rename to docs/releases/3.0.txt diff --git a/docs/releases/3.1.1.rst b/docs/releases/3.1.1.txt similarity index 100% rename from docs/releases/3.1.1.rst rename to docs/releases/3.1.1.txt diff --git a/docs/releases/3.1.10.rst b/docs/releases/3.1.10.txt similarity index 100% rename from docs/releases/3.1.10.rst rename to docs/releases/3.1.10.txt diff --git a/docs/releases/3.1.11.rst b/docs/releases/3.1.11.txt similarity index 100% rename from docs/releases/3.1.11.rst rename to docs/releases/3.1.11.txt diff --git a/docs/releases/3.1.2.rst b/docs/releases/3.1.2.txt similarity index 100% rename from docs/releases/3.1.2.rst rename to docs/releases/3.1.2.txt diff --git a/docs/releases/3.1.3.rst b/docs/releases/3.1.3.txt similarity index 100% rename from docs/releases/3.1.3.rst rename to docs/releases/3.1.3.txt diff --git a/docs/releases/3.1.4.rst b/docs/releases/3.1.4.txt similarity index 100% rename from docs/releases/3.1.4.rst rename to docs/releases/3.1.4.txt diff --git a/docs/releases/3.1.5.rst b/docs/releases/3.1.5.txt similarity index 100% rename from docs/releases/3.1.5.rst rename to docs/releases/3.1.5.txt diff --git a/docs/releases/3.1.6.rst b/docs/releases/3.1.6.txt similarity index 100% rename from docs/releases/3.1.6.rst rename to docs/releases/3.1.6.txt diff --git a/docs/releases/3.1.7.rst b/docs/releases/3.1.7.txt similarity index 100% rename from docs/releases/3.1.7.rst rename to docs/releases/3.1.7.txt diff --git a/docs/releases/3.1.8.rst b/docs/releases/3.1.8.txt similarity index 100% rename from docs/releases/3.1.8.rst rename to docs/releases/3.1.8.txt diff --git a/docs/releases/3.1.9.rst b/docs/releases/3.1.9.txt similarity index 100% rename from docs/releases/3.1.9.rst rename to docs/releases/3.1.9.txt diff --git a/docs/releases/3.1.rst b/docs/releases/3.1.txt similarity index 100% rename from docs/releases/3.1.rst rename to docs/releases/3.1.txt diff --git a/docs/releases/3.2.1.rst b/docs/releases/3.2.1.txt similarity index 100% rename from docs/releases/3.2.1.rst rename to docs/releases/3.2.1.txt diff --git a/docs/releases/3.2.10.rst b/docs/releases/3.2.10.txt similarity index 100% rename from docs/releases/3.2.10.rst rename to docs/releases/3.2.10.txt diff --git a/docs/releases/3.2.11.rst b/docs/releases/3.2.11.txt similarity index 98% rename from docs/releases/3.2.11.rst rename to docs/releases/3.2.11.txt index 4a18350011..2a9449b66e 100644 --- a/docs/releases/3.2.11.rst +++ b/docs/releases/3.2.11.txt @@ -171,5 +171,6 @@ Bugs fixed or issues closed - :gitlab-issue:`688` REST API: Documents are not getting checked in - :forum-topic:`880` "permission denied" error executing post-update "Common Steps" for 3.2.6 +- :forum-topic:`1404` Mayan EDMS 3.2.8 statistics error .. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.2.2.rst b/docs/releases/3.2.2.txt similarity index 100% rename from docs/releases/3.2.2.rst rename to docs/releases/3.2.2.txt diff --git a/docs/releases/3.2.3.rst b/docs/releases/3.2.3.txt similarity index 100% rename from docs/releases/3.2.3.rst rename to docs/releases/3.2.3.txt diff --git a/docs/releases/3.2.4.rst b/docs/releases/3.2.4.txt similarity index 100% rename from docs/releases/3.2.4.rst rename to docs/releases/3.2.4.txt diff --git a/docs/releases/3.2.5.rst b/docs/releases/3.2.5.txt similarity index 100% rename from docs/releases/3.2.5.rst rename to docs/releases/3.2.5.txt diff --git a/docs/releases/3.2.6.rst b/docs/releases/3.2.6.txt similarity index 100% rename from docs/releases/3.2.6.rst rename to docs/releases/3.2.6.txt diff --git a/docs/releases/3.2.7.rst b/docs/releases/3.2.7.txt similarity index 100% rename from docs/releases/3.2.7.rst rename to docs/releases/3.2.7.txt diff --git a/docs/releases/3.2.8.rst b/docs/releases/3.2.8.txt similarity index 100% rename from docs/releases/3.2.8.rst rename to docs/releases/3.2.8.txt diff --git a/docs/releases/3.2.9.rst b/docs/releases/3.2.9.txt similarity index 100% rename from docs/releases/3.2.9.rst rename to docs/releases/3.2.9.txt diff --git a/docs/releases/3.2.rst b/docs/releases/3.2.txt similarity index 100% rename from docs/releases/3.2.rst rename to docs/releases/3.2.txt diff --git a/docs/releases/3.3.1.txt b/docs/releases/3.3.1.txt new file mode 100644 index 0000000000..10c6beff8c --- /dev/null +++ b/docs/releases/3.3.1.txt @@ -0,0 +1,175 @@ +Version 3.3.1 +============= + +Released: December 4, 2019 + + +Changes +------- + + +Dependencies +^^^^^^^^^^^^ + +Update Django to version 1.11.26. + + +Docker installer +^^^^^^^^^^^^^^^^ + +Update the Celery broker environment variable in the docker installer. + + +Documentation +^^^^^^^^^^^^^ + +Add preparestatic command to development deployment documentation. + + +Permissions +^^^^^^^^^^^ + +Change the required permission to view the document parsing error +from "View document parsed content" to "Parse document". This way only +users with the access to affect the parsed content are the only ones +that can view what errors occurred during parsing. + + +Settings + +^^^^^^^^ +Fix error with the command ``savesettings`` when there are no existing config +files. + + +Sources +^^^^^^^ + +Add migration for the ``SOURCES_STAGING_FILE_CACHE_STORAGE_BACKEND_ARGUMENTS`` +setting. + + +User interface +^^^^^^^^^^^^^^ +Fix the username color label on mobile screens. + +Hide the multi item selection help text on mobile screens. + +Remove body spacer HTML and JavaScript. Not needed with the new UI. + + +Removals +-------- + +- HTML auto body spacer feature. + + +Upgrading from a previous version +--------------------------------- + +If installed via Python's PIP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Update the virtualenv to use Python 3:: + + sudo -u mayan virtualenv /opt/mayan-edms -p /usr/bin/python3 + + +#. Remove deprecated requirements:: + + sudo -u mayan curl |SOURCE_CODE_REPOSITORY|raw/master/removals.txt -o /tmp/removals.txt \ + && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + +#. Update the Mayan EDMS Python package:: + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.3.1 + +the requirements will also be updated automatically. + + +Using Git +^^^^^^^^^ + +#. If you installed Mayan EDMS by cloning the Git repository issue the commands:: + + git reset --hard HEAD + git pull + + otherwise download the compressed archived and decompress it overriding the + existing installation. + +#. Remove deprecated requirements:: + + pip uninstall -y -r removals.txt + +#. Next upgrade/add the new requirements:: + + pip install --upgrade -r requirements.txt + + +Common steps +^^^^^^^^^^^^ + +Perform these steps after updating the code from either step above. + +#. Make a backup of your supervisord file:: + + sudo cp |MAYAN_SUPERVISOR_CONF| |MAYAN_SUPERVISOR_CONF|.bck + +#. Update the supervisord configuration file. Replace the environment + variables values show here with your respective settings. This step will refresh + the supervisord configuration file with the new queues and the latest + recommended layout:: + + sudo sh -c "MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord > |MAYAN_SUPERVISOR_CONF|" + + or:: + + sudo sh -c "MAYAN_DATABASES=\"{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}\" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord > |MAYAN_SUPERVISOR_CONF|" + +#. Edit the supervisord configuration file and update any setting specific to your installation:: + + sudo vi |MAYAN_SUPERVISOR_CONF| + +#. Migrate existing database schema with:: + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + or:: + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + +#. Add new static media:: + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`690` Update to 3.3 problem with mayan-edms.py +- :gitlab-issue:`692` Deploying a development version + + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.3.2.txt b/docs/releases/3.3.2.txt new file mode 100644 index 0000000000..d6e398198d --- /dev/null +++ b/docs/releases/3.3.2.txt @@ -0,0 +1,200 @@ +Version 3.3.2 +============= + +Released: December 5, 2019 + + +Changes +------- + + +Documentation +^^^^^^^^^^^^^ + +Improve upgrade and deployment instructions. + + +Settings +^^^^^^^^ + +Improve setting migration method matching. Avoid executing a migrations +for settings with similar but shorter names. + +Fix sources app setting migrations. + +Add OCR app setting migrations. + + +Removals +-------- + +Upgrade instructions using Git. This process of installation is no longer +supported. For building custom installations refer to the +:doc:`../chapters/development/index` chapter. + + +Upgrading process +----------------- + +#. Stop supervisord:: + + sudo systemctl stop supervisor + + +Upgrading from Mayan EDMS 3.2.x +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Install the Python 3 development OS package: + + .. code-block:: bash + + sudo apt-get install python3-dev + + +#. Update the virtualenv to use Python 3: + + .. code-block:: bash + + sudo -u mayan virtualenv --clear /opt/mayan-edms -p /usr/bin/python3 + + +#. Create a home directory for the Mayan EDMS system user: + + .. code-block:: bash + + mkdir /home/mayan + + +#. Grant ownership to the Mayan EDMS system user: + + .. code-block:: bash + + chown mayan:mayan /home/mayan + + +#. Reinstall the Python client for PostgreSQL and Redis: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psycopg2==|PYTHON_PSYCOPG2_VERSION| redis==|PYTHON_REDIS_VERSION| + + .. note:: + + Platforms with the ARM CPU might also need additional requirements: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psutil==|PYTHON_PSUTIL_VERSION| + + +#. Reinstall the Python client for RabbitMQ if you are using RabbitMQ as a broker: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 amqp==|PYTHON_AMQP_VERSION| + + +Upgrade steps from any previous version of Mayan EDMS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Remove deprecated requirements: + + .. code-block:: bash + + sudo -u mayan curl |SOURCE_CODE_REPOSITORY|raw/master/removals.txt -o /tmp/removals.txt \ + && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + + +#. Update the Mayan EDMS Python package: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.3.2 + + the requirements will also be updated automatically. + + +#. Make a backup of your supervisord file: + + .. code-block:: bash + + sudo cp |MAYAN_SUPERVISOR_CONF| |MAYAN_SUPERVISOR_CONF|.bck + + +#. Update the supervisord configuration file. Replace the environment + variables values show here with your respective settings. This step will refresh + the supervisord configuration file with the new queues and the latest + recommended layout: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES=\"{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}\" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + +#. Edit the supervisord configuration file and update any setting specific to your installation: + + .. code-block:: bash + + sudo vi |MAYAN_SUPERVISOR_CONF| + + +#. Migrate existing database schema with: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + +#. Add new static media: + + .. code-block:: bash + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +#. Start supervisord: + + .. code-block:: bash + + sudo systemctl start supervisor + + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`690` Update to 3.3 problem with mayan-edms.py + + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.3.3.txt b/docs/releases/3.3.3.txt new file mode 100644 index 0000000000..4f717a52ed --- /dev/null +++ b/docs/releases/3.3.3.txt @@ -0,0 +1,211 @@ +Version 3.3.3 +============= + +Released: December 5, 2019 + + +Changes +------- + + +Indexing +^^^^^^^^ + +A missed text from the indexing app was marked as translatable. + + +Platform +^^^^^^^^ + +Removed the supervisord PYTHONPATH environment variable expansion. + + +Transformations +^^^^^^^^^^^^^^^ + +Fix transformation label display in the transformation create view. + +Automatically create transformations from the selection form that +doesn't have arguments. + +Add missing message displays for transformation creation error and +non argument transformation creation. + + +Other +^^^^^ + +Don't exit GitLab makefile target if the branch to delete doesn't exist +upstream. + + +Removals +-------- + +- None + + +Upgrading process +----------------- + +#. Stop supervisord:: + + sudo systemctl stop supervisor + + +Upgrading from Mayan EDMS 3.2.x +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Install the Python 3 development OS package: + + .. code-block:: bash + + sudo apt-get install python3-dev + + +#. Update the virtualenv to use Python 3: + + .. code-block:: bash + + sudo -u mayan virtualenv --clear /opt/mayan-edms -p /usr/bin/python3 + + +#. Create a home directory for the Mayan EDMS system user: + + .. code-block:: bash + + mkdir /home/mayan + + +#. Grant ownership to the Mayan EDMS system user: + + .. code-block:: bash + + chown mayan:mayan /home/mayan + +#. Reinstall the Python client for PostgreSQL and Redis: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psycopg2==|PYTHON_PSYCOPG2_VERSION| redis==|PYTHON_REDIS_VERSION| + + .. note:: + + Platforms with the ARM CPU might also need additional requirements: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psutil==|PYTHON_PSUTIL_VERSION| + + +#. Reinstall the Python client for RabbitMQ if you are using RabbitMQ as a broker: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 amqp==|PYTHON_AMQP_VERSION| + + +Upgrade steps from any previous version of Mayan EDMS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Remove deprecated requirements: + + .. code-block:: bash + + sudo -u mayan curl |SOURCE_CODE_REPOSITORY|raw/master/removals.txt -o /tmp/removals.txt \ + && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + + +#. Update the Mayan EDMS Python package: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.3.3 + + the requirements will also be updated automatically. + + +#. Make a backup of your supervisord file: + + .. code-block:: bash + + sudo cp |MAYAN_SUPERVISOR_CONF| |MAYAN_SUPERVISOR_CONF|.bck + + +#. Update the supervisord configuration file. Replace the environment + variables values show here with your respective settings. This step will refresh + the supervisord configuration file with the new queues and the latest + recommended layout: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES=\"{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}\" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + +#. Edit the supervisord configuration file and update any setting specific to your installation: + + .. code-block:: bash + + sudo vi |MAYAN_SUPERVISOR_CONF| + + +#. Migrate existing database schema with: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + +#. Add new static media: + + .. code-block:: bash + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +#. Start supervisord: + + .. code-block:: bash + + sudo systemctl start supervisor + + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`690` Update to 3.3 problem with mayan-edms.py + + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.3.4.txt b/docs/releases/3.3.4.txt new file mode 100644 index 0000000000..16bd8891b6 --- /dev/null +++ b/docs/releases/3.3.4.txt @@ -0,0 +1,249 @@ +Version 3.3.4 +============= + +Released: December 09, 2019 + + +Changes +------- + + +Celery +^^^^^^ + +Switched from ``librabbitmq`` to ``py-amqp``. This library is used to connect +to RabbitMQ and be used as the message broker for the background tasks. +Although the official documentation still lists ``librabbitmq``, maintainers +are recommending users to move to ``py-amqp``. + + +Converter +^^^^^^^^^ + +Fixed the label display of the transformations. The way the +BaseTransformationType metaclass is passed was updated to work on Python 3. + + +Development +^^^^^^^^^^^ + +Updated devpi-server version to 5.3.1. + +Added targets to run staging containers using RabbitMQ as broker. + +Fix docker-runtest-all makefile target. + + +Frontend +^^^^^^^^ + +Changed the ``gunicorn`` worker class to synchronous. This change was made in +the Docker image and is now the worker class for the direct deployment too. +Update the ``supervisord`` config file to activate this change. This solves +spurious HTTP timeout errors caused by Celery's new Redis interface not +working with threaded serverlets. + + +File metadata +^^^^^^^^^^^^^ + +Add locking to the file metadata document processing task. + + +Settings +^^^^^^^^ + +The setting override colums was changed from text to a check mark widget. +This makes it clear when a setting is being overridden by an environment +variable. + +Added icons to the smart settings links. + +Fixed the evaluation priority of the bootstrap settings. This issue was +causing environment variables to be ignored in favor of config file values on +Docker images. + + +User interface +^^^^^^^^^^^^^^ + +Darken content area when opening the mobile menu. + + +Other +^^^^^ + +Don't set SourceColumn to the attribute name when no help text is defined. + + +Removals +-------- + +- None + + +Upgrading process +----------------- + +#. Stop supervisord:: + + sudo systemctl stop supervisor + + +Upgrading from Mayan EDMS 3.2.x +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Install the Python 3 development OS package: + + .. code-block:: bash + + sudo apt-get install python3-dev + + +#. Update the virtualenv to use Python 3: + + .. code-block:: bash + + sudo -u mayan virtualenv --clear /opt/mayan-edms -p /usr/bin/python3 + + +#. Create a home directory for the Mayan EDMS system user: + + .. code-block:: bash + + mkdir /home/mayan + + +#. Grant ownership to the Mayan EDMS system user: + + .. code-block:: bash + + chown mayan:mayan /home/mayan + +#. Reinstall the Python client for PostgreSQL and Redis: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psycopg2==|PYTHON_PSYCOPG2_VERSION| redis==|PYTHON_REDIS_VERSION| + + .. note:: + + Platforms with the ARM CPU might also need additional requirements: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 psutil==|PYTHON_PSUTIL_VERSION| + + +#. Reinstall the Python client for RabbitMQ if you are using RabbitMQ as a broker: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 amqp==|PYTHON_AMQP_VERSION| + + +Upgrade steps from any previous version of Mayan EDMS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Remove deprecated requirements: + + .. code-block:: bash + + sudo -u mayan curl |SOURCE_CODE_REPOSITORY|raw/master/removals.txt -o /tmp/removals.txt \ + && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + + +#. Update the Mayan EDMS Python package: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.3.4 + + the requirements will also be updated automatically. + + +#. Make a backup of your supervisord file: + + .. code-block:: bash + + sudo cp |MAYAN_SUPERVISOR_CONF| |MAYAN_SUPERVISOR_CONF|.bck + + +#. Update the supervisord configuration file. Replace the environment + variables values show here with your respective settings. This step will refresh + the supervisord configuration file with the new queues and the latest + recommended layout: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES=\"{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}\" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord | sudo sh -c "cat > |MAYAN_SUPERVISOR_CONF|" + + +#. Edit the supervisord configuration file and update any setting specific to your installation: + + .. code-block:: bash + + sudo vi |MAYAN_SUPERVISOR_CONF| + + +#. Migrate existing database schema with: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + or: + + .. code-block:: bash + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + +#. Add new static media: + + .. code-block:: bash + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +#. Start supervisord: + + .. code-block:: bash + + sudo systemctl start supervisor + + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`699` 3.3.3 - TypeError: can't pickle memoryview objects +- :gitlab-issue:`702` [Docker] Issue after upgrading to 3.3.3 + + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.3.txt b/docs/releases/3.3.txt new file mode 100644 index 0000000000..862419b70c --- /dev/null +++ b/docs/releases/3.3.txt @@ -0,0 +1,489 @@ +Version 3.3 +=========== + +Released: December 3, 2019 + + +Changes +------- + +Apps +^^^^ + +Three new apps are included in this release. + +The file cache manager app handles filesystem caching in a reusable way. +Each file cache collection also has a maximum size limit. Once this limit +is reached the file cache will automatically delete the oldest entries. +This ensure file caches don't grow infinitely. The document and workflow apps +were updated to use the new file caching. The document image cache defaults +to 500MB and the workflow preview cache defaults to 50MB. These values can be +changed with the ``DOCUMENTS_CACHE_MAXIMUM_SIZE`` and +``WORKFLOW_IMAGE_CACHE_MAXIMUM_SIZE`` settings respectively. + +The web links app allows creating links from documents to external resources. +These links are defined using the template language for variable substitution. +Web links provide a simple and fast to integrate Mayan EDMS with external +systems. + +The document redactions app allows censoring private document information +in a non destructive way. Redactions are applied interactively for a documents +page. Once applied, the area will be obscured to every other part of the system. +This includes the preview and OCR systems. + + +Checkouts +^^^^^^^^^ + +Support was added for checking in and out multiple documents at a time. + + +Converter +^^^^^^^^^ + +The image converter system was updated to support image layers. The first use +of this new capacity is the redactions app. + + +Dashboard +^^^^^^^^^ + +The numeric dashboard widget was updated to display numbers in local +format. This applies to decimal and thousands separators. + + +Dependencies +^^^^^^^^^^^^ + +The command ``installjavascript`` was been renamed to ``installdependencies``. +This name better represents the function of the command. + +The package ``djcelery`` was replaced by the package ``django-celery-beat``. + +Celery was updated to version 4.3.0. This changes some settings: + +- ``MAYAN_BROKER_URL`` to ``MAYAN_CELERY_BROKER_URL`` +- ``MAYAN_CELERY_ALWAYS_EAGER`` to ``MAYAN_CELERY_TASK_ALWAYS_EAGER`` + + +Documents +^^^^^^^^^ + +The dropzone widget is now used for the document version upload form. + +The document trashed event was added. + +Docker +^^^^^^ + +The included Redis server was removed from the Docker image. A separate Redis +container must now be deployed. + +Support for PIP proxying during build was added. Can be used with the local +devpi-server or other similar to speed up builds. + +Celery flower was added to the Docker image. This is Celery's recommended +task monitor tool. + +Several entrypoint commands were added. These are ``run_celery``, +``run_frontend``, ``run_tests``, ``run_worker``. These commands allow +running containers with a specific purpose. Adding more containers with the +``run_worker`` command is a simple way to scale up an existing installation. + +All Docker scripts were updated to use the Alpine Linux versions of PostgreSQL +and Redis. + +Added a ``run_command`` to the Docker entrypoint to run arbitrary Mayan +management commands. This avoids having to use Docker's ``exec`` command. + +It is now possible to specify the queue list for the ``run_worker`` Docker +command. The command accepts one of two environment variables: +``MAYAN_WORKER_NAME`` or ``MAYAN_QUEUE_LIST``. These environment variables +are only read by the ``run_worker`` command. They are not used by the rest of +the image or other commands. + +The installation procedure was updated to use two Redis databases. One for +the message broker, and the other to store task results. + +The default fast and medium worker concurrency was set to 0 (auto scaling). + + +Documentation +^^^^^^^^^^^^^ + +The documentation building dependencies are now automated as the rest of the +system dependencies. + +The Sphinx sitemap extension was added to allow search engines to index all +the pages of the built documentation. + + +File metadata +^^^^^^^^^^^^^ + +Support was added for wildcard MIME type associations for the file metadata +drivers. + +The ``EXIFTOOL`` driver was updated to run for all documents regardless of MIME +type. Even with non image documents, this driver still provides some useful +file information. + + +Indexing +^^^^^^^^ + +An index reset tool was added. This tool erases the entire index instance, and +allows user to then rebuild a clean index from scratch. + +A document template sandbox feature was added. This new feature allow testing +templates against a specify document. + + +Lock manager +^^^^^^^^^^^^ + +A distributed Redis lock backend was added to the lock manager app. This lock +helps keep multiple Mayan EDMS instances synchronized, even if they are running +on different hosts. This new lock requires one argument: ``redis_url``. + +The ``redis_url`` argument must be added to the new ``LOCK_MANAGER_BACKEND_ARGUMENTS`` +setting. + +Example:: + + LOCK_MANAGER_BACKEND_ARGUMENTS='{"redis_url": "redis://127.0.0.1:6379/2"}' + + +Mailing +^^^^^^^ + +The ``DjangoSMTP`` mailer password field size was increased to 192 characters. + + +Permissions +^^^^^^^^^^^ + +The permission "Execute document tools" can now be granted via ACL. This +allows giving access to roles to document tools without granting the permission +globally. + + +Python 3 +^^^^^^^^ + +The Docker image was updated to use Python 3. The documentation was also updated +to use Python 3. + + + +REST API +^^^^^^^^ + +API endpoints were added to the document signatures app. + +An API endpoint to the a document's type was added. + +The OCR API submit endpoint URL was changed from:: + + documents/{pk}/submit + +to:: + + documents/{pk}/ocr/submit + + +Search +^^^^^^ + +It is now possible to disable the simple search via the new +``SEARCH_DISABLE_SIMPLE_SEARCH`` setting. + + +Settings +^^^^^^^^ + +Support for setting migrations was added. This feature will reduce the number +of manual configuration file updates needed between upgrades. + +Support for quoted configuration entries was removed. Quoted settings must now +be specified as normal nested dictionaries. Settings affected: + + - ``COMMON_SHARED_STORAGE_ARGUMENTS`` + - ``CONVERTER_GRAPHICS_BACKEND_ARGUMENTS`` + - ``DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS`` + - ``DOCUMENTS_STORAGE_BACKEND_ARGUMENTS`` + - ``FILE_METADATA_DRIVERS_ARGUMENTS`` + - ``SIGNATURES_STORAGE_BACKEND_ARGUMENTS`` + +However migrations were added for these settings and most users will not notice +any change. + +Support was added to allow user-specified location for the configuration file +with the ``CONFIGURATION_FILEPATH`` (``MAYAN_CONFIGURATION_FILEPATH environment variable``), +and ``CONFIGURATION_LAST_GOOD_FILEPATH`` (``MAYAN_CONFIGURATION_LAST_GOOD_FILEPATH`` +environment variable) settings. This allows setting the location of the +configuration file independently of the ``MEDIA_ROOT`` setting. + +Multi database configuration is now supported. To specify multiple databases, +use the new ``MAYAN_DATABASES`` environment variable. This new setting more +closely mirrors the upstream behavior of Django. + +Example:: + + MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" + +This is the same as passing the environment variables:: + + MAYAN_DATABASE_ENGINE=django.db.backends.postgresql + MAYAN_DATABASE_NAME=mayan + MAYAN_DATABASE_PASSWORD=mayanuserpass + MAYAN_DATABASE_NAME=mayan + MAYAN_DATABASE_HOST=127.0.0.1 + +This method allows specifying multiple databases such as when using replication +or sharding. It also allows for null entries such as when using Linux sockets. + +Both methods (``MAYAN_DATABASE_`` prefixed entries, and single ``MAYAN_DATABASES``) +are supported. + + +Smart links +^^^^^^^^^^^ + +Support for ACLs was added to smart links. + + +Sources +^^^^^^^ + +The IMAP source was updated to work using message UIDs instead of message index. +This makes the IMAP email source for resilient and its email processing order +predictable. + +Support was also added for custom IMAP search criteria. By default ``NOT DELETED`` +is used to process non-deleted messages. + +The IMAP source can now also execute custom ``IMAP STORE`` commands on processed +messages. The command defaults to ``+FLAGS (\\Deleted)``. + +After processing IMAP message it is now possible to specify a destination +mailbox. This allows keeping processed email instead of just deleting them. + +The IMAP expunge command can now be turned on or off. + + +Storage +^^^^^^^ + +The class ``FakeStorageSubclass`` was added. This placeholder class allows +serializing the real storage subclass. This prevents Django's migration +system from confusing path changes as requiring a complete database +migrations. + + +User interface +^^^^^^^^^^^^^^ + +A new vertical main menu was added. The previous main menu is now split into +two menus. One located on the left side for document related links and a new +top bar menu for system and user links. The vertical main menu remain open +even when clicking on items for faster access. Upon a browser refresh, the menu +will also restore its state to match the selected view. + +The icon composition system was expanded to support icon shadows. + +The Select2 widget is now used for the document type selection form. Autocomplete +is enabled for this usage. + +Support was added to display help texts for view columns. By default the help +text of the corresponding model field is used and shown as a tool tip. + +Is is now possible to change the system messages position using the new +``DEFAULT_MESSAGE_POSITION`` setting. The default value is ``top-right``. + + +Workflows +^^^^^^^^^ + +The workflow preview was improved to provide bigger, more readable previews. +The workflow state actions are now included in the preview. + +Support was added for workflow context. Workflow context allows adding +variable and values to a running workflow. These variables can then be used +by the different workflow state actions. + +Fields support was added to the workflow transitions. These allow adding +extra fields to capture user input. The value of the extra fields is added +to the workflow context and it is available to the workflow state actions. + +A new workflow action to send automated emails was added. + +The HTTP POST action received several updates. The first, add authentication +and headers support. The timeout field now supports template for dynamic timeouts. +It also now supports integers, floats, or empty values. + +Another workflow action added is the document sign action. This action will +perform detached or embedded signing of a document. + + +Other +^^^^^ + +- Gunicorn now uses sync workers. +- Remove document image clear link and view. This is now handled by the file + caching app. +- Unify all line endings to be Linux style. +- Improve document version upload form. +- Update label and icon of the document sign form + Label updated from "Save" to "Sign". +- Rename ``document_states/tests/test_workflow_actions.py`` to + ``document_states/tests/base.py``. +- Added ``TestServerTestCaseMixin`` to perform mocked HTTP + requests. +- Improve ``TestModelTestMixin``. Allow specifying a base model. + Fix passing the dynamic ``Meta`` class to the test model. +- Update ``common.http.URL`` to allow passing a query dictionary. + + +Removals +-------- + +- Database conversion. Reason for removal: The database conversions support + provided by this feature (SQLite to PostgreSQL) was being confused with + database migrations and upgrades. + + Database upgrades are the responsibility of the app and the framework. + Database conversions however are not the responsibility of the app (Mayan), + they are the responsibility of the framework. + + Database conversion is outside the scope of what Mayan does but we added + the code, management command, instructions and testing setup to provide + this to our users until the framework (Django) decided to add this + themselves (like they did with migrations). + + Continued confusion about the purpose of the feature and confusion about + how errors with this feature were a reflection of the code quality of + Mayan necessitated the removal of the database conversion feature. + +- Django environ package. +- Task inspection was removed from task manager app. This is now provided by the + Celery Flower project. + + + +Upgrading from a previous version +--------------------------------- + +If installed via Python's PIP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Update the virtualenv to use Python 3:: + + sudo -u mayan virtualenv /opt/mayan-edms -p /usr/bin/python3 + + +#. Remove deprecated requirements:: + + sudo -u mayan curl |SOURCE_CODE_REPOSITORY|raw/master/removals.txt -o /tmp/removals.txt \ + && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + +#. Update the Mayan EDMS Python package:: + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.3 + +the requirements will also be updated automatically. + + +Using Git +^^^^^^^^^ + +#. If you installed Mayan EDMS by cloning the Git repository issue the commands:: + + git reset --hard HEAD + git pull + + otherwise download the compressed archived and decompress it overriding the + existing installation. + +#. Remove deprecated requirements:: + + pip uninstall -y -r removals.txt + +#. Next upgrade/add the new requirements:: + + pip install --upgrade -r requirements.txt + + +Common steps +^^^^^^^^^^^^ + +Perform these steps after updating the code from either step above. + +#. Make a backup of your supervisord file:: + + sudo cp |MAYAN_SUPERVISOR_CONF| |MAYAN_SUPERVISOR_CONF|.bck + +#. Update the supervisord configuration file. Replace the environment + variables values show here with your respective settings. This step will refresh + the supervisord configuration file with the new queues and the latest + recommended layout:: + + sudo sh -c "MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord > |MAYAN_SUPERVISOR_CONF|" + + or:: + + sudo sh -c "MAYAN_DATABASES=\"{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}\" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| platformtemplate supervisord > |MAYAN_SUPERVISOR_CONF|" + +#. Edit the supervisord configuration file and update any setting specific to your installation:: + + sudo vi |MAYAN_SUPERVISOR_CONF| + +#. Migrate existing database schema with:: + + sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \ + MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + or:: + + sudo -u mayan MAYAN_DATABASES="{'default':{'ENGINE':'django.db.backends.postgresql','NAME':'mayan','PASSWORD':'mayanuserpass','USER':'mayan','HOST':'127.0.0.1'}}" \ + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| performupgrade + + +#. Add new static media:: + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`399` Archive of processed e-mails +- :gitlab-issue:`526` RuntimeWarning: Never call result.get() within a task! +- :gitlab-issue:`532` Workflow preview isn't updated right after transitions are modified +- :gitlab-issue:`540` hint-outdated/update documentation +- :gitlab-issue:`594` 3.2b1: Unable to install/run under Python 3.5/3.6/3.7 +- :gitlab-issue:`608` How to know who put a document in trash can? [Video] +- :gitlab-issue:`634` Failing docker entrypoint when using secret config +- :gitlab-issue:`635` Build a docker image for Python3 +- :gitlab-issue:`640` UX: "Toast" Popup position prevents access to actions +- :gitlab-issue:`644` Update sane-utils package in docker image. + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/index.rst b/docs/releases/index.txt similarity index 97% rename from docs/releases/index.rst rename to docs/releases/index.txt index 12ef2717fa..a0000395b7 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.txt @@ -19,7 +19,12 @@ versions of the documentation contain the release notes for any later releases. ********** .. toctree:: :maxdepth: 1 - + + 3.3.4 + 3.3.3 + 3.3.2 + 3.3.1 + 3.3 3.2.11 3.2.10 3.2.9 diff --git a/docs/topics/adding_documents.rst b/docs/topics/adding_documents.rst deleted file mode 100644 index 1f7c4fae9a..0000000000 --- a/docs/topics/adding_documents.rst +++ /dev/null @@ -1,5 +0,0 @@ -################ -Adding documents -################ - -.. include:: ../chapters/sources.rst diff --git a/docs/topics/administration.rst b/docs/topics/administration.rst deleted file mode 100644 index 29899dbf50..0000000000 --- a/docs/topics/administration.rst +++ /dev/null @@ -1,11 +0,0 @@ -############## -Administration -############## - - -.. include:: ../chapters/languages.rst -.. include:: ../chapters/password_reset.rst -.. include:: ../chapters/ocr_backend.rst -.. include:: ../chapters/backups.rst -.. include:: ../chapters/scaling_up.rst -.. include:: ../chapters/database_conversion.rst diff --git a/docs/topics/advanced.rst b/docs/topics/advanced.rst deleted file mode 100644 index 1fb520a6d9..0000000000 --- a/docs/topics/advanced.rst +++ /dev/null @@ -1,11 +0,0 @@ -############### -Advanced topics -############### - - -.. include:: ../chapters/workflows.rst -.. include:: ../chapters/signatures.rst -.. include:: ../chapters/metadata.rst -.. include:: ../chapters/transformations.rst -.. include:: ../chapters/versioning.rst -.. include:: ../chapters/quick_labels.rst diff --git a/docs/topics/categorization.rst b/docs/topics/categorization.rst deleted file mode 100644 index 558f65ece2..0000000000 --- a/docs/topics/categorization.rst +++ /dev/null @@ -1,26 +0,0 @@ -############## -Categorization -############## - -Mayan EDMS several ways to visual organize documents. Document categorization -allows showing users different views of document groups. These are divided -into ones requiring manual maintenance and others that are updated -automatically. - - -************** -Manual methods -************** - -.. include:: ../chapters/document_types.rst -.. include:: ../chapters/cabinets.rst -.. include:: ../chapters/tags.rst - - -***************** -Automatic methods -***************** - -.. include:: ../chapters/indexes.rst -.. include:: ../chapters/smart_links.rst - diff --git a/docs/topics/collaboration.rst b/docs/topics/collaboration.rst deleted file mode 100644 index 172e3e7722..0000000000 --- a/docs/topics/collaboration.rst +++ /dev/null @@ -1,7 +0,0 @@ -############# -Collaboration -############# - - -.. include:: ../chapters/checkouts.rst -.. include:: ../chapters/mailing.rst diff --git a/docs/topics/contact.rst b/docs/topics/contact.rst deleted file mode 100644 index ab228ec403..0000000000 --- a/docs/topics/contact.rst +++ /dev/null @@ -1,47 +0,0 @@ -####### -Contact -####### - - -*** -FAQ -*** - -* Try the :doc:`FAQ ` -- it's got answers to many common questions. - -***** -Forum -***** - -Search for information or post a question, report or feature request at: -https://forum.mayan-edms.com. - -Mayan EDMS developers do their best to reply to basic questions. -Be sure to use the search feature of the forum as some posts may already -contain the answers to your questions. - -******* -Twitter -******* - -Mayan EDMS has an official Twitter account, `@mayanedms -`_, which is used for announcements and occasional -related news. - -**** -Wiki -**** - -A community Wiki is also available for material that doesn't fit in the -document or is being created in a collaborative manner to be added to the -documentation. The Wiki URL is https://wiki.mayan-edms.com - - -******************* -Bugs/ticket tracker -******************* - -Report bugs with Mayan EDMS or search existing ones using GitLab's `ticket tracker`_. - - -.. _ticket tracker: https://gitlab.com/mayan-edms/mayan-edms/issues diff --git a/docs/topics/development.rst b/docs/topics/development.rst deleted file mode 100644 index 33cdf8e0c9..0000000000 --- a/docs/topics/development.rst +++ /dev/null @@ -1,11 +0,0 @@ -############## -For developers -############## - -.. include:: ../chapters/development.rst -.. include:: ../chapters/app_creation.rst -.. include:: ../chapters/upload_wizard.rst -.. include:: ../chapters/translations.rst -.. include:: ../mercs/index.rst -.. include:: ../chapters/caa_entity.rst -.. include:: ../chapters/caa_individual.rst diff --git a/docs/topics/features.rst b/docs/topics/features.rst deleted file mode 100644 index 5a4808e262..0000000000 --- a/docs/topics/features.rst +++ /dev/null @@ -1,107 +0,0 @@ -######## -Features -######## - -* :doc:`Document versioning <../chapters/versioning>`. - - * Store many versions of the same document, download or revert to a previous - version. - -* :doc:`Electronic signature verification <../chapters/signatures>`. - - * Check the authenticity of documents by verifying their embedded - cryptographic signatures or upload detached signatures for document - signed after they were stored. - -* Collaboration tools. - - * Discuss documents, or comment on new versions of a document. - -* Office document format support. - - * Mayan EDMS can detect the presence of Libre Office and use it to support - word processing files, spreadsheets and presentations. - -* User defined metadata fields. - - * Several metadata fields can be matched to a document type as per technical, - legal or structural requirements such as the `Dublin core`_. - -* Dynamic default values for metadata. - - * Metadata fields can have an initial value, which can be static or determined - by a template code snippet provided by the user. - -* Documents can be uploaded from different sources. - - * Local file or server side file uploads, multifunctional copier, or even via - email. - -* Batch upload many documents with the same metadata. - - * Clone a document's metadata for speedier uploads and eliminate repetitive - data entry. - -* Previews for many file formats. - - * Mayan EDMS provides image preview generation for many popular file - formats. - -* Full text searching. - - * Documents can be searched by their text content, their metadata or any other - file attribute such as name, extension, etc. - -* Configurable document grouping. - - * Automatic linking of documents based on metadata values or document - properties. - -* :doc:`Roles support <../chapters/permissions>`. - - * It is possible to create an unlimited amount of different roles not being - restricted to the traditional admin, operator, guest paradigm. - -* :doc:`Fine grained permissions system <../chapters/permissions>`. - - * There is a permission for every atomic operation performed by users. - -* Multi page document support. - - * Multiple page PDF and TIFF files are supported. - -* Automatic OCR processing. - - * The task of transcribing text from documents via OCR can be distributed - among several physical or virtual computers to decrease load and increase - availability. - -* Multilingual user interface. - - * Mayan EDMS being written using the Django_ framework, can be translated - to practically any language spoken in the world. For a list of translated - languages have a look at the Transifex_ project location. - -* Multilingual OCR support. - - * The current language of the document is passed to the corresponding OCR - engine to increase the text recognition rate. - -* :doc:`Plugable storage backends <../chapters/file_storage>`. - - * It is very easy to use 3rd party plugins such as the ones available for - Amazon EC2. - -* :doc:`Color coded tags <../chapters/tags>`. - - * Labeled and color coded tags can be assigned for intuitive recognition. - -* Workflows. - - * Keep track of the state of documents, along with the log of the previous - state changes. - - -.. _`Dublin core`: http://dublincore.org/metadata-basics/ -.. _Django: https://www.djangoproject.com/ -.. _Transifex: https://www.transifex.com/projects/p/mayan-edms/ diff --git a/docs/topics/integration.rst b/docs/topics/integration.rst deleted file mode 100644 index bb5c25b519..0000000000 --- a/docs/topics/integration.rst +++ /dev/null @@ -1,6 +0,0 @@ -########### -Integration -########### - - -.. include:: ../chapters/api.rst diff --git a/docs/topics/settings.rst b/docs/topics/settings.rst deleted file mode 100644 index 9ec0fe389d..0000000000 --- a/docs/topics/settings.rst +++ /dev/null @@ -1 +0,0 @@ -.. include:: ../chapters/settings.rst diff --git a/docs/topics/storage.rst b/docs/topics/storage.rst deleted file mode 100644 index 218138956a..0000000000 --- a/docs/topics/storage.rst +++ /dev/null @@ -1,10 +0,0 @@ -####### -Storage -####### - -Mayan EDMS stores documents in their original file format only changing the -filename to avoid collision. - - -.. include:: ../chapters/file_storage.rst -.. include:: ../chapters/object_storage.rst diff --git a/docs/topics/docker.rst b/docs/unsorted/docker.rst similarity index 100% rename from docs/topics/docker.rst rename to docs/unsorted/docker.rst diff --git a/docs/utils.py b/docs/utils.py index adabac56fc..571327dec2 100644 --- a/docs/utils.py +++ b/docs/utils.py @@ -30,26 +30,44 @@ def generate_substitutions(dictionary): def patch_theme_template(app, templates_path): package_path = Path(sphinx_rtd_theme.__file__) - source_file_path = package_path.parent / 'layout.html' - destination_path = Path(app.srcdir) / templates_path - destination_file_path = destination_path / 'layout.html' + template_files = ('footer.html', 'layout.html',) + replace_list=[ + { + 'filename_pattern': 'footer.html', + 'content_patterns': [ + { + 'search': '{{ _(\'Next\') }}', + 'replace': '{{ next.title }}', + }, + { + 'search': '{{ _(\'Previous\') }}', + 'replace': '{{ prev.title }}', + }, + ] + }, + { + 'filename_pattern': 'layout.html', + 'content_patterns': [ + { + 'search': '\n \n\n
', + 'replace': '{% include "message_area.html" %}\n \n\n
', + }, + ] + } + ] + + for template_file in template_files: + source_file_path = package_path.parent / template_file#'layout.html' + destination_path = Path(app.srcdir) / templates_path + destination_file_path = destination_path / template_file#'layout.html' + + with source_file_path.open(mode='r') as source_file_object: + with destination_file_path.open(mode='w+') as destination_file_object: + shutil.copyfileobj( + fsrc=source_file_object, fdst=destination_file_object + ) - with source_file_path.open(mode='r') as source_file_object: - with destination_file_path.open(mode='w+') as destination_file_object: - shutil.copyfileobj( - fsrc=source_file_object, fdst=destination_file_object - ) patch_files( - path=destination_path, replace_list=[ - { - 'filename_pattern': 'layout.html', - 'content_patterns': [ - { - 'search': '\n \n\n
', - 'replace': '{% include "message_area.html" %}\n \n\n
', - }, - ] - } - ] + path=destination_path, replace_list=replace_list ) diff --git a/mayan/__init__.py b/mayan/__init__.py index a30f829f82..8ecb9928ca 100644 --- a/mayan/__init__.py +++ b/mayan/__init__.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals __title__ = 'Mayan EDMS' -__version__ = '3.2.11' -__build__ = 0x030211 -__build_string__ = 'v3.2.11_Thu Nov 28 12:35:09 2019 -0400' +__version__ = '3.3.4' +__build__ = 0x030304 +__build_string__ = 'v3.3.4_Mon Dec 9 01:58:31 2019 -0400' __django_version__ = '1.11' __author__ = 'Roberto Rosario' __author_email__ = 'roberto.rosario@mayan-edms.com' diff --git a/mayan/apps/acls/api_views.py b/mayan/apps/acls/api_views.py index 3dcb283982..d4e4dc872f 100644 --- a/mayan/apps/acls/api_views.py +++ b/mayan/apps/acls/api_views.py @@ -3,7 +3,7 @@ from __future__ import absolute_import, unicode_literals from django.contrib.contenttypes.models import ContentType from django.shortcuts import get_object_or_404 -from rest_framework import generics +from mayan.apps.rest_api import generics from .models import AccessControlList from .permissions import permission_acl_edit, permission_acl_view diff --git a/mayan/apps/acls/classes.py b/mayan/apps/acls/classes.py index e3c6f40748..898c0f8cfe 100644 --- a/mayan/apps/acls/classes.py +++ b/mayan/apps/acls/classes.py @@ -15,29 +15,12 @@ class ModelPermission(object): _functions = {} _inheritances = {} _inheritances_reverse = {} + _manager_names = {} _registry = {} @classmethod def deregister(cls, model): cls._registry.pop(model, None) - # TODO: Find method to revert the add_to_class('acls'...) - # delattr doesn't work. - - @classmethod - def register(cls, model, permissions): - from django.contrib.contenttypes.fields import GenericRelation - - cls._registry.setdefault(model, []) - for permission in permissions: - cls._registry[model].append(permission) - - AccessControlList = apps.get_model( - app_label='acls', model_name='AccessControlList' - ) - - model.add_to_class( - name='acls', value=GenericRelation(AccessControlList) - ) @classmethod def get_classes(cls, as_content_type=False): @@ -105,8 +88,46 @@ class ModelPermission(object): @classmethod def get_inheritance(cls, model): + # Proxy models get the inheritance from their base model + if model._meta.proxy: + model = model._meta.proxy_for_model + return cls._inheritances[model] + @classmethod + def get_manager(cls, model): + try: + manager_name = cls.get_manager_name(model=model) + except KeyError: + manager_name = None + + if manager_name: + manager = getattr(model, manager_name) + else: + manager = model._meta.default_manager + + return manager + + @classmethod + def get_manager_name(cls, model): + return cls._manager_names[model] + + @classmethod + def register(cls, model, permissions): + from django.contrib.contenttypes.fields import GenericRelation + + cls._registry.setdefault(model, []) + for permission in permissions: + cls._registry[model].append(permission) + + AccessControlList = apps.get_model( + app_label='acls', model_name='AccessControlList' + ) + + model.add_to_class( + name='acls', value=GenericRelation(AccessControlList) + ) + @classmethod def register_function(cls, model, function): cls._functions[model] = function @@ -120,3 +141,7 @@ class ModelPermission(object): cls._inheritances_reverse[model_reverse].append(model) cls._inheritances[model] = related + + @classmethod + def register_manager(cls, model, manager_name): + cls._manager_names[model] = manager_name diff --git a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo index 1a59108470..83a2fec830 100644 Binary files a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po index f67a5f6557..81f67cfb1e 100644 --- a/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "حذف" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "الصلاحيات" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Roles" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo index 9b83d70f9a..2ec44a7bd8 100644 Binary files a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po index f8395c0389..9a4fb60490 100644 --- a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-16 08:27+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-04 16:32+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -20,7 +20,7 @@ msgstr "" #: apps.py:24 links.py:44 msgid "ACLs" -msgstr "ACLs" +msgstr "ACL" #: events.py:8 permissions.py:7 msgid "Access control lists" @@ -34,7 +34,7 @@ msgstr "Новосъздадени ACL" msgid "ACL edited" msgstr "Редактирани ACL" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Роля" @@ -46,29 +46,29 @@ msgstr "Нов ACL" msgid "Delete" msgstr "Изтрийте" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Разрешения" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Обект \"%s\" не е модел и не може да бъде проверен за достъп" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Недостатъчен достъп за: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "достъп вписване" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "достъп вписвания" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Роля \"%(role)s\" разрешение за \"%(object)s\"" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "Отменени разрешения се наследяват от родителския обект или се дават направо на потребител с определена роля и не могат да бъдат премахнати от този изглед. Наследените разрешения трябва да бъдат премахнати от ACL на родителския обект или от определената роля чрез меню Настройки." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Тип обект" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Тип на обекта за който достъпа ще бъде променен" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID на обекта" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Числов показател на обекта, достъпа на който ще бъде променен." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Роли" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Роли, за които достъпа ще бъде променен." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Разрешение за даване/отнемане на/от ролята за обекта избран по-горе." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Даване на достъп" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "Дайте достъп до обекта" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Отнемане на достъп" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "Отменете достъпа до обекта" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Даване достъп към документа" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Отнемане достъп към документа" diff --git a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo index 4e3e974f8d..9f4aad3426 100644 Binary files a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po index be5d809af1..8dd4f5d689 100644 --- a/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/bs_BA/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Uloga" @@ -46,29 +46,29 @@ msgstr "Novi ACL" msgid "Delete" msgstr "Obriši" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Dozvole" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Nedovoljan pristup za:%s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Pristupni unos" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Pristupni unosi" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Uloga \"%(role)s\" dozvole za \"%(object)s\"" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Tip objekta" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Tip objekta za koji će se pristup mijenjati." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID objekta" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Numerički identifikator objekta za koji će se pristup mijenjati." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Role" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Uloge čiji će pristup biti modifikovan." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Dozvole za dodeljivanje / poništavanje / od uloge za gore izabrani objekat." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Dodjeljen pristup" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Opozvati pristup" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/cs/LC_MESSAGES/django.mo index 6df6f43bef..bd6b31b584 100644 Binary files a/mayan/apps/acls/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po b/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po index d89578da4e..d0d31ad9a9 100644 --- a/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-15 16:09+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,7 +35,7 @@ msgstr "ACL vytvořen" msgid "ACL edited" msgstr "ACL upraven" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Role" @@ -47,29 +47,29 @@ msgstr "Nový ACL" msgid "Delete" msgstr "Odstranit" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Práva" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Objekt "%s" není modelem a nelze jej zkontrolovat pro přístup." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Nedostatečný přístup pro: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Přístup k záznamu" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Přístup k položkám" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Role „%(role)s“ má oprávnění „%(object)s“" @@ -158,48 +158,48 @@ msgid "" "menu." msgstr "Zakázaná oprávnění jsou zděděna z nadřazeného objektu nebo přímo udělena roli a nelze je z tohoto pohledu odebrat. Zděděná oprávnění je třeba odebrat z ACL nadřazeného objektu nebo z jeho role prostřednictvím nabídky Nastavení." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Typ objektu" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Typ objektu, pro který bude přístup upraven." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID objektu" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Numerický identifikátor objektu, pro který bude přístup upraven." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Role" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Role, jejichž přístup bude upraven." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Oprávnění udělit / zrušit / z role pro objekt vybraný výše." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Přístup povolen" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Odebrat přístup" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Udělte přístup k dokumentům" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Zrušit přístup k dokumentům" diff --git a/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.mo index 42ad3d3eca..865a23fca3 100644 Binary files a/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.po index 506d465188..ec44b6bad9 100644 --- a/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/da_DK/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rolle" @@ -46,29 +46,29 @@ msgstr "Ny ACL" msgid "Delete" msgstr "Slet" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Tilladelser" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Utilstækkelig adgang for: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Objekttype" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "Objekt ID" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Roller" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Giv tilladelse" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Tilbagekald tilladelse" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo index df90f0e5b8..e30697d1ac 100644 Binary files a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po index 92cb06c225..e1e06bc64d 100644 --- a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-08 19:45+0000\n" -"Last-Translator: Marvin Haschker \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,7 +38,7 @@ msgstr "Zugriffsberechtigung erstellt" msgid "ACL edited" msgstr "Zugriffsberechtigung bearbeitet" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rolle" @@ -50,29 +50,29 @@ msgstr "Neue Berechtigung" msgid "Delete" msgstr "Löschen" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Berechtigungen" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Objekt \"%s\" ist kein Modell und kann nicht auf Zugriffsberechtigungen überprüft werden." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Unzureichende Berechtigung für: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Berechtigungseintrag" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Berechtigungseinträge" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\"" @@ -161,48 +161,48 @@ msgid "" "menu." msgstr "Unzureichende Berechtigungen werden durch ein übergeordnetes Objekt vererbt oder direkt an die Rolle erteilt. Sie können nicht direkt auf diesem Formular bearbeitet werden. Vererbte Berechtigungen müssen auf dem übergeordneten Objekt oder für die Rolle über das Einrichtungsmenü eingestellt werden." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Objekttyp" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Objekttyp für den der Zugang bearbeitet wird." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "Objekt ID" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Numerischer Identifikator des Objekts" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Rollen" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Rollen deren Zugang bearbeitet wird." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Berechtigungen, die der Rolle für das ausgewählte Objekt erteilt oder entzogen werden." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Zugriffsberechtigung erteilen" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Zugriffsberechtigung entziehen" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Dokumentzugriff gewähren" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Dokumentzugriff entziehen" diff --git a/mayan/apps/acls/locale/el/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/el/LC_MESSAGES/django.mo index 97e66a0700..f87686e205 100644 Binary files a/mayan/apps/acls/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/el/LC_MESSAGES/django.po b/mayan/apps/acls/locale/el/LC_MESSAGES/django.po index d357fb34e0..4c3a10a582 100644 --- a/mayan/apps/acls/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Ρόλος" @@ -45,29 +45,29 @@ msgstr "Νέα ΛΕΠ" msgid "Delete" msgstr "Διαγραφή" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Ανεπαρκή δικαιώματα" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Μη επαρκή δικαιώματα πρόσβασης για το: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Δικαιώματα του Ρόλου \"%(role)s\" για \"%(object)s\"" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Τύπος αντικειμένου" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Τύπος του αντικειμένου για το οποίο η πρόσβαση θα τροποποιηθεί." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "Αναγνωριστικό αντικειμένου" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Αριθμητικό αναγνωριστικό του αντικειμένου για το οποίο η πρόσβαση θα τροποποιηθεί." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Ρόλοι" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Ρόλοι των οποιων η πρόσβαση θα τροποποιηθει." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Δικαιώματα προς χορήγηση/ανάληση προς/από τον ρόλο για το ανωτέρω επιλεγμένο αντικείμενο." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Χορήγηση πρόσβασης" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Ανάκληση πρόσβασης" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/en/LC_MESSAGES/django.po b/mayan/apps/acls/locale/en/LC_MESSAGES/django.po index c83f5a3a5a..06306b6087 100644 --- a/mayan/apps/acls/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,47 +156,47 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo index 4389876616..662ccda63a 100644 Binary files a/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/es/LC_MESSAGES/django.po b/mayan/apps/acls/locale/es/LC_MESSAGES/django.po index 776c75d629..328491c445 100644 --- a/mayan/apps/acls/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/es/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:51+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:58+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -36,7 +36,7 @@ msgstr "LCA creada" msgid "ACL edited" msgstr "LCA editada" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rol" @@ -48,29 +48,29 @@ msgstr "Nueva LCA" msgid "Delete" msgstr "Borrar" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permisos" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "El objeto \"%s\"; no es un modelo y no se puede verificar el acceso." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Acceso insuficiente para: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Entrada de acceso" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Entradas de acceso" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\"" @@ -159,48 +159,48 @@ msgid "" "menu." msgstr "Los permisos deshabilitados se heredan de un objeto principal o se otorgan directamente al rol y no se pueden eliminar de esta vista. Los permisos heredados deben eliminarse de la LCA del objeto principal o de su rol a través del menú de Configuración." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Tipo de objeto" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Tipo de objeto para el que se modificará el acceso." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID de objeto" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Identificador numérico del objeto para el que se modificará el acceso." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Roles" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Roles cuyo acceso será modificado." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Permisos para otorgar/revocar a los roles para el objeto seleccionado anteriormente." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Otorgar acceso" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "Conceder acceso a objetos" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Revocar acceso" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "Revocar acceso a objetos" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Otorgar acceso a documento" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Revocar acceso documento" diff --git a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo index 8b71cea1a3..f600c6ab28 100644 Binary files a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po index 3400985e03..2cd947ff1e 100644 --- a/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/fa/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -35,7 +35,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "نقش" @@ -47,29 +47,29 @@ msgstr "دسترسی جدید" msgid "Delete" msgstr "حذف" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "مجوزها" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "کمبود دسترسی برای: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "ورودی دسترسی" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "ورودیهای دسترسی" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "نقش\"%(role)s\" دارای اجازه برای \"%(object)s\"" @@ -158,48 +158,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "نوع شی" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "نوع شی که دسترسی به آن تغییر خواهد کرد." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "شناسه اشیاء" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "شناسه عددی شئی که دسترسی به آن تغییر خواهد کرد." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "نقش ها" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "نقش هایی که دسترسی به آنها تغییر خواهد کرد." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "مجوز برای اعطای / لغو به / از نقش مورد انتخاب شده در بالا." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "دادن دسترسی" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "لغو دسترسی" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo index 867405e99a..cb546cc272 100644 Binary files a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po index 73915ed876..09c8d82ec1 100644 --- a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po @@ -7,14 +7,15 @@ # Christophe CHAUVET , 2015 # Frédéric Sheedy , 2019 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-18 21:00+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-08 18:55+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,7 +39,7 @@ msgstr "Droits créé" msgid "ACL edited" msgstr "Droits modifié" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rôle" @@ -50,29 +51,29 @@ msgstr "Nouveau droit" msgid "Delete" msgstr "Suppression" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Autorisations" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "L'objet \"%s\" n'est pas un modèle et l'accès ne peut pas être vérifié." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Droits d'accès insuffisants pour : %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Autorisation d'accès" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Autorisations d'accès" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Autorisation du rôle \"%(role)s\" pour \"%(object)s\"" @@ -161,48 +162,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Type d'objet" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Type d'objet pour lequel les droits d'accès vont être modifiés." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "Identifiant de l'objet" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Identifiant numérique de l'objet pour lequel les droits d'accès vont être modifiés." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Rôles" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Rôles pour lesquels les droits d'accès vont être modifiés." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Autorisations à accorder/révoquer au rôle pour l'objet sélectionné ci-dessus." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Accorder le droit d'accès" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "Accorder l'accès à l'objet" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Révoquer le droit d'accès" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "Révoquer l'accès à l'objet" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Accorder l'accès au document" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Révoquer l'accès au document" diff --git a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo index 634a08b53f..6d9ebd26f4 100644 Binary files a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po index 4a1270d61b..0acf59f847 100644 --- a/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/hu/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Szerepkör" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "Törlés" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Engedélyek" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Hozzáférési bejegyzés" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Hozzáférési bejegyzések" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Szerepkörök" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo index c3eed44769..70009f8caa 100644 Binary files a/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/id/LC_MESSAGES/django.po b/mayan/apps/acls/locale/id/LC_MESSAGES/django.po index ae58d5e1f9..e550ce2b51 100644 --- a/mayan/apps/acls/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "Hapus" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo index e7e8ac6ae4..6aee578523 100644 Binary files a/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/it/LC_MESSAGES/django.po b/mayan/apps/acls/locale/it/LC_MESSAGES/django.po index b04d404a43..716c0b46cb 100644 --- a/mayan/apps/acls/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/it/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-28 11:33+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,7 +35,7 @@ msgstr "ACL creata" msgid "ACL edited" msgstr "ACL modificata" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Ruolo" @@ -47,29 +47,29 @@ msgstr "Nuova ACL" msgid "Delete" msgstr "Cancella" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permessi" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "L'oggetto \"%s\" non è un modello e su di esso non si può eseguire un controllo accessi." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Permessi insufficienti per: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Voce di accesso" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Voci di accesso" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\"" @@ -158,48 +158,48 @@ msgid "" "menu." msgstr "I permessi disabilitati sono ereditati da un oggetto padre o direttamente concessi al ruolo e non possono essere rimossi da questa schermata. I permessi ereditati vanno rimossi dalle ACL dell'oggetto padre o del ruolo tramite il menù Setup." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Tipo dell'oggetto" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Tipo dell'oggetto per il quale l'accesso sarà modificato" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID dell'oggetto" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Identificativo numerico dell'oggetto per il quale l'accesso sarà modificato" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Ruoli " -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Ruoli il cui accesso sarà modificato" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Permessi da concedere/revocare al ruolo per l'oggetto selezionato" -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Concedi accesso" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Revoca accesso" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Concedi accesso al documento" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Revoca accesso al documento" diff --git a/mayan/apps/acls/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/lv/LC_MESSAGES/django.mo index 89d6babdf5..fd52d3d346 100644 Binary files a/mayan/apps/acls/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/lv/LC_MESSAGES/django.po b/mayan/apps/acls/locale/lv/LC_MESSAGES/django.po index 372251b42c..cd06d29bfb 100644 --- a/mayan/apps/acls/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/lv/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-28 11:16+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-04 06:15+0000\n" "Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "PKS izveidots" msgid "ACL edited" msgstr "PKS rediģēts" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Loma" @@ -46,29 +46,29 @@ msgstr "Jauns PKS" msgid "Delete" msgstr "Dzēst" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Atļaujas" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Objekts \"%s\" nav modelis un tā pieeju nevar pārbaudīt." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Nepietiekama piekļuve pie: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Piekļuves ieraksts" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Piekļuves ieraksti" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Lomas \"%(role)s\" atļaujas priekš \"%(object)s\"" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "Atspējotas atļaujas tiek mantotas no mātes objekta vai tieši piešķirtas lomai, un tās nevar noņemt no šī skata. Mantotās atļaujas ir jānoņem no mātes objekta PKS vai no lomas, izmantojot Setup izvēlni." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Objekta tips" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Objekta, kuram tiks rediģēta piekļuve, tips." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "Objekta ID" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Objekta, kuram tiks rediģēta piekļuve, skaitliskais identifikators." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Lomas" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Lomas, kuru piekļuve tiks mainīta." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Atļaujas piešķirt/atsaukt iepriekš atlasītā objekta lomu." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Piešķirt piekļuvi" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "Piešķirt piekļuvi objektam" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Atsaukt piekļuvi" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "Atsaukt piekļuvi objektam" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Piešķirt piekļuvi dokumentam" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Atsaukt piekļuvi dokumentam" diff --git a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo index f51e286bec..cae52c0c18 100644 Binary files a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po index 79dc2fa7e4..43911f14b9 100644 --- a/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/nl_NL/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -36,7 +36,7 @@ msgstr "Authorisatie Controle Lijst Aangemaakt" msgid "ACL edited" msgstr "Authorisatie Controle Lijst gewijzigd" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Gebruikersrol" @@ -48,29 +48,29 @@ msgstr "Nieuwe authorisatielijst" msgid "Delete" msgstr "Verwijder" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permissies" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Voorwerp \"%s\" is geen model en kan niet aangevinkt worden voor toegang" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Onvoldoende toegang voor: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Authorisatie invoer" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Authorisaties invoer" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Rol \"%(role)s\" permissies voor \"%(object)s\"" @@ -159,48 +159,48 @@ msgid "" "menu." msgstr "Onbeschikbare of uitgeschakelde rechten zijn geërfd van een hoger niveau of direct geven aan de gebruikersrol en kunnen hier niet verwijderd worden. Geërfde rechten moeten verwijderd worden vanaf het hogere niveau of via de gebruikersrol via het Instellingen menu. " -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Objecttype" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Objecttype waarvoor de toegang gewijzigd gaat worden" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "voorwerp identificatie" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Nummer van het voorwerp waarvoor de toegang wordt gewijzigd" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Gebruikersrollen" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Gebruikersrol waarvoor de toegang wordt gewijzigd" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Permissies to geven/verwijderen naar/van de rol voor het geselecteerde object hierboven " -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Geef toegang" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Verwijder toegang" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo index ab7acc71af..fc1e4a0d70 100644 Binary files a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po index 887a57e878..df4d5c0728 100644 --- a/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pl/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-09-23 09:33+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,7 +38,7 @@ msgstr "Utworzono listę ACL" msgid "ACL edited" msgstr "Wyedytowano listę ACL" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rola" @@ -50,29 +50,29 @@ msgstr "Nowa lista ACL" msgid "Delete" msgstr "Usuń" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Uprawnienia" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Obiekt \"%s\" nie jest modelem i nie może być sprawdzony pod kątem dostępu." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Niewystarczający dostęp dla: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Zgłoszenie dostępu" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Zgłoszenia dostępu" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Uprawnienia roli \"%(role)s\" dla obiektu \"%(object)s\"" @@ -161,48 +161,48 @@ msgid "" "menu." msgstr "Wyłączone prawa są dziedziczone z obiektu rodzica lub bezpośrednio nadane dla roli i nie mogą być usunięte w tym widoku. Dziedziczone prawa muszą być usunięte z listy ACL obiektu rodzica lub z roli w menu Ustawień." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Typ obiektu" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Typ obiektu, dla którego dostęp zostanie zmodyfikowany." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID obiektu" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Numeryczny identyfikator obiektu, dla którego dostęp zostanie zmodyfikowany." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Role" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Role, których dostęp zostanie zmodyfikowany." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Uprawnienia do nadawania/odwoływania do/z roli dla obiektu." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Przydziel dostęp" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Zabierz dostęp" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Przydziel dostęp dla dokumentu" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Zabierz dostęp do dokumentu" diff --git a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo index 982de1ae2d..0303de2de2 100644 Binary files a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po index f0411ab1e8..9f5297ba81 100644 --- a/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "Eliminar" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permissões" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Funções" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo index 75e97a697b..b71ffba753 100644 Binary files a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po index 33173b314e..2b958e2cb5 100644 --- a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-27 00:19+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,7 +37,7 @@ msgstr "ACL criada" msgid "ACL edited" msgstr "ACL editada" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Papéis" @@ -49,29 +49,29 @@ msgstr "Nova regra" msgid "Delete" msgstr "Excluir" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permissões" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "O objeto \"1%s\" não é um modelo e não pode ser verificado quanto ao acesso." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Acesso insuficiente para: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Acesso entrada" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Entradas de acesso" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\"" @@ -160,48 +160,48 @@ msgid "" "menu." msgstr "Permissões desabilitadas são herdadas de um objeto pai ou concedidas diretamente à função e não podem ser removidas dessa exibição. As permissões herdadas precisam ser removidas da ACL do objeto pai ou delas através do menu Configuração." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Tipo do objeto" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Tipo do objeto cujo acesso será modificado." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID do objeto" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Identificador numérico do objeto cujo acesso será modificado." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Papéis" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Papéis cujo acesso será modificado." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Permissões a serem concedidas/revogadas para o papel em relação ao objeto selecionado acima." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Conceder acesso" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Revogar acesso" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Conceder acesso ao documento" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Revogar acesso ao documento" diff --git a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo index f091bd4382..7f404fd58a 100644 Binary files a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po index a7e0c4c134..f6ef22dc6a 100644 --- a/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ro_RO/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-18 15:35+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 13:29+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "ACL-ul a fost creat" msgid "ACL edited" msgstr "ACL-ul a fost editat" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rol" @@ -46,29 +46,29 @@ msgstr "ACL nou" msgid "Delete" msgstr "Șterge" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Permisiuni" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "Obiectul \"%s\" nu este un model și nu poate fi verificat pentru acces." -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Acces insuficient pentru: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Înregistrare acces" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Înregistrări de acces" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Permisiunile rolului \"%(role)s\" pentru \"%(object)s\"" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "Permisiunile dezactivate sunt moștenite de la un obiect părinte sau acordate direct rolului și nu pot fi eliminate din această vizualizare. Prerogativele moștenite trebuie să fie eliminate din ACL-ul obiectului părinte sau din rolul acestora prin meniul Setup (Configurare)." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Tipul obiectului" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Tipul obiectului pentru care va fi modificat accesul ." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID obiect" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Identificatorul numeric al obiectului pentru care va fi modificat accesul." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Roluri" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Roluri a căror acces va fi modificat." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Permisiuni de acordare / revocare în / a rolului pentru obiectului selectat mai sus." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Acordă acces" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "Acordă acces la obiect" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Revocă acces" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "Revocați accesul la obiect" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "Acordați acces la documente" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "Revocați accesul la documente" diff --git a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo index 0d8e2fd3e4..235c7398ff 100644 Binary files a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po index 0dc65fa6fa..0077fe9b16 100644 --- a/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Роль" @@ -46,29 +46,29 @@ msgstr "Создать СУД" msgid "Delete" msgstr "Удалить" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Разрешения" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Элемент доступа" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Элементы доступа" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Права роли \"%(role)s\" для \"%(object)s\"" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Роли" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo index 836632814a..0a7f74b6c2 100644 Binary files a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po index dc6ce47fee..2932b08279 100644 --- a/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/sl_SI/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Vloga" @@ -46,29 +46,29 @@ msgstr "Novi ACL" msgid "Delete" msgstr "Izbriši" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "Pravice" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "Nezadosten dostop za: %s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Vstopna točka" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Vstopne točke" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "Vloga »%(role)s« dovoljenja za »%(object)s«" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "Vrsta objekta" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "Vrsta predmeta, za katerega bo dostop spremenjen." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "ID objekta" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "Številčni identifikator predmeta, za katerega bo dostop spremenjen." -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Vloge" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "Vloge, katerih dostop bo spremenjen." -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "Dovoljenja za odobritev/preklic v/iz vlog za zgoraj izbrani objekt." -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "Dovoli dostop" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "Prekliči dostop" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo index 61545448f2..75c36a29a9 100644 Binary files a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po index 58676e04cd..eb9e070ec7 100644 --- a/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/tr_TR/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Rol" @@ -46,29 +46,29 @@ msgstr "Yeni Erişim Kontrol Listesi" msgid "Delete" msgstr "Sil" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "İzinler" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "Erişim Girişi" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "Erişim Girişleri" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "\"%(role)s\" yetkisi \"%(object)s\" için rol" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "Roller" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo index 0bf0632499..b253b5beb3 100644 Binary files a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po index 8ac01ba1b2..5cad7fbe00 100644 --- a/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -33,7 +33,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "" @@ -45,29 +45,29 @@ msgstr "" msgid "Delete" msgstr "" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "" @@ -156,48 +156,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/acls/locale/zh/LC_MESSAGES/django.mo index c92de5b237..d2102bb263 100644 Binary files a/mayan/apps/acls/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/acls/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po b/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po index 0b0e579aee..8157d29ec5 100644 --- a/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -34,7 +34,7 @@ msgstr "" msgid "ACL edited" msgstr "" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "角色" @@ -46,29 +46,29 @@ msgstr "新的访问控制列表" msgid "Delete" msgstr "删除" -#: links.py:49 models.py:45 workflow_actions.py:49 workflow_actions.py:164 +#: links.py:49 models.py:44 workflow_actions.py:48 workflow_actions.py:163 msgid "Permissions" msgstr "权限" -#: managers.py:216 +#: managers.py:231 #, python-format msgid "Object \"%s\" is not a model and cannot be checked for access." msgstr "" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" msgstr "访问权限不足:%s" -#: models.py:57 +#: models.py:56 msgid "Access entry" msgstr "访问条目" -#: models.py:58 +#: models.py:57 msgid "Access entries" msgstr "访问条目" -#: models.py:62 +#: models.py:61 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"" msgstr "%(object)s的角色“%(role)s”的权限" @@ -157,48 +157,48 @@ msgid "" "menu." msgstr "" -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" msgstr "对象类型" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." msgstr "要为其修改访问权限的对象的类型。" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" msgstr "对象ID" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." msgstr "要为其修改访问权限的对象的数字标识符。" -#: workflow_actions.py:43 workflow_actions.py:158 +#: workflow_actions.py:42 workflow_actions.py:157 msgid "Roles" msgstr "角色" -#: workflow_actions.py:45 workflow_actions.py:160 +#: workflow_actions.py:44 workflow_actions.py:159 msgid "Roles whose access will be modified." msgstr "访问权限将被修改的角色。" -#: workflow_actions.py:52 workflow_actions.py:167 +#: workflow_actions.py:51 workflow_actions.py:166 msgid "" "Permissions to grant/revoke to/from the role for the object selected above." msgstr "授予/撤销给上述选定对象角色的权限。" -#: workflow_actions.py:60 -msgid "Grant access" -msgstr "授予访问权限" +#: workflow_actions.py:59 +msgid "Grant object access" +msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "撤消访问权限" +#: workflow_actions.py:142 +msgid "Revoke object access" +msgstr "" -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" msgstr "" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" msgstr "" diff --git a/mayan/apps/acls/managers.py b/mayan/apps/acls/managers.py index 0cb07b5987..5bab247470 100644 --- a/mayan/apps/acls/managers.py +++ b/mayan/apps/acls/managers.py @@ -45,8 +45,8 @@ class AccessControlListManager(models.Manager): # 4: No related field, but has an inherited related field, solved by # recursion, branches to #2 or #3. # 5: Inherited field of a related field - # -- Not addressed yet -- # 6: Inherited field of a related field that is Generic Foreign Key + # -- Not addressed yet -- # 7: Has a related function result = [] @@ -58,10 +58,28 @@ class AccessControlListManager(models.Manager): if isinstance(related_field, GenericForeignKey): # Case 3: Generic Foreign Key, multiple ContentTypes + object # id combinations + # Also handles case #6 using the parent related field + # reference template. + + # Craft a double underscore reference to a previous related + # field in the case where multiple related fields are + # associated. + # Example: object_layer__content_type + recuisive_related_reference = '__'.join(related_field_name.split('__')[0:-1]) + + # If there is at least one parent related field we add a + # double underscore to make it a valid filter template. + if recuisive_related_reference: + recuisive_related_reference = '{}__'.format(recuisive_related_reference) + content_type_object_id_queryset = queryset.annotate( ct_fk_combination=Concat( - related_field.ct_field, Value('-'), - related_field.fk_field, output_field=CharField() + '{}{}'.format( + recuisive_related_reference, related_field.ct_field + ), Value('-'), + '{}{}'.format( + recuisive_related_reference, related_field.fk_field + ), output_field=CharField() ) ).values('ct_fk_combination') @@ -75,8 +93,7 @@ class AccessControlListManager(models.Manager): ct_fk_combination__in=content_type_object_id_queryset ).values('object_id') - field_lookup = 'object_id__in' - + field_lookup = '{}object_id__in'.format(recuisive_related_reference) result.append(Q(**{field_lookup: acl_filter})) else: # Case 2: Related field of a single type, single ContentType, @@ -97,6 +114,7 @@ class AccessControlListManager(models.Manager): # Case 5: Related field, has an inherited related field itself # Bubble up permssion check + # Recurse and reduce # TODO: Add relationship support: OR or AND # TODO: OR for document pages, version, doc, and types # TODO: AND for new cabinet levels ACLs @@ -200,28 +218,26 @@ class AccessControlListManager(models.Manager): return result - def check_access(self, obj, permissions, user, manager=None): + def check_access(self, obj, permissions, user): # Allow specific managers for models that have more than one # for example the Document model when checking for access for a trashed # document. - if manager: - source_queryset = manager.all() + meta = getattr(obj, '_meta', None) + + if not meta: + logger.debug( + ugettext( + 'Object "%s" is not a model and cannot be checked for ' + 'access.' + ) % force_text(obj) + ) + return True else: - meta = getattr(obj, '_meta', None) + manager = ModelPermission.get_manager(model=obj._meta.model) + source_queryset = manager.all() - if not meta: - logger.debug( - ugettext( - 'Object "%s" is not a model and cannot be checked for ' - 'access.' - ) % force_text(obj) - ) - return True - else: - source_queryset = obj._meta.default_manager.all() - - restricted_queryset = obj._meta.default_manager.none() + restricted_queryset = manager.none() for permission in permissions: # Default relationship betweens permissions is OR # TODO: Add support for AND relationship diff --git a/mayan/apps/acls/models.py b/mayan/apps/acls/models.py index 82cc2896e5..beb233ef05 100644 --- a/mayan/apps/acls/models.py +++ b/mayan/apps/acls/models.py @@ -39,7 +39,6 @@ class AccessControlList(models.Model): content_object = GenericForeignKey( ct_field='content_type', fk_field='object_id', ) - # TODO: limit choices to the permissions valid for the content_object permissions = models.ManyToManyField( blank=True, related_name='acls', to=StoredPermission, verbose_name=_('Permissions') diff --git a/mayan/apps/acls/tests/mixins.py b/mayan/apps/acls/tests/mixins.py index c27979f15b..642baab205 100644 --- a/mayan/apps/acls/tests/mixins.py +++ b/mayan/apps/acls/tests/mixins.py @@ -44,17 +44,6 @@ class ACLTestMixin(PermissionTestMixin, RoleTestMixin, TestModelTestMixin): if self.auto_create_test_object: self._setup_test_object() - def tearDown(self): - # Deregister the permissions of the ephimeral test models - # this avoids their Content Type from being looked up - # in subsequent tests where they don't exists due to the database - # transaction rollback. - for model in self._test_models: - ModelPermission.deregister(model=model) - self._test_models.remove(model) - - super(ACLTestMixin, self).tearDown() - def _create_test_acl(self): self.test_acl = AccessControlList.objects.create( content_object=self.test_object, role=self.test_role @@ -71,12 +60,12 @@ class ACLTestMixin(PermissionTestMixin, RoleTestMixin, TestModelTestMixin): 'object_id': self.test_object.pk } - def _setup_test_object(self, register_model_permissions=True): - self._create_test_model() - self._create_test_object() + def _setup_test_object(self, model_name=None, register_model_permissions=True): + self.TestModel = self._create_test_model(model_name=model_name) + self.test_object = self.TestModel.objects.create() if register_model_permissions: ModelPermission.register( - model=self.test_object._meta.model, permissions=( + model=self.TestModel, permissions=( permission_acl_edit, permission_acl_view, ) ) @@ -85,9 +74,23 @@ class ACLTestMixin(PermissionTestMixin, RoleTestMixin, TestModelTestMixin): if register_model_permissions: ModelPermission.register( - model=self.test_object._meta.model, permissions=( + model=self.TestModel, permissions=( self.test_permission, ) ) self._inject_test_object_content_type() + + def _setup_test_object_base(self): + self.test_object_base = self._setup_test_object( + model_name='TestModelBase' + ) + + def _setup_test_object_proxy(self): + self.TestModelProxy = self._create_test_model( + base_class=self.TestModel, model_name='TestModelProxy', + options={ + 'proxy': True + } + ) + self.test_object_proxy = self.TestModelProxy.objects.create() diff --git a/mayan/apps/acls/tests/test_api.py b/mayan/apps/acls/tests/test_api.py index 5292414fd1..03f347764d 100644 --- a/mayan/apps/acls/tests/test_api.py +++ b/mayan/apps/acls/tests/test_api.py @@ -3,7 +3,7 @@ from __future__ import absolute_import, unicode_literals from rest_framework import status from mayan.apps.permissions.tests.literals import TEST_ROLE_LABEL -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import AccessControlList from ..permissions import permission_acl_edit, permission_acl_view @@ -26,7 +26,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): ) def test_acl_create_api_api_view_with_access(self): - self.grant_access(obj=self.test_object, permission=permission_acl_edit) + self.grant_access( + obj=self.test_object, permission=permission_acl_edit + ) response = self._request_acl_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) @@ -44,7 +46,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): ) def test_acl_create_post_api_extra_data_view_with_access(self): - self.grant_access(obj=self.test_object, permission=permission_acl_edit) + self.grant_access( + obj=self.test_object, permission=permission_acl_edit + ) response = self._request_acl_create_api_view( extra_data={'permissions_pk_list': permission_acl_view.pk} @@ -76,7 +80,6 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): ) def test_acl_delete_api_view_with_access(self): - self.expected_content_type = None self._create_test_acl() self.grant_access(self.test_object, permission=permission_acl_edit) @@ -100,7 +103,6 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): ) def test_acl_permission_delete_view_with_access(self): - self.expected_content_type = None self._create_test_acl() self.test_acl.permissions.add(self.test_permission.stored_permission) @@ -114,7 +116,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): def test_acl_detail_api_view_with_access(self): self._create_test_acl() - self.grant_access(obj=self.test_object, permission=permission_acl_view) + self.grant_access( + obj=self.test_object, permission=permission_acl_view + ) response = self._request_test_acl_detail_api_view() @@ -141,7 +145,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): self._create_test_acl() self.test_acl.permissions.add(self.test_permission.stored_permission) - self.grant_access(obj=self.test_object, permission=permission_acl_view) + self.grant_access( + obj=self.test_object, permission=permission_acl_view + ) response = self._request_test_acl_permission_detail_api_view() self.assertEqual( @@ -151,7 +157,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): def test_acl_list_api_view_with_access(self): self._create_test_acl() - self.grant_access(obj=self.test_object, permission=permission_acl_view) + self.grant_access( + obj=self.test_object, permission=permission_acl_view + ) response = self.get( viewname='rest_api:accesscontrollist-list', kwargs={ @@ -194,7 +202,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): self._create_test_acl() self.test_acl.permissions.add(self.test_permission.stored_permission) - self.grant_access(obj=self.test_object, permission=permission_acl_view) + self.grant_access( + obj=self.test_object, permission=permission_acl_view + ) response = self._request_test_acl_permission_list_api_get_view() self.assertEqual( @@ -215,7 +225,9 @@ class ACLAPITestCase(ACLTestMixin, BaseAPITestCase): def test_acl_permission_list_api_post_view_with_access(self): self._create_test_acl() - self.grant_access(obj=self.test_object, permission=permission_acl_edit) + self.grant_access( + obj=self.test_object, permission=permission_acl_edit + ) response = self._request_acl_permssion_list_api_post_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) diff --git a/mayan/apps/acls/tests/test_classes.py b/mayan/apps/acls/tests/test_classes.py index f1ab062709..5b75d2916b 100644 --- a/mayan/apps/acls/tests/test_classes.py +++ b/mayan/apps/acls/tests/test_classes.py @@ -1,6 +1,6 @@ from __future__ import absolute_import, unicode_literals -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..classes import ModelPermission diff --git a/mayan/apps/acls/tests/test_links.py b/mayan/apps/acls/tests/test_links.py index fd45f8f253..ae6926acff 100644 --- a/mayan/apps/acls/tests/test_links.py +++ b/mayan/apps/acls/tests/test_links.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.urls import reverse -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..links import ( link_acl_delete, link_acl_list, link_acl_create, link_acl_permissions diff --git a/mayan/apps/acls/tests/test_models.py b/mayan/apps/acls/tests/test_models.py index 7b60c1bbdd..bb011a7cda 100644 --- a/mayan/apps/acls/tests/test_models.py +++ b/mayan/apps/acls/tests/test_models.py @@ -3,7 +3,7 @@ from __future__ import absolute_import, unicode_literals from django.core.exceptions import PermissionDenied from django.db import models -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..classes import ModelPermission from ..models import AccessControlList @@ -67,8 +67,10 @@ class PermissionTestCase(ACLTestMixin, BaseTestCase): def _setup_child_parent_test_objects(self): self._create_test_permission() - self._create_test_model(model_name='TestModelParent') - self._create_test_model( + self.TestModelParent = self._create_test_model( + model_name='TestModelParent' + ) + self.TestModelChild = self._create_test_model( fields={ 'parent': models.ForeignKey( on_delete=models.CASCADE, related_name='children', @@ -166,7 +168,7 @@ class PermissionTestCase(ACLTestMixin, BaseTestCase): class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): def test_retrieve_inherited_role_permission_not_model_applicable(self): - self._create_test_model() + self.TestModel = self._create_test_model() self.test_object = self.TestModel.objects.create() self._create_test_acl() self._create_test_permission() @@ -176,10 +178,12 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): queryset = AccessControlList.objects.get_inherited_permissions( obj=self.test_object, role=self.test_role ) - self.assertTrue(self.test_permission.stored_permission not in queryset) + self.assertTrue( + self.test_permission.stored_permission not in queryset + ) def test_retrieve_inherited_role_permission_model_applicable(self): - self._create_test_model() + self.TestModel = self._create_test_model() self.test_object = self.TestModel.objects.create() self._create_test_acl() self._create_test_permission() @@ -199,8 +203,10 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): def test_retrieve_inherited_related_parent_child_permission(self): self._create_test_permission() - self._create_test_model(model_name='TestModelParent') - self._create_test_model( + self.TestModelParent = self._create_test_model( + model_name='TestModelParent' + ) + self.TestModelChild = self._create_test_model( fields={ 'parent': models.ForeignKey( on_delete=models.CASCADE, related_name='children', @@ -240,8 +246,10 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): ): self._create_test_permission() - self._create_test_model(model_name='TestModelGrandParent') - self._create_test_model( + self.TestModelGrandParent = self._create_test_model( + model_name='TestModelGrandParent' + ) + self.TestModelParent = self._create_test_model( fields={ 'parent': models.ForeignKey( on_delete=models.CASCADE, related_name='children', @@ -249,7 +257,7 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): ) }, model_name='TestModelParent' ) - self._create_test_model( + self.TestModelChild = self._create_test_model( fields={ 'parent': models.ForeignKey( on_delete=models.CASCADE, related_name='children', @@ -294,3 +302,84 @@ class InheritedPermissionTestCase(ACLTestMixin, BaseTestCase): ) self.assertTrue(self.test_permission.stored_permission in queryset) + + +class ProxyModelPermissionTestCase(ACLTestMixin, BaseTestCase): + def test_proxy_model_filtering_no_permission(self): + self._setup_test_object_base() + self._setup_test_object_proxy() + + proxy_object = self.TestModelProxy.objects.get(pk=self.test_object.pk) + + self.assertFalse( + proxy_object in AccessControlList.objects.restrict_queryset( + permission=self.test_permission, + queryset=self.TestModelProxy.objects.all(), + user=self._test_case_user + ) + ) + + def test_proxy_model_filtering_with_access(self): + self._setup_test_object_base() + self._setup_test_object_proxy() + + self.grant_access( + obj=self.test_object, permission=self.test_permission + ) + + proxy_object = self.TestModelProxy.objects.get(pk=self.test_object.pk) + + self.assertTrue( + proxy_object in AccessControlList.objects.restrict_queryset( + permission=self.test_permission, + queryset=self.TestModelProxy.objects.all(), + user=self._test_case_user + ) + ) + + def test_proxy_model_inheritance_with_access(self): + self._create_test_permission() + + self.TestModelParent = self._create_test_model( + model_name='TestModelParent' + ) + self.TestModelChild = self._create_test_model( + fields={ + 'parent': models.ForeignKey( + on_delete=models.CASCADE, related_name='children', + to='TestModelParent', + ) + }, model_name='TestModelChild' + ) + self.TestModelProxy = self._create_test_model( + base_class=self.TestModelChild, model_name='TestModelProxy', + options={ + 'proxy': True + } + ) + + ModelPermission.register( + model=self.TestModelParent, permissions=( + self.test_permission, + ) + ) + ModelPermission.register_inheritance( + model=self.TestModelChild, related='parent', + ) + + parent = self.TestModelParent.objects.create() + child = self.TestModelChild.objects.create(parent=parent) + + self.grant_access( + obj=parent, permission=self.test_permission + ) + + proxy_object = self.TestModelProxy.objects.get(pk=child.pk) + + self.assertTrue( + proxy_object in AccessControlList.objects.restrict_queryset( + permission=self.test_permission, + queryset=self.TestModelProxy.objects.all(), + user=self._test_case_user + ) + ) diff --git a/mayan/apps/acls/tests/test_views.py b/mayan/apps/acls/tests/test_views.py index 66bdbdc03e..dc73247753 100644 --- a/mayan/apps/acls/tests/test_views.py +++ b/mayan/apps/acls/tests/test_views.py @@ -1,6 +1,6 @@ from __future__ import absolute_import, unicode_literals -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..models import AccessControlList from ..permissions import permission_acl_edit, permission_acl_view diff --git a/mayan/apps/acls/tests/test_workflow_actions.py b/mayan/apps/acls/tests/test_workflow_actions.py index 38495adb1a..6abfd4134e 100644 --- a/mayan/apps/acls/tests/test_workflow_actions.py +++ b/mayan/apps/acls/tests/test_workflow_actions.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.contrib.contenttypes.models import ContentType -from mayan.apps.document_states.tests.test_workflow_actions import ActionTestCase +from mayan.apps.document_states.tests.base import ActionTestCase from mayan.apps.documents.permissions import permission_document_view from ..workflow_actions import ( @@ -30,7 +30,9 @@ class ACLActionTestCase(ActionTestCase): list(self.test_document.acls.first().permissions.all()), [permission_document_view.stored_permission] ) - self.assertEqual(self.test_document.acls.first().role, self._test_case_role) + self.assertEqual( + self.test_document.acls.first().role, self._test_case_role + ) def test_grant_document_access_action(self): action = GrantDocumentAccessAction( @@ -46,7 +48,9 @@ class ACLActionTestCase(ActionTestCase): list(self.test_document.acls.first().permissions.all()), [permission_document_view.stored_permission] ) - self.assertEqual(self.test_document.acls.first().role, self._test_case_role) + self.assertEqual( + self.test_document.acls.first().role, self._test_case_role + ) def test_revoke_access_action(self): self.grant_access( diff --git a/mayan/apps/acls/workflow_actions.py b/mayan/apps/acls/workflow_actions.py index da916aa780..ee0e1638a7 100644 --- a/mayan/apps/acls/workflow_actions.py +++ b/mayan/apps/acls/workflow_actions.py @@ -16,7 +16,6 @@ from mayan.apps.permissions.models import Role from .classes import ModelPermission from .permissions import permission_acl_edit -__all__ = ('GrantAccessAction', 'RevokeAccessAction') logger = logging.getLogger(__name__) @@ -57,7 +56,7 @@ class GrantAccessAction(WorkflowAction): } } field_order = ('content_type', 'object_id', 'roles', 'permissions') - label = _('Grant access') + label = _('Grant object access') widgets = { 'content_type': { 'class': 'django.forms.widgets.Select', 'kwargs': { @@ -140,7 +139,7 @@ class GrantAccessAction(WorkflowAction): class RevokeAccessAction(GrantAccessAction): - label = _('Revoke access') + label = _('Revoke object access') def execute(self, context): self.get_execute_data() diff --git a/mayan/apps/appearance/classes.py b/mayan/apps/appearance/classes.py index 9b05a39fc3..7f1ad604ec 100644 --- a/mayan/apps/appearance/classes.py +++ b/mayan/apps/appearance/classes.py @@ -4,6 +4,7 @@ from django.template.loader import get_template class IconDriver(object): + context = {} _registry = {} @classmethod @@ -14,6 +15,17 @@ class IconDriver(object): def register(cls, driver_class): cls._registry[driver_class.name] = driver_class + def get_context(self): + return self.context + + def render(self, extra_context=None): + context = self.get_context() + if extra_context: + context.update(extra_context) + return get_template(template_name=self.template_name).render( + context=context + ) + class FontAwesomeDriver(IconDriver): name = 'fontawesome' @@ -22,10 +34,8 @@ class FontAwesomeDriver(IconDriver): def __init__(self, symbol): self.symbol = symbol - def render(self): - return get_template(template_name=self.template_name).render( - context={'symbol': self.symbol} - ) + def get_context(self): + return {'symbol': self.symbol} class FontAwesomeDualDriver(IconDriver): @@ -36,23 +46,21 @@ class FontAwesomeDualDriver(IconDriver): self.primary_symbol = primary_symbol self.secondary_symbol = secondary_symbol - def render(self): - return get_template(template_name=self.template_name).render( - context={ - 'data': ( - { - 'class': 'fas fa-circle', - 'transform': 'down-3 right-10', - 'mask': 'fas fa-{}'.format(self.primary_symbol) - }, - {'class': 'far fa-circle', 'transform': 'down-3 right-10'}, - { - 'class': 'fas fa-{}'.format(self.secondary_symbol), - 'transform': 'shrink-4 down-3 right-10' - }, - ) - } - ) + def get_context(self): + return { + 'data': ( + { + 'class': 'fas fa-circle', + 'transform': 'down-3 right-10', + 'mask': 'fas fa-{}'.format(self.primary_symbol) + }, + {'class': 'far fa-circle', 'transform': 'down-3 right-10'}, + { + 'class': 'fas fa-{}'.format(self.secondary_symbol), + 'transform': 'shrink-4 down-3 right-10' + }, + ) + } class FontAwesomeCSSDriver(IconDriver): @@ -62,10 +70,8 @@ class FontAwesomeCSSDriver(IconDriver): def __init__(self, css_classes): self.css_classes = css_classes - def render(self): - return get_template(template_name=self.template_name).render( - context={'css_classes': self.css_classes} - ) + def get_context(self): + return {'css_classes': self.css_classes} class FontAwesomeMasksDriver(IconDriver): @@ -75,23 +81,23 @@ class FontAwesomeMasksDriver(IconDriver): def __init__(self, data): self.data = data - def render(self): - return get_template(template_name=self.template_name).render( - context={'data': self.data} - ) + def get_context(self): + return {'data': self.data} class FontAwesomeLayersDriver(IconDriver): name = 'fontawesome-layers' template_name = 'appearance/icons/font_awesome_layers.html' - def __init__(self, data): + def __init__(self, data, shadow_class=None): self.data = data + self.shadow_class = shadow_class - def render(self): - return get_template(template_name=self.template_name).render( - context={'data': self.data} - ) + def get_context(self): + return { + 'data': self.data, + 'shadow_class': self.shadow_class, + } class Icon(object): diff --git a/mayan/apps/appearance/literals.py b/mayan/apps/appearance/literals.py index 87ce87d1f8..fcf23b3c75 100644 --- a/mayan/apps/appearance/literals.py +++ b/mayan/apps/appearance/literals.py @@ -1 +1,2 @@ DEFAULT_MAXIMUM_TITLE_LENGTH = 120 +DEFAULT_MESSAGE_POSITION = 'top-right' diff --git a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo index 0b5003e974..3d69f45807 100644 Binary files a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po index 4c35b4ac1e..6a538830dc 100644 --- a/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "صلاحيات غير كافية" @@ -89,7 +95,7 @@ msgstr "لم يتم العثور على الصفحة" msgid "Sorry, but the requested page could not be found." msgstr "عفواً، لا يمكن العثور على الصفحة المطلوبة." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -196,26 +202,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "الإجراءات" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -230,45 +241,29 @@ msgstr "لا" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "مطلوب" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "حفظ" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "إلغاء" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "معرف" @@ -284,7 +279,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -292,15 +313,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo index f93d4c085e..7561619a3a 100644 Binary files a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po index 0458bee0c0..551f335332 100644 --- a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-01 17:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-04 16:35+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Максимален брой на знаците, които ще се изобразят в заглавката на изгледа." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "Позиция, където ще се показва системното съобщение. Опциите са: горе вляво, горе в центъра, горе вдясно, отдолу вляво, отдолу в центъра, отдолу вдясно." + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Недостатъчни разрешения" @@ -90,7 +96,7 @@ msgstr "Страницата не е намерена" msgid "Sorry, but the requested page could not be found." msgstr "Съжалявам, но заявената страница не може да бъде намерена." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Грешка в сървъра" @@ -197,26 +203,31 @@ msgid "" " " msgstr "\n Разкажете за проекта. Кажете на Вашите приятели и колеги за това какъв прекрасен е %(project_title)s!\n Следете ни на Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s, или Instagram %(icon_social_instagram)s\n " -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Предупреждение" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Настройките са актуализирани, стартирайте отново Вашата инсталация за да подействат." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "Настройките са актуализирани, рестартирайте инсталацията и опреснете браузъра си, за да влязат в сила промените." #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Действия" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Превключване на плаващо меню" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Отворете главното меню" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Сигурен ли сте?" @@ -231,45 +242,29 @@ msgstr "Не" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "задължително" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Запазване" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Подаване" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Отказ" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Общо (%(start)s - %(end)s от %(total)s) (Страница %(page_number)s от %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Общо: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Идентификатор" @@ -285,7 +280,33 @@ msgstr "Начален етап" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Преди да можете да ползвате напълно Mayan EDMS необходимо е следното:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Общо (%(start)s - %(end)s от %(total)s) (Страница %(page_number)s от %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Общо: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "Изберете / премахнете избора на всички" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "Изберете елементи, за да активирате групови действия. Използвайте Shift + щракване, за да изберете няколко." + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "Групови действия" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Превключване на навигацията" @@ -293,15 +314,15 @@ msgstr "Превключване на навигацията" msgid "No results" msgstr "Няма резултати" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Затваряне" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Грешка при свързването със сървъра" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Проверете връзката с мрежата и опитайте отново след няколко секунди." diff --git a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo index f64975ae03..0784cf2d4d 100644 Binary files a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po index d62e092d21..4d7e527762 100644 --- a/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/bs_BA/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Nedovoljno dozvola" @@ -90,7 +96,7 @@ msgstr "Stranica nije pronađena" msgid "Sorry, but the requested page could not be found." msgstr "Žao nam je, ali tražena stranica ne može biti pronađena." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Greška u serveru" @@ -197,26 +203,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Upozorenje" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Akcije" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Toggle Dropdown" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -231,45 +242,29 @@ msgstr "Ne" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "potrebno" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Sačuvati" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Podnijeti" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Otkazati" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Total (%(start)s - %(end)s od %(total)s) (Strana%(page_number)s od %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Total: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifikator" @@ -285,7 +280,33 @@ msgstr "Početak" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Prije nego što možete korisiti Mayan EDMS treba vam sljedeće:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Total (%(start)s - %(end)s od %(total)s) (Strana%(page_number)s od %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Total: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Prebacite navigaciju" @@ -293,15 +314,15 @@ msgstr "Prebacite navigaciju" msgid "No results" msgstr "Nema rezultata" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Zatvori" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Problem u komunikaciji sa serverom" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Proverite mrežnu vezu i pokušajte ponovo za nekoliko trenutaka." diff --git a/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.mo index 46aa4ec3a2..da55632750 100644 Binary files a/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po index 7461d4606d..0f8b22cb65 100644 --- a/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Maximální počet znaků, které se zobrazí jako název pohledu." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Nedostatečná oprávnění" @@ -90,7 +96,7 @@ msgstr "Stránka nenalezena" msgid "Sorry, but the requested page could not be found." msgstr "Litujeme, ale požadovanou stránku nelze najít." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Chyba serveru" @@ -197,26 +203,31 @@ msgid "" " " msgstr "\nŠiřme slovo. Promluvte si se svými přáteli a kolegy o tom, jak úžasný je %(project_title)s! Sledujte nás na Twitteru %(icon_social_twitter)s , Facebook %(icon_social_facebook)s nebo Instagram %(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Varování" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Nastavení byla aktualizována, restartujte vaši instalaci, aby se změny projevily správně." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Akce" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Přepnout rozevírací seznam" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Jsi si jistí?" @@ -231,45 +242,29 @@ msgstr "Ne" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "Požadované" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Uložit" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Odeslat" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Zrušit" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Celkem (%(start)s - %(end)s z %(total)s) (stránka %(page_number)s z %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Celkem: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifikátor" @@ -285,7 +280,33 @@ msgstr "Začínáme" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Než začnete plně používat Mayan EDMS, potřebujete následující:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Celkem (%(start)s - %(end)s z %(total)s) (stránka %(page_number)s z %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Celkem: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Přepnout navigaci" @@ -293,15 +314,15 @@ msgstr "Přepnout navigaci" msgid "No results" msgstr "Žádné výsledky" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Zavřít" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Chyba komunikace se serverem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Zkontrolujte připojení k síti a zkuste to znovu za chvíli." diff --git a/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.mo index 16962320cf..6cc773542b 100644 Binary files a/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.po index a7a46b1d48..3102dc9237 100644 --- a/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/da_DK/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Utilstrækkelig tilladelse" @@ -90,7 +96,7 @@ msgstr "Side ikke fundet" msgid "Sorry, but the requested page could not be found." msgstr "Beklager, men den ønskede side kunne ikke findes" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Server fejl" @@ -197,26 +203,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Advarelse" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Er du sikker?" @@ -231,45 +242,29 @@ msgstr "Nej" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "Påkrævet" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Gem" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Indsend" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Fortryd" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "" @@ -285,7 +280,33 @@ msgstr "Kom godt igang" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -293,15 +314,15 @@ msgstr "" msgid "No results" msgstr "Ingen resultater" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Luk" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo index 208a0b1fa1..91b1b8f8d4 100644 Binary files a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po index 4bab667063..449cc158c4 100644 --- a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-08 10:26+0000\n" -"Last-Translator: Marvin Haschker \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -78,6 +78,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Maximale Anzahl der Zeichen, die als Titel einer Ansicht angezeigt werden." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Unzureichende Berechtigungen" @@ -94,7 +100,7 @@ msgstr "Seite nicht gefunden" msgid "Sorry, but the requested page could not be found." msgstr "Die angeforderte Seite konnte leider nicht gefunden werden" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Serverfehler" @@ -201,26 +207,31 @@ msgid "" " " msgstr "\nMachen Sie dieses Projekt bekannt. Berichten Sie Ihren Freunden und Kollegen, wie angenehm die Arbeit mit %(project_title)s ist!\n Folgen Sie uns auf Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s, oder Instagram %(icon_social_instagram)s\n " -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Warnung" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Einstellungen wurden aktualisiert, starten Sie die Instanz neu, damit die Änderungen wirksam werden." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Aktionen" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Ausklappmenü ein-/ausschalten" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Sind Sie sicher?" @@ -235,45 +246,29 @@ msgstr "Nein" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "erforderlich" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Speichern" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Absenden" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Abbrechen" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Gesamt (%(start)s - %(end)s von %(total)s) (Seite %(page_number)s von %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Gesamt: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Bezeichner" @@ -289,7 +284,33 @@ msgstr "Erste Schritte" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Bevor Mayan EDMS voll genutzt werden kann, muss folgendes passieren:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Gesamt (%(start)s - %(end)s von %(total)s) (Seite %(page_number)s von %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Gesamt: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Navigation ein-/ausschalten" @@ -297,15 +318,15 @@ msgstr "Navigation ein-/ausschalten" msgid "No results" msgstr "Kein Ergebnis" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Schließen" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Fehler bei der Verbindung zum Server" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Prüfen Sie Ihre Netzwerkeinstellungen und versuchen Sie es nochmals." diff --git a/mayan/apps/appearance/locale/el/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/el/LC_MESSAGES/django.mo index 13a9d55587..0673f8cd44 100644 Binary files a/mayan/apps/appearance/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/el/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/el/LC_MESSAGES/django.po index 37cc7e5a94..975e66caa1 100644 --- a/mayan/apps/appearance/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Ανεπαρκή δικαιώματα" @@ -89,7 +95,7 @@ msgstr "Η σελίδα δεν βρέθηκε" msgid "Sorry, but the requested page could not be found." msgstr "Λυπάμαι, η ζητούμενη σελίδα δεν βρέθηκε." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Σφάλμα διακομηστή" @@ -196,26 +202,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Ενέργειες" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -230,45 +241,29 @@ msgstr "Όχι" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "απαιτείται" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Αποθήκευση" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Υποβολή" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Άκυρο" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Σύνολο (%(start)s - %(end)s από %(total)s) (Σελίδα %(page_number)s από %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Σύνολο: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Αναγνωριστικό" @@ -284,7 +279,33 @@ msgstr "Ξεκινώντας" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Προτού μπορέσετε να χρησιμοποιήσετε πλήρως το Mayan EDMS χρειάζεστε τα εξής:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Σύνολο (%(start)s - %(end)s από %(total)s) (Σελίδα %(page_number)s από %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Σύνολο: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Εναλλαγή πλοήγησης" @@ -292,15 +313,15 @@ msgstr "Εναλλαγή πλοήγησης" msgid "No results" msgstr "Κανένα αποτέλεσμα" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po index 9281c3331a..25d9d41953 100644 --- a/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "" @@ -89,7 +95,7 @@ msgstr "" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -222,26 +228,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -256,45 +267,29 @@ msgstr "" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "" @@ -310,7 +305,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -318,15 +339,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo index 287fab429d..ccf8dce163 100644 Binary files a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po index 45d3eec5c3..1cfd82fd94 100644 --- a/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/es/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-19 05:09+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 22:33+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Número máximo de caracteres que se mostrarán como el título de la vista." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "Posición donde se mostrará el mensaje del sistema. Las opciones corresponden a las 6 zonas: top-left, top-center, top-right, bottom-left, bottom-center, bottom-right. " + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Permisos insuficientes" @@ -90,7 +96,7 @@ msgstr "Página no encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Lo sentimos, pero no se pudo encontrar la página solicitada." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Error de servidor" @@ -162,7 +168,7 @@ msgid "" "\n" " Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " -msgstr "\n Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n " +msgstr "\n Ademas de donativos puedes apoyar el proyecto compando una copia del libro \"Exploring Mayan EDMS\" por Roberto Rosario.\n " #: templates/appearance/about.html:133 #, python-format @@ -197,26 +203,31 @@ msgid "" " " msgstr "\n                Riega la voz. ¡Habla con tus amigos y colegas sobre lo increíble que es %(project_title)s!\n                Síguenos en Twitter %(icon_social_twitter)s , Facebook %(icon_social_facebook)s o Instagram %(icon_social_instagram)s \n            " -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Advertencia" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Configuraciones actualizadas, reinicie su instalación para que los cambios tengas efecto." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "Configuración actualizada, reinicie su instalación y actualice su navegador para que los cambios surtan efecto." #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Acciones" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Alternar desplegable" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Abrir menú principal" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "¿Está seguro?" @@ -231,45 +242,29 @@ msgstr "No" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "requerido" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Guardar" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Total: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identificador" @@ -285,7 +280,33 @@ msgstr "Primeros pasos" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Antes de comenzar a utilizar Mayan EDMS usted necesita lo siguiente:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Total: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "Seleccionar / Deseleccionar todo" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "Seleccione elementos para activar acciones masivas. Use Shift + clic para seleccionar muchos." + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "Acciones masivas" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Activar/Desactivar navegación" @@ -293,15 +314,15 @@ msgstr "Activar/Desactivar navegación" msgid "No results" msgstr "Ningún resultado" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Cerrar" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Error de comunicación del servidor" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Verifique su conexión de red y vuelva a intentarlo en unos momentos." diff --git a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo index 57cad102ba..dfbce72e31 100644 Binary files a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po index 2d56a3aba0..b1813d7e14 100644 --- a/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "مجوز ناکافی" @@ -90,7 +96,7 @@ msgstr "صفحه پیدا نشد." msgid "Sorry, but the requested page could not be found." msgstr "متاسفانه صفحه درخواستی پیدا نشد." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "خطای سرور" @@ -197,26 +203,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "عملیات" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "تغییر وضعیت dropdown" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -231,45 +242,29 @@ msgstr "خیر" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "الزامی" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "ذخیره" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "لغو" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "مجموع (%(start)s - %(end)s از %(total)s) (صفحه %(page_number)s از %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "مجموع: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "مشخصه Identifier" @@ -285,7 +280,33 @@ msgstr "شروع کردن" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "قبل از اینکه بتوانید به طور کامل از EDMS مایان استفاده کنید، به موارد زیر نیاز دارید:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "مجموع (%(start)s - %(end)s از %(total)s) (صفحه %(page_number)s از %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "مجموع: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "تغییر ناوبری" @@ -293,15 +314,15 @@ msgstr "تغییر ناوبری" msgid "No results" msgstr "بی جواب و یا بی جواب" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo index 8edc22945a..3a673cbedd 100644 Binary files a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po index 373a0a3fe1..3cfa162e60 100644 --- a/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/fr/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # Frédéric Escudero , 2017 # Frédéric Sheedy , 2019 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Thierry Schott , 2016 # Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-19 17:59+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-08 18:56+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -79,6 +80,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Nombre maximal de caractères affichés comme titre." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Droits insuffisants" @@ -95,7 +102,7 @@ msgstr "Page non trouvée" msgid "Sorry, but the requested page could not be found." msgstr "Désolé, la page demandée n'a pu être trouvée." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Erreur du serveur" @@ -202,26 +209,31 @@ msgid "" " " msgstr "\n Faites passer le mot. Parlez à vos amis et vos collègues de comment %(project_title)s est génial!\n Suivez-nous sur Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s ou Instagram %(icon_social_instagram)s\n " -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Avertissement" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Les paramètres ont été mis à jour, redémarrez votre installation pour que les modifications prennent effet." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Actions" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Activer la liste déroulante" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Ouvrir le menu principal" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Êtes-vous sûr?" @@ -236,45 +248,29 @@ msgstr "Non" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "Requis" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Enregistrer" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Soumettre" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Annuler" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Total (%(start)s - %(end)s sur %(total)s) (Page %(page_number)s sur %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Total : %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifiant" @@ -290,7 +286,33 @@ msgstr "Démarrage" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Avant d'utiliser pleinement Mayan EDMS, les éléments suivants sont nécessaires :" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Total (%(start)s - %(end)s sur %(total)s) (Page %(page_number)s sur %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Total : %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "Tout sélectionner/Désélectionner" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "Actions en masse" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Activer la navigation" @@ -298,15 +320,15 @@ msgstr "Activer la navigation" msgid "No results" msgstr "Pas de résultats" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Fermer" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Erreur de communication serveur" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Vérifiez votre connexion réseau et réessayez dans quelques instants." diff --git a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo index 67f39bcbef..62d88132d7 100644 Binary files a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po index 82904b1105..5d61ae3001 100644 --- a/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Elégtelen jogosúltság" @@ -90,7 +96,7 @@ msgstr "Oldal nem található" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -197,26 +203,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Műveletek" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -231,45 +242,29 @@ msgstr "Nem" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "" @@ -285,7 +280,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -293,15 +314,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo index 027913dea5..201f89e93c 100644 Binary files a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po index b8da20649c..053efea313 100644 --- a/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "" @@ -89,7 +95,7 @@ msgstr "" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -196,26 +202,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Aksi" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -230,45 +241,29 @@ msgstr "Tidak" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "" @@ -284,7 +279,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -292,15 +313,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo index 67231e793a..3468477770 100644 Binary files a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po index 2f48e6192b..d521f3af20 100644 --- a/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/it/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" @@ -76,6 +76,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Numero massimo di caratteri visualizzati come titolo della schermata" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Permessi insufficienti" @@ -92,7 +98,7 @@ msgstr "Pagina non trovata" msgid "Sorry, but the requested page could not be found." msgstr "Scusa ma la pagina richiesta non è disponibile" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Errore del server" @@ -199,26 +205,31 @@ msgid "" " " msgstr "\nDiffondi il verbo. Dillo ai tuoi amici e colleghi quanto è bello %(project_title)s!\nSeguici su Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s o Instagram %(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Attenzione" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Azioni " #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Apri dropdown" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Sei sicuro?" @@ -233,45 +244,29 @@ msgstr "No" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "richiesto" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Salva" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Conferma" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Annullare" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Totale (%(start)s - %(end)s di %(total)s) (Pagina %(page_number)s di %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Totale: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identificatore" @@ -287,7 +282,33 @@ msgstr "Iniziare" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Prima di usare completamente Mayan EDMS hai bisogno di:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Totale (%(start)s - %(end)s di %(total)s) (Pagina %(page_number)s di %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Totale: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Cambia navigazione" @@ -295,15 +316,15 @@ msgstr "Cambia navigazione" msgid "No results" msgstr "Nessun risultato" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Chiudi" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Errore di comunicazione del Server" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Controlla la connessione di rete e riprova" diff --git a/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.mo index 7bc89906d2..a7da9010fd 100644 Binary files a/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.po index 2371d3761f..60fe9ad0aa 100644 --- a/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-04 06:27+0000\n" +"Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -74,6 +74,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Maksimālais rakstzīmju skaits, kas tiks attēlots kā skata nosaukums." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "Pozīcija, kur tiks parādīts sistēmas ziņojums. Iespējas ir: augšā pa kreisi, augšā centrā, augšā pa labi, apakšā pa kreisi, apakšā centrā, apakšā pa labi." + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Nepietiekamas atļaujas" @@ -90,7 +96,7 @@ msgstr "Lapa nav atrasta" msgid "Sorry, but the requested page could not be found." msgstr "Diemžēl pieprasīto lapu nevarēja atrast." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Servera kļūda" @@ -155,14 +161,14 @@ msgid "" "\n" " You can also donate directly to the creator and lead developer. %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\n Jūs varat arī ziedot tieši radītājam un galvenajam izstrādātājam. %(icon_social_paypal)s" #: templates/appearance/about.html:127 msgid "" "\n" " Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " -msgstr "" +msgstr "\nPapildus ziedojumiem jūs varat arī atbalstīt projektu, iegādājoties Roberto Rosario grāmatas “Exploring Mayan EDMS” kopiju." #: templates/appearance/about.html:133 #, python-format @@ -197,26 +203,31 @@ msgid "" " " msgstr "\nIzplatiet vārdu. Runājiet ar saviem draugiem un kolēģiem par to, cik lielisks %(project_title)s ir! Sekojiet mums Twitter %(icon_social_twitter)s , Facebook %(icon_social_facebook)s vai Instagram %(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Brīdinājums" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "" +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "Iestatījumi ir atjaunināti, restartējiet instalēšanu un atsvaidziniet pārlūku, lai izmaiņas stātos spēkā." #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Darbības" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Toggle Dropdown" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Atvērt galveno izvēlni" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Vai esat pārliecināts?" @@ -231,45 +242,29 @@ msgstr "Nē" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "nepieciešams" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Saglabāt" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Iesniegt" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Atcelt" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Kopā (%(start)s - %(end)s no %(total)s) (lappuse %(page_number)s no %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Kopā: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifikators" @@ -285,7 +280,33 @@ msgstr "Darba sākšana" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Pirms jūs varat pilnībā izmantot Mayan EDMS, jums ir nepieciešams:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Kopā (%(start)s - %(end)s no %(total)s) (lappuse %(page_number)s no %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Kopā: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "Atlasīt / noņemt atlasi visiem" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "Atlasiet vienumus, lai aktivizētu lielapjoma darbības. Izmantojiet taustiņu kombināciju Shift + noklikšķiniet, lai atlasītu daudzus." + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "Lielapjoma darbības" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Pārslēgt navigāciju" @@ -293,15 +314,15 @@ msgstr "Pārslēgt navigāciju" msgid "No results" msgstr "Nav rezultātu" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Aizvērt" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Servera sakaru kļūda" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Pārbaudiet tīkla savienojumu un pēc brīža mēģiniet vēlreiz." diff --git a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo index 6493a566dd..0404c7ab3e 100644 Binary files a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po index cb6e006df0..dfdf7f385b 100644 --- a/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/nl_NL/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -76,6 +76,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Permissies zijn ontoereikend" @@ -92,7 +98,7 @@ msgstr "Pagina niet gevonden" msgid "Sorry, but the requested page could not be found." msgstr "Excuses, maar de opgevraagde pagina kan niet worden gevonden." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Server fout" @@ -199,26 +205,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Waarschuwing" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Acties" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Toggle Dropdown" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -233,45 +244,29 @@ msgstr "Nee" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "Verplicht" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Opslaan" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Verstuur" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Onderbreek" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Totaal (%(start)s - %(end)s van %(total)s) (Pagina %(page_number)s van %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Totaal: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifier" @@ -287,7 +282,33 @@ msgstr "Beginnen" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Voordat u volledig gebruik kunt maken van Mayan EDMS heeft u het volgende nodig:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Totaal (%(start)s - %(end)s van %(total)s) (Pagina %(page_number)s van %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Totaal: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Toggle navigatie" @@ -295,15 +316,15 @@ msgstr "Toggle navigatie" msgid "No results" msgstr "Geen resultaten" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Sluiten" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Server communicatie probleem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Controleer uw netwerkverbinding en probeer nog eens een beetje later." diff --git a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo index 062f381d0c..e337f460ea 100644 Binary files a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po index 87be10d8af..dd2d8837e2 100644 --- a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" @@ -78,6 +78,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Wyświetlono maksymalną liczbę znaków" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Niewystarczające uprawnienia" @@ -94,7 +100,7 @@ msgstr "Nie znaleziono strony" msgid "Sorry, but the requested page could not be found." msgstr "Niestety, żądana strona nie została znaleziona." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Błąd serwera" @@ -201,26 +207,31 @@ msgid "" " " msgstr "\nPrzekaż innym. Porozmawiaj ze znajomymi i kolegami o tym, jak niesamowity jest %(project_title)s! Śledź nas na Twitterze %(icon_social_twitter)s , Facebooku %(icon_social_facebook)s lub Instagramie %(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Ostrzeżenie" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Ustawienia zaktualizowane. Aby zmiany przyniosły efekt zrestartuj instalację." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Akcje" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Rozwiń listę" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Jesteś pewny?" @@ -235,45 +246,29 @@ msgstr "Nie" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "wymagane" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Zapisz" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Wykonaj" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Anuluj" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Razem (%(start)s - %(end)s z %(total)s) (Strona %(page_number)s z %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Razem: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identyfikator" @@ -289,7 +284,33 @@ msgstr "Rozpoczynamy" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Zanim w pełni zaczniesz używać Mayan EDMS musisz:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Razem (%(start)s - %(end)s z %(total)s) (Strona %(page_number)s z %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Razem: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Rozwiń nawigację" @@ -297,15 +318,15 @@ msgstr "Rozwiń nawigację" msgid "No results" msgstr "Brak wyników" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Zamknij" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Błąd komunikacji z serwerem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Sprawdź połączenie z siecią i spróbuj za chwilę." diff --git a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo index 0c87be42d4..7a8ca1da76 100644 Binary files a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po index 5f73daf35d..1519ca17ad 100644 --- a/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Permissões insuficientes" @@ -89,7 +95,7 @@ msgstr "Página não encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Desculpe, mas a página solicitada não foi encontrada." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -196,26 +202,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Ações" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -230,45 +241,29 @@ msgstr "Não" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "obrigatório" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Guardar" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Submeter" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identificador" @@ -284,7 +279,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -292,15 +313,15 @@ msgstr "" msgid "No results" msgstr "Sem resultados" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo index b615e01d74..acd9e740ab 100644 Binary files a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po index d7415fc584..de44620552 100644 --- a/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/pt_BR/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -76,6 +76,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Número máximo de caracteres que serão mostrados como o título da vista." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Permissões insuficientes" @@ -92,7 +98,7 @@ msgstr "Página não encontrada" msgid "Sorry, but the requested page could not be found." msgstr "Desculpe, mas a página solicitada não pôde ser encontrada." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Erro de servidor" @@ -199,26 +205,31 @@ msgid "" " " msgstr "\n\nEspalhe a palavra! Fale com seus amigos e colegas sobre como o %(project_title)s é incrível!\nSiga-nos no Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s, ou Instagram%(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Advertência" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Ações" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Mostrar/esconder menu" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Tem certeza?" @@ -233,45 +244,29 @@ msgstr "Não" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "requerido" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Salvar" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Cancelar" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Total: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identificador" @@ -287,7 +282,33 @@ msgstr "Iniciando" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Antes de começar a usar Mayan EDMS você precisa do seguinte:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Total: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Ativar/desativar navegação" @@ -295,15 +316,15 @@ msgstr "Ativar/desativar navegação" msgid "No results" msgstr "Nenhum resultado" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Fechar" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Erro na comunicação com o servidor" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Verifique sua conexão de rede e tente novamente em alguns instantes. " diff --git a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo index 858f9f39f0..cd8da9fbd9 100644 Binary files a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po index 86089249d9..fafb5d26e0 100644 --- a/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ro_RO/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-21 06:56+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 13:22+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -75,6 +75,12 @@ msgstr "URI.js" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Numărul maxim de caractere care vor fi afișate ca titlu de vizualizare." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "Poziția în care va fi afișat mesajul de sistem. Opțiunile sunt: în stânga sus, în centru-sus, în dreapta-sus, în stânga-jos, în jos-centru, în jos-dreapta." + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "permisiuni insuficiente" @@ -91,7 +97,7 @@ msgstr "Pagina nu a fost gasită" msgid "Sorry, but the requested page could not be found." msgstr "Ne pare rău, dar pagina solicitată nu a putut fi găsit." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Eroare la server" @@ -198,26 +204,31 @@ msgid "" " " msgstr "\nImprastie vestea. Discutați cu prietenii și colegii despre cât de minunat este %(project_title)s!\nUrmăriți-ne pe Twitter %(icon_social_twitter)s,Facebook %(icon_social_facebook)s, sau Instagram %(icon_social_instagram)s" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Alertă" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." -msgstr "Setările au fost actualizate, reporniți instalarea pentru ca modificările să aibă efectul scontat." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." +msgstr "Setările actualizate, reporniți instalarea și reîmprospătați browserul pentru ca modificările să intre în vigoare." #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Acţiuni" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Comutare mod listă" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Deschideți meniul principal" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Confirmați?" @@ -232,45 +243,29 @@ msgstr "Nu" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "necesar" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Salvează" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Trimiteţi" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Anulează" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Total (%(start)s- %(end)s din %(total)s) ( Pagina %(page_number)s din %(total_pages)s )" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Total: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "ID" @@ -286,7 +281,33 @@ msgstr "Să începem" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Înainte de a putea utiliza Mayan EDMS în totalitate, trebuie sa faceți următoarele:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Total (%(start)s- %(end)s din %(total)s) ( Pagina %(page_number)s din %(total_pages)s )" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Total: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "Selectați / Deselectați toate" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "Selectați elemente pentru a activa acțiuni în vrac. Folosiți Shift + faceți clic pentru a selecta mai multe." + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "Acțiuni în vrac" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Comutare navigare" @@ -294,15 +315,15 @@ msgstr "Comutare navigare" msgid "No results" msgstr "Fără rezultate" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Închide" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Eroare de comunicare cu server-ul" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Verificați conexiunea la rețea și încercați din nou în câteva momente." diff --git a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo index 6cae972562..23b3a4ef11 100644 Binary files a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po index 728f0b1195..cefdda6690 100644 --- a/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/ru/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -75,6 +75,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "Максимальное количество символов для отображения заголовка." +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Недостаточно прав" @@ -91,7 +97,7 @@ msgstr "Страница не найдена" msgid "Sorry, but the requested page could not be found." msgstr "Извините, но запрашиваемая страница не найдена." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Ошибка сервера" @@ -198,26 +204,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "Предупреждение" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Действия" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Переключение выпадающего списка" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "Вы уверены?" @@ -232,45 +243,29 @@ msgstr "Нет" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "требуется" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Сохранить" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Подтвердить" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Отменить" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Всего (%(start)s - %(end)s из %(total)s) (Страница %(page_number)s из %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Всего: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Идентификатор" @@ -286,7 +281,33 @@ msgstr "Приступая к работе" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Вам кое-что понадобится, прежде чем вы начнёте полноценно использовать Mayan EDMS:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Всего (%(start)s - %(end)s из %(total)s) (Страница %(page_number)s из %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Всего: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Переключение навигации" @@ -294,15 +315,15 @@ msgstr "Переключение навигации" msgid "No results" msgstr "Нет результатов" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "Закрыть" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "Ошибка соединения с сервером" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "Проверьте ваше соединение с сетью и попробуйте еще раз через некоторое время." diff --git a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo index ea70285385..d91361a814 100644 Binary files a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po index 5fac192731..572b204687 100644 --- a/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/sl_SI/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Nezadostna dovoljenja" @@ -90,7 +96,7 @@ msgstr "Stran ni najdena" msgid "Sorry, but the requested page could not be found." msgstr "Žal, toda zahtevane strani ni bilo mogoče najti." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Napaka strežnika" @@ -197,26 +203,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Akcije" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Preklopi spustni seznam" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -231,45 +242,29 @@ msgstr "Ne" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "zahtevano" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Shrani" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Pošlji" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "Prekliči" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Skupaj (%(start)s - %(end)s od %(total)s) (Stran %(page_number)s od %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Skupaj: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Identifikator" @@ -285,7 +280,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Skupaj (%(start)s - %(end)s od %(total)s) (Stran %(page_number)s od %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Skupaj: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Preklopi navigacijo" @@ -293,15 +314,15 @@ msgstr "Preklopi navigacijo" msgid "No results" msgstr "Ni rezultatov" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo index 45b5a838e0..a6d8cb9574 100644 Binary files a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po index 35a8d4c42a..7ee98b9ac8 100644 --- a/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/tr_TR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -75,6 +75,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "Yetersiz yetkiler" @@ -91,7 +97,7 @@ msgstr "sayfa bulunamadı" msgid "Sorry, but the requested page could not be found." msgstr "Üzgünüz, ancak istenen sayfa bulunamadı." -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "Server hatası" @@ -198,26 +204,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Eylemler" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "Açılır pencereyi aç / kapat" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -232,45 +243,29 @@ msgstr "Hayır" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "Gerekli" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "Kaydet" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Gönder" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "İptal" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "Toplam (%(start)s - %(end)s / %(total)s) (Sayfa %(page_number)s / %(total_pages)s)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "Toplam: %(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "Tanımlayıcı" @@ -286,7 +281,33 @@ msgstr "Başlarken" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "Maya EDMS'i tam olarak kullanabilmeniz için aşağıdakilere ihtiyacınız vardır:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "Toplam (%(start)s - %(end)s / %(total)s) (Sayfa %(page_number)s / %(total_pages)s)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "Toplam: %(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Gezinmeyi aç / kapat" @@ -294,15 +315,15 @@ msgstr "Gezinmeyi aç / kapat" msgid "No results" msgstr "Sonuç yok" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo index 661a302ec3..8cb8ddb3c5 100644 Binary files a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po index 1430e5a18e..1d6762c952 100644 --- a/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -73,6 +73,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "" @@ -89,7 +95,7 @@ msgstr "Không tìm thấy trang" msgid "Sorry, but the requested page could not be found." msgstr "" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "" @@ -196,26 +202,31 @@ msgid "" " " msgstr "" -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "Các thao tác" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "" @@ -230,45 +241,29 @@ msgstr "" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "yêu cầu" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "" @@ -284,7 +279,33 @@ msgstr "" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -292,15 +313,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "" diff --git a/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.mo index 084763f605..9259253fa9 100644 Binary files a/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po b/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po index 7d59f4abe1..5948a79b54 100644 --- a/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-30 07:03+0000\n" +"POT-Creation-Date: 2019-12-09 00:29-0400\n" +"PO-Revision-Date: 2019-12-03 05:20+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -74,6 +74,12 @@ msgstr "" msgid "Maximum number of characters that will be displayed as the view title." msgstr "将显示为视图标题的最大字符数。" +#: settings.py:21 +msgid "" +"Position where the system message will be displayed. Options are: top-left, " +"top-center, top-right, bottom-left, bottom-center, bottom-right." +msgstr "" + #: templates/403.html:5 templates/403.html:9 msgid "Insufficient permissions" msgstr "权限不足" @@ -90,7 +96,7 @@ msgstr "页面未找到" msgid "Sorry, but the requested page could not be found." msgstr "抱歉,找不到请求的页面。" -#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:52 +#: templates/500.html:5 templates/500.html:9 templates/appearance/root.html:54 msgid "Server error" msgstr "服务器错误" @@ -197,26 +203,31 @@ msgid "" " " msgstr "\n                宣传这个软件。和你的朋友和同事谈谈%(project_title)s真棒!\n                在 Twitter %(icon_social_twitter)s Facebook %(icon_social_facebook)s ,或 Instagram %(icon_social_instagram)s 关注我们\n            " -#: templates/appearance/base.html:36 templates/appearance/base.html:46 +#: templates/appearance/base.html:37 templates/appearance/base.html:47 msgid "Warning" msgstr "警告" -#: templates/appearance/base.html:46 +#: templates/appearance/base.html:47 msgid "" -"Settings updated, restart your installation for changes to take proper " -"effect." +"Settings updated, restart your installation and refresh your browser for " +"changes to take effect." msgstr "" #: templates/appearance/base.html:60 -#: templates/appearance/generic_list_items_subtemplate.html:104 +#: templates/appearance/generic_list_items_subtemplate.html:66 msgid "Actions" msgstr "操作" #: templates/appearance/base.html:62 -#: templates/appearance/generic_list_items_subtemplate.html:106 +#: templates/appearance/generic_list_items_subtemplate.html:68 +#: templates/appearance/list_toolbar.html:65 msgid "Toggle Dropdown" msgstr "切换下拉列表" +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "" + #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" msgstr "你确定吗?" @@ -231,45 +242,29 @@ msgstr "否" #: templates/appearance/generic_form_instance.html:51 #: templates/appearance/generic_form_instance.html:57 -#: templates/appearance/generic_form_subtemplate.html:51 +#: templates/appearance/generic_form_subtemplate.html:50 #: templates/appearance/generic_multiform_subtemplate.html:37 msgid "required" msgstr "需要的" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" msgstr "保存" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:85 +#: templates/appearance/generic_form_subtemplate.html:98 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "提交" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:89 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" msgstr "取消" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 -#, python-format -msgid "" -"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " -"%(total_pages)s)" -msgstr "总计(%(start)s - %(end)s,%(total)s)(第%(page_number)s页,总%(total_pages)s页)" - -#: templates/appearance/generic_list_items_subtemplate.html:19 -#: templates/appearance/generic_list_items_subtemplate.html:22 -#: templates/appearance/generic_list_subtemplate.html:19 -#: templates/appearance/generic_list_subtemplate.html:22 -#, python-format -msgid "Total: %(total)s" -msgstr "总计:%(total)s" - -#: templates/appearance/generic_list_subtemplate.html:55 +#: templates/appearance/generic_list_subtemplate.html:28 msgid "Identifier" msgstr "识别码" @@ -285,7 +280,33 @@ msgstr "入门" msgid "Before you can fully use Mayan EDMS you need the following:" msgstr "在您充分使用Mayan EDMS之前,您需要以下内容:" -#: templates/appearance/main_menu.html:10 +#: templates/appearance/list_header.html:11 +#, python-format +msgid "" +"Total (%(start)s - %(end)s out of %(total)s) (Page %(page_number)s of " +"%(total_pages)s)" +msgstr "总计(%(start)s - %(end)s,%(total)s)(第%(page_number)s页,总%(total_pages)s页)" + +#: templates/appearance/list_header.html:13 +#: templates/appearance/list_header.html:16 +#, python-format +msgid "Total: %(total)s" +msgstr "总计:%(total)s" + +#: templates/appearance/list_toolbar.html:14 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:58 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:63 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "切换导航" @@ -293,15 +314,15 @@ msgstr "切换导航" msgid "No results" msgstr "没有结果" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:59 msgid "Close" msgstr "关闭" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:67 msgid "Server communication error" msgstr "服务器通信错误" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:69 msgid "Check you network connection and try again in a few moments." msgstr "检查网络连接,并稍后再试。" diff --git a/mayan/apps/appearance/settings.py b/mayan/apps/appearance/settings.py index ad0927530a..990f3e168e 100644 --- a/mayan/apps/appearance/settings.py +++ b/mayan/apps/appearance/settings.py @@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.smart_settings.classes import Namespace -from .literals import DEFAULT_MAXIMUM_TITLE_LENGTH +from .literals import DEFAULT_MAXIMUM_TITLE_LENGTH, DEFAULT_MESSAGE_POSITION namespace = Namespace(label=_('Appearance'), name='appearance') @@ -15,3 +15,11 @@ setting_max_title_length = namespace.add_setting( 'title.' ) ) +setting_message_position = namespace.add_setting( + default=DEFAULT_MESSAGE_POSITION, + global_name='APPEARANCE_MESSAGE_POSITION', help_text=_( + 'Position where the system message will be displayed. Options are: ' + 'top-left, top-center, top-right, bottom-left, bottom-center, ' + 'bottom-right.' + ) +) diff --git a/mayan/apps/appearance/static/appearance/css/base.css b/mayan/apps/appearance/static/appearance/css/base.css index ad14cf3326..1964cdd3a8 100644 --- a/mayan/apps/appearance/static/appearance/css/base.css +++ b/mayan/apps/appearance/static/appearance/css/base.css @@ -12,7 +12,7 @@ } body { - padding-top: 70px; + padding-top: 60px; } .navbar-brand { @@ -70,7 +70,8 @@ img.lazy-load-carousel { } .label-tag { - text-shadow: 0px 0px 2px #000 + text-shadow: 0px 0px 2px #000; + box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.5); } .fancybox-nav span { @@ -88,19 +89,17 @@ hr { } .btn-block { + border-top: 2px solid rgba(255, 255, 255, 0.7); + border-left: 2px solid rgba(255, 255, 255, 0.7); + border-right: 2px solid rgba(0, 0, 0, 0.7); + border-bottom: 2px solid rgba(0, 0, 0, 0.7); + box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.5); margin-bottom: 15px; - white-space: normal; min-height: 120px; - padding-top: 20px; padding-bottom: 1px; -} - -.btn-block .fa { - text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); -} - -.btn-block { - text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + padding-top: 20px; + text-shadow: 1px 1px 3px rgba(0, 0, 0, 1); + white-space: normal; } .radio ul li { @@ -112,14 +111,10 @@ a i { } .dashboard-widget { - box-shadow: 1px 1px 1px rgba(0,0,0,0.3); + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.7); border: 1px solid black; } -.dashboard-widget .panel-heading i { - text-shadow: 1px 1px 1px rgba(0,0,0,0.3); -} - .dashboard-widget-icon { font-size: 200%; } @@ -170,7 +165,7 @@ a i { } .navbar-collapse { border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); } .navbar-fixed-top { top: 0; @@ -213,6 +208,22 @@ a i { font-weight: bold; } +.source-column-label { + font-weight: bold; +} + +.panel-highlighted { + box-shadow: 0px 0px 3px #18bc9c, 10px 10px 20px #000000; +} + +.panel-highlighted:hover { + box-shadow: 0px 0px 3px #18bc9c, 10px 10px 20px #000000, 0px 0px 8px #000000; +} + +.panel-item:not(.panel-highlighted):hover { + box-shadow: 0px 0px 8px #000000; +} + /* Content */ @media (min-width:1200px) { .container-fluid { @@ -242,14 +253,6 @@ a i { margin: auto; } -.thin_border { - border: 1px solid black; - display: block; - margin-left: auto; - margin-right: auto; -} - - .thin_border-thumbnail { display: block; max-width: 100%; @@ -259,10 +262,18 @@ a i { margin: auto; } +/* Must go after .thin_border-thumbnail */ +.thin_border { + border: 1px solid black; + display: inline; + margin-left: 0px; + margin-right: 0px; +} + #ajax-spinner { position: fixed; - top: 12px; - right: 10px; + top: 16px; + left: 10px; z-index: 9999; width: 25px; height: 25px; @@ -328,7 +339,7 @@ a i { .main { padding-right: 0px; padding-left: 0px; - /*margin-left: 210px;*/ + margin-left: 210px; } } @@ -411,6 +422,205 @@ a i { margin-bottom: 2px; } +/* + * Top navigation + * Hide default border to remove 1px line. + */ +.navbar-fixed-top { + border: 0; +} + + +/* menu_main */ +/* Hide for mobile, show later */ + +#menu-main { + display: block; + background-color: #2c3e50; + border-right: 1px solid #18bc9c; + bottom: 0; + left: -210px; + overflow-x: hidden; + overflow-y: auto; + padding-top: 10px; + position: fixed; + top: 51px; + transition: left 0.3s; + width: 210px; + z-index: 1000; + +} + +#menu-main-button-close { + border-radius: 0; + border-top: 2px solid #1c2733; + border-bottom: 2px solid #1c2733; + bottom: 0; + display: block; + height: 40px; + position: relative; + text-align: center; + width: 209px; +} + +#main-menu-button-open { + background-color: transparent; + border: 0; + border-right: 1px solid #95a5a6; + display: block; + padding: 6px 20px 0px 10px; + margin: 0 10px 0 -15px; +} + +.menu-user-name { + color: white; +} + +#multi-item-title-responsible-wrapper { + display: none; +} + +.overlay-gray { + background-color: rgba(0,0,0,0.25); + display: block; + height: 100%; + position: fixed; + transition: background-color 0.3s; + width: 100%; + z-index: 50; +} + +@media (min-width: 768px) { + #menu-main { + display: block; + left: 0; + } + + .menu-user-name { + color: inherit; + } + + #menu-main-button-close { + display: none; + } + + #main-menu-button-open { + display: none; + + } + + #multi-item-title-responsible-wrapper { + display: block; + } + + .navbar-brand { + text-align: center; + width: 210px; + } +} + +.menu-main-opened { + display: block !important; + left: 0 !important; +} + +.main .page-header { + margin-top: 0; +} + +.navbar-brand { +} + +.navbar-brand { + outline: none; +} + +.container-fluid { + margin-right: 0px; + margin-left: 0px; + width: 100%; +} + +#accordion-sidebar a { + padding: 10px 15px; +} + +#accordion-sidebar a[aria-expanded="true"] { + background: #1a242f; +} + +#accordion-sidebar .panel { + border: 0px; +} + +#accordion-sidebar a { + text-decoration: none; + outline: none; + position: relative; + display: block; +} + +#accordion-sidebar .panel-heading { + background-color: #2c3e50; + color: white; + padding: 0px; +} + +#accordion-sidebar .panel-heading:hover { + background-color: #517394; +} + +#accordion-sidebar > .panel > div > .panel-body > ul > li > a:hover { + background-color: #517394; +} + +#accordion-sidebar > .panel > div > .panel-body > ul > li.active { + background: #1a242f; +} + +#accordion-sidebar .panel-title { + font-size: 15px; +} + +#accordion-sidebar .panel-body { + font-size: 13px; + border: 0px; + background-color: #2c3e50; + padding-top: 5px; + padding-left: 20px; + padding-right: 0px; + padding-bottom: 0px; +} + +#accordion-sidebar .panel-body li { + padding: 0px; +} + +#accordion-sidebar .panel-body a { + color: white; + text-decoration: none; + padding: 9px; +} + +.navbar-fixed-top { + box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.4); +} + +.toolbar { + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 1px 1px 2px rgba(0, 0, 0, .3); + margin-bottom: 10px; + padding-bottom: 8px; + padding-left: 12px; + padding-right: 15px; + padding-top: 8px; +} + +#body-plain { + padding-top: 0px; + margin-top: 10px; +} + /* jstree - cabinets */ #jstree { max-width: 100%; @@ -419,3 +629,8 @@ a i { padding: 0px; padding-bottom: 10px; /* Padding for scrollbar */ } + +/* appearance - JavaScript server error */ +.banner-server-error { + margin-top: 10px; +} diff --git a/mayan/apps/appearance/static/appearance/js/base.js b/mayan/apps/appearance/static/appearance/js/base.js index 244ac0298a..ff87e82871 100644 --- a/mayan/apps/appearance/static/appearance/js/base.js +++ b/mayan/apps/appearance/static/appearance/js/base.js @@ -6,7 +6,8 @@ var MayanAppClass = MayanApp; var partialNavigation = new PartialNavigation({ initialURL: initialURL, - disabledAnchorClasses: ['disabled'], + disabledAnchorClasses: [ + 'btn-multi-item-action', 'disabled', 'pagination-disabled' + ], excludeAnchorClasses: ['fancybox', 'new_window', 'non-ajax'], - formBeforeSerializeCallbacks: [MayanApp.MultiObjectFormProcess], }); diff --git a/mayan/apps/appearance/static/appearance/js/mayan_app.js b/mayan/apps/appearance/static/appearance/js/mayan_app.js index fd65b1a6e6..38b219464c 100644 --- a/mayan/apps/appearance/static/appearance/js/mayan_app.js +++ b/mayan/apps/appearance/static/appearance/js/mayan_app.js @@ -4,7 +4,7 @@ class MayanApp { constructor (options) { var self = this; - options = options || { + this.options = options || { ajaxMenusOptions: [] } @@ -17,28 +17,44 @@ class MayanApp { // Class methods and variables - static MultiObjectFormProcess ($form, options) { - /* - * ajaxForm callback to add the external item checkboxes to the - * submitted form - */ + static countChecked() { + var checkCount = $('.check-all-slave:checked').length; - if ($form.hasClass('form-multi-object-action')) { - // Turn form data into an object - var formArray = $form.serializeArray().reduce(function (obj, item) { - obj[item.name] = item.value; - return obj; - }, {}); + if (checkCount) { + $('#multi-item-title').hide(); + $('#multi-item-actions').show(); + } else { + $('#multi-item-title').show(); + $('#multi-item-actions').hide(); + } + } - // Add all checked checkboxes to the form data - $('.form-multi-object-action-checkbox:checked').each(function() { - var $this = $(this); - formArray[$this.attr('name')] = $this.attr('value'); + static setupMultiItemActions () { + $('body').on('change', '.check-all-slave', function () { + MayanApp.countChecked(); + }); + + $('body').on('click', '.btn-multi-item-action', function (event) { + var id_list = []; + $('.check-all-slave:checked').each(function (index, value) { + //Split the name (ie:"pk_200") and extract only the ID + id_list.push(value.name.split('_')[1]); + }); + event.preventDefault(); + partialNavigation.setLocation( + $(this).attr('href') + '?id_list=' + id_list.join(',') + ); + }); + } + + static setupNavBarState () { + $('body').on('click', '.a-main-menu-accordion-link', function (event) { + $('.a-main-menu-accordion-link').each(function (index, value) { + $(this).parent().removeClass('active'); }); - // Set the form data as the data to send - options.data = formArray; - } + $(this).parent().addClass('active'); + }); } static updateNavbarState () { @@ -46,8 +62,10 @@ class MayanApp { var uriFragment = uri.fragment(); $('.a-main-menu-accordion-link').each(function (index, value) { if (value.pathname === uriFragment) { - $(this).closest('.collapse').addClass('in').parent().find('.collapsed').removeClass('collapsed').attr('aria-expanded', 'true'); - $(this).parent().addClass('active'); + var $this = $(this); + + $this.closest('.collapse').addClass('in').parent().find('.collapsed').removeClass('collapsed').attr('aria-expanded', 'true'); + $this.parent().addClass('active'); } }); } @@ -60,13 +78,6 @@ class MayanApp { } } - doBodyAdjust () { - // Adjust the height of the body-spacer to move content elements - // up or down when the navbar changes size. - const navbarSize = 60; - $('.body-spacer').css('height', $('.navbar').height() - navbarSize); - } - doRefreshAJAXMenu (options) { $.ajax({ complete: function() { @@ -92,7 +103,7 @@ class MayanApp { 'closeButton': true, 'debug': false, 'newestOnTop': true, - 'positionClass': 'toast-top-right', + 'positionClass': 'toast-' + this.options.messagePosition, 'preventDuplicates': false, 'onclick': null, 'showDuration': '300', @@ -162,17 +173,18 @@ class MayanApp { var self = this; this.setupAJAXSpinner(); - this.setupAutoSubmit(); - this.setupBodyAdjust(); this.setupFormHotkeys(); this.setupFullHeightResizing(); this.setupItemsSelector(); + MayanApp.setupMultiItemActions(); this.setupNavbarCollapse(); + MayanApp.setupNavBarState(); this.setupNewWindowAnchor(); $.each(this.ajaxMenusOptions, function(index, value) { value.app = self; app.doRefreshAJAXMenu(value); }); + this.setupPanelSelection(); partialNavigation.initialize(); } @@ -196,22 +208,6 @@ class MayanApp { }); } - setupAutoSubmit () { - $('body').on('change', '.select-auto-submit', function () { - if ($(this).val()) { - $(this.form).trigger('submit'); - } - }); - } - - setupBodyAdjust () { - var self = this; - - this.window.resize(function() { - self.doBodyAdjust(); - }); - } - setupFormHotkeys () { $('body').on('keypress', '.form-hotkey-enter', function (e) { if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) { @@ -242,9 +238,22 @@ class MayanApp { app.lastChecked = null; $('body').on('click', '.check-all', function (event) { + var $this = $(this); var checked = $(event.target).prop('checked'); var $checkBoxes = $('.check-all-slave'); + if (checked === undefined) { + checked = $this.data('checked'); + checked = !checked; + $this.data('checked', checked); + + if (checked) { + $this.find('[data-fa-i2svg]').addClass($this.data('icon-checked')).removeClass($this.data('icon-unchecked')); + } else { + $this.find('[data-fa-i2svg]').addClass($this.data('icon-unchecked')).removeClass($this.data('icon-checked')); + } + } + $checkBoxes.prop('checked', checked); $checkBoxes.trigger('change'); }); @@ -280,6 +289,18 @@ class MayanApp { $('.navbar-collapse').collapse('hide'); } }); + + // Small screen main menu toggle to open + $('body').on('click', '#main-menu-button-open', function (event) { + $('#menu-main').addClass('menu-main-opened'); + $('#ajax-header').addClass('overlay-gray'); + }); + + // Small screen main menu toggle to close + $('body').on('click', '#menu-main-button-close', function (event) { + $('#menu-main').removeClass('menu-main-opened'); + $('#ajax-header').removeClass('overlay-gray'); + }); } setupNewWindowAnchor () { @@ -290,6 +311,58 @@ class MayanApp { }); } + setupPanelSelection () { + var app = this; + + // Setup panel highlighting on check + $('body').on('change', '.check-all-slave', function (event) { + var checked = $(event.target).prop('checked'); + if (checked) { + $(this).closest('.panel-item').addClass('panel-highlighted'); + } else { + $(this).closest('.panel-item').removeClass('panel-highlighted'); + } + }); + + $('body').on('click', '.panel-item', function (event) { + var $this = $(this); + var targetSrc = $(event.target).prop('src'); + var targetHref = $(event.target).prop('href'); + var targetIsButton = event.target.tagName === 'BUTTON'; + var lastChecked = null; + + if ((targetSrc === undefined) && (targetHref === undefined) && (targetIsButton === false)) { + var $checkbox = $this.find('.check-all-slave'); + var checked = $checkbox.prop('checked'); + + if (checked) { + $checkbox.prop('checked', ''); + $checkbox.trigger('change'); + } else { + $checkbox.prop('checked', 'checked'); + $checkbox.trigger('change'); + } + + if(!app.lastChecked) { + app.lastChecked = $checkbox; + } + + if (event.shiftKey) { + var $checkBoxes = $('.check-all-slave'); + + var start = $checkBoxes.index($checkbox); + var end = $checkBoxes.index(app.lastChecked); + + $checkBoxes.slice( + Math.min(start, end), Math.max(start, end) + 1 + ).prop('checked', app.lastChecked.prop('checked')).trigger('change'); + } + app.lastChecked = $checkbox; + window.getSelection().removeAllRanges(); + } + }); + } + setupScrollView () { $('.scrollable').scrollview(); } diff --git a/mayan/apps/appearance/static/appearance/js/partial_navigation.js b/mayan/apps/appearance/static/appearance/js/partial_navigation.js index 0c5fcd5c04..b71dcc8490 100644 --- a/mayan/apps/appearance/static/appearance/js/partial_navigation.js +++ b/mayan/apps/appearance/static/appearance/js/partial_navigation.js @@ -171,11 +171,13 @@ class PartialNavigation { $('#ajax-content').html( ' \
\ -
\ - \ -
' +  errorMessage +' \
-                    
\ -
\ +
\ + \ +
\
\ ' ); diff --git a/mayan/apps/appearance/templates/appearance/about.html b/mayan/apps/appearance/templates/appearance/about.html index 47776295c2..5f89100cb6 100644 --- a/mayan/apps/appearance/templates/appearance/about.html +++ b/mayan/apps/appearance/templates/appearance/about.html @@ -56,18 +56,18 @@ {% endblock stylesheets %} {% block content %} - {% project_information '__build_string__' as build_number %} + {% common_project_information '__build_string__' as build_number %} {% smart_setting 'COMMON_PROJECT_TITLE' as setting_project_title %} - {% project_information '__title__' as project_title %} + {% common_project_information '__title__' as project_title %} - {% get_icon 'mayan.apps.common.icons.icon_documentation' as icon_documentation %} - {% get_icon 'mayan.apps.common.icons.icon_forum' as icon_forum %} - {% get_icon 'mayan.apps.common.icons.icon_social_facebook' as icon_social_facebook %} - {% get_icon 'mayan.apps.common.icons.icon_social_paypal' as icon_social_paypal %} - {% get_icon 'mayan.apps.common.icons.icon_social_twitter' as icon_social_twitter %} - {% get_icon 'mayan.apps.common.icons.icon_social_instagram' as icon_social_instagram %} - {% get_icon 'mayan.apps.common.icons.icon_source_code' as icon_source_code %} - {% get_icon 'mayan.apps.common.icons.icon_wiki' as icon_wiki %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_documentation' as icon_documentation %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_forum' as icon_forum %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_social_facebook' as icon_social_facebook %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_social_paypal' as icon_social_paypal %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_social_twitter' as icon_social_twitter %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_social_instagram' as icon_social_instagram %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_source_code' as icon_source_code %} + {% appearance_get_icon 'mayan.apps.common.icons.icon_wiki' as icon_wiki %}

{{ setting_project_title }}

@@ -79,25 +79,25 @@ {% endblocktrans %}

{% endif %} -

{% trans 'Version' %} {% project_information '__version__' %}

+

{% trans 'Version' %} {% common_project_information '__version__' %}

{% if build_number %}

{% blocktrans with build_number as build_number %}Build number: {{ build_number }}{% endblocktrans %}

{% endif %}

- {% project_information '__description__' as project_description %} + {% common_project_information '__description__' as project_description %} {% trans project_description %}

- {% project_information '__website__' %} + {% common_project_information '__website__' %}

- {% project_information '__license__' as license_information %} + {% common_project_information '__license__' as license_information %} {% trans 'Released under the license:' %} {% trans license_information %}

- +

{% blocktrans with project_title as project_title %} @@ -160,7 +160,7 @@

- {% project_information '__copyright__' %} + {% common_project_information '__copyright__' %}
diff --git a/mayan/apps/appearance/templates/appearance/base.html b/mayan/apps/appearance/templates/appearance/base.html index 46056cf83a..c016c3d045 100644 --- a/mayan/apps/appearance/templates/appearance/base.html +++ b/mayan/apps/appearance/templates/appearance/base.html @@ -23,6 +23,7 @@ {% block content_plain %}{% endblock %} {% else %}
+ {% navigation_resolve_menus names='facet,list facet' sort_results=True as facet_menus_link_results %}
@@ -43,7 +44,7 @@ {% if settings_changed %}
-

{% trans 'Warning' %} {% trans 'Settings updated, restart your installation for changes to take proper effect.' %}

+

{% trans 'Warning' %} {% trans 'Settings updated, restart your installation and refresh your browser for changes to take effect.' %}

{% endif %}
@@ -55,7 +56,6 @@ {% navigation_resolve_menus names='object,secondary' sort_results=True as action_menus_link_results %} {% if action_menus_link_results %}
{% endif %} diff --git a/mayan/apps/appearance/templates/appearance/generic_form.html b/mayan/apps/appearance/templates/appearance/generic_form.html index 66086009ee..27fdce4de2 100644 --- a/mayan/apps/appearance/templates/appearance/generic_form.html +++ b/mayan/apps/appearance/templates/appearance/generic_form.html @@ -17,7 +17,7 @@ {% else %}
{% endif %} - {% render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} + {% common_render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} {{ rendered_subtemplate }}
{% endfor %} diff --git a/mayan/apps/appearance/templates/appearance/generic_form_instance.html b/mayan/apps/appearance/templates/appearance/generic_form_instance.html index a30a8eb1db..56d9da3e21 100644 --- a/mayan/apps/appearance/templates/appearance/generic_form_instance.html +++ b/mayan/apps/appearance/templates/appearance/generic_form_instance.html @@ -45,7 +45,7 @@ {{ field }} {% endfor %} {% for field in form.visible_fields %} -
+
{# We display the label then the field for all except checkboxes #} {% if field|widget_type != 'checkboxinput' and not field.field.widget.attrs.hidden %} {% if not hide_labels %}{{ field.label_tag }}{% if field.field.required and not read_only %} ({% trans 'required' %}){% endif %}{% endif %} @@ -77,13 +77,13 @@ {% endif %} {% elif field|widget_type == 'select' %} {% if read_only %} - {{ field|get_choice_value }} + {{ field|appearance_get_choice_value }} {% else %} {% render_field field class+="form-control" %} {% endif %} {% elif field|widget_type == 'selectmultiple' %} {% if read_only %} - {{ field|get_choice_value }} + {{ field|appearance_get_choice_value }} {% else %} {% render_field field class+="form-control" %} {% endif %} @@ -119,7 +119,7 @@ {% endif %} diff --git a/mayan/apps/appearance/templates/appearance/generic_form_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_form_subtemplate.html index 21bdc64815..50a9a90699 100644 --- a/mayan/apps/appearance/templates/appearance/generic_form_subtemplate.html +++ b/mayan/apps/appearance/templates/appearance/generic_form_subtemplate.html @@ -10,11 +10,10 @@
{% if form.is_multipart %} -
+ {% else %} - + {% endif %} - {{ wizard.management_form }} {% if step_field %} @@ -83,7 +82,7 @@ {% else %} {% endif %} - {% if submit_label %}{{ submit_label }}{% else %}{% if object %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}{% endif %} + {% if submit_label %}{{ submit_label }}{% else %}{% if form.instance %}{% trans 'Save' %}{% else %}{% trans 'Submit' %}{% endif %}{% endif %} {% if previous %}   diff --git a/mayan/apps/appearance/templates/appearance/generic_list_items_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_list_items_subtemplate.html index 991162c0c0..304b2ce63f 100644 --- a/mayan/apps/appearance/templates/appearance/generic_list_items_subtemplate.html +++ b/mayan/apps/appearance/templates/appearance/generic_list_items_subtemplate.html @@ -11,41 +11,9 @@ {% include 'appearance/no_results.html' %}
{% else %} -

- {% if page_obj %} - {% if page_obj.paginator.num_pages != 1 %} - {% blocktrans with page_obj.start_index as start and page_obj.end_index as end and page_obj.paginator.object_list|length as total and page_obj.number as page_number and page_obj.paginator.num_pages as total_pages %}Total ({{ start }} - {{ end }} out of {{ total }}) (Page {{ page_number }} of {{ total_pages }}){% endblocktrans %} - {% else %} - {% blocktrans with page_obj.paginator.object_list|length as total %}Total: {{ total }}{% endblocktrans %} - {% endif %} - {% else %} - {% blocktrans with object_list|length as total %}Total: {{ total }}{% endblocktrans %} - {% endif %} -

-
+ {% include "appearance/list_header.html" %} + {% navigation_resolve_menu name='multi item' sort_results=True source=object_list.0 as links_multi_menus_results %}
-
-
- - {% if object_list %} - {% if not hide_multi_item_actions %} - {% get_multi_item_links_form object_list %} - {% endif %} - {% if multi_item_actions %} -
-   - {{ multi_item_form }} -
- {% endif %} - {% endif %} - -
-
- - {% if object_list %} -
- {% endif %} -
{% for object in object_list %}
@@ -53,9 +21,9 @@
- {% if not hide_columns %} {% navigation_get_source_columns source=object exclude_identifier=True as source_columns %} {% for column in source_columns %} -
{% navigation_source_column_resolve column=column as column_value %}{% if column_value != '' %}{% if column.include_label %}{{ column.label }}: {% endif %}{{ column_value }}{% endif %}
+
{% navigation_source_column_resolve column=column as column_value %}{% if column_value != '' %}{% if column.include_label %}{{ column.label }}: {% endif %}{{ column_value }}{% endif %}
{% endfor %} {% endif %} {% for column in extra_columns %} -
{{ column.name }}: {{ object|object_property:column.attribute }}
+
{{ column.name }}: {{ object|common_object_property:column.attribute }}
{% endfor %} {% if not hide_links %} @@ -136,7 +98,6 @@
{% endfor %}
- {% include 'pagination/pagination.html' %}
{% endif %}
diff --git a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html index d0aa3d6b88..ba6a5d64c0 100644 --- a/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html +++ b/mayan/apps/appearance/templates/appearance/generic_list_subtemplate.html @@ -1,6 +1,7 @@ {% load i18n %} {% load static %} +{% load appearance_tags %} {% load common_tags %} {% load navigation_tags %} @@ -11,44 +12,16 @@ {% include 'appearance/no_results.html' %}
{% else %} -

- {% if page_obj %} - {% if page_obj.paginator.num_pages != 1 %} - {% blocktrans with page_obj.start_index as start and page_obj.end_index as end and page_obj.paginator.object_list|length as total and page_obj.number as page_number and page_obj.paginator.num_pages as total_pages %}Total ({{ start }} - {{ end }} out of {{ total }}) (Page {{ page_number }} of {{ total_pages }}){% endblocktrans %} - {% else %} - {% blocktrans with page_obj.paginator.object_list|length as total %}Total: {{ total }}{% endblocktrans %} - {% endif %} - {% else %} - {% blocktrans with object_list|length as total %}Total: {{ total }}{% endblocktrans %} - {% endif %} -

-
- + {% include "appearance/list_header.html" %} + {% navigation_resolve_menu name='multi item' sort_results=True source=object_list.0 as links_multi_menus_results %}
-
-
-
- {% if object_list %} - {% if not hide_multi_item_actions %} - {% get_multi_item_links_form object_list %} - {% endif %} - {% if multi_item_actions %} -
- {{ multi_item_form }} -
- {% endif %} - {% endif %} -
-
-
-
{% if not hide_header %} - {% if multi_item_actions %} - + {% if links_multi_menus_results %} + {% endif %} {% if not hide_object %} @@ -57,32 +30,46 @@ {% navigation_get_source_columns source=object_list only_identifier=True as source_column %} {% if source_column %} {% endif %} {% endif %} {% if not hide_columns %} {% navigation_get_source_columns source=object_list exclude_identifier=True as source_columns %} - {% for column in source_columns %} + {% for source_column in source_columns %} {% endfor %} {% endif %} @@ -99,9 +86,9 @@ {% for object in object_list %} - {% if multi_item_actions %} + {% if links_multi_menus_results %} {% endif %} @@ -112,11 +99,7 @@ {% navigation_source_column_resolve column=source_column as column_value %} {% if column_value %} {% endif %} {% endif %} @@ -134,7 +117,7 @@ {% endif %} {% for column in extra_columns %} - + {% endfor %} {% if not hide_links %} @@ -170,7 +153,6 @@
- {% if source_column.is_sortable %} - {{ source_column.label }} - {% if source_column.get_sort_field == sort_field %} - {% if icon_sort %}{{ icon_sort.render }}{% endif %} + + {% if source_column.is_sortable %} + {{ source_column.label }} + {% if source_column.get_sort_field == sort_field %} + {% if icon_sort %}{{ icon_sort.render }}{% endif %} + {% endif %} + {% else %} + {{ source_column.label }} {% endif %} - - {% else %} - {{ source_column.label }} - {% endif %} + + {% if source_column.help_text %} + + {% appearance_get_icon icon_path='mayan.apps.navigation.icons.icon_source_column_help_text' %} + + {% endif %} + - {% if column.is_sortable %} - {{ column.label }} - {% if column.get_sort_field == sort_field %} - {% if icon_sort %}{{ icon_sort.render }}{% endif %} + + {% if source_column.is_sortable %} + {{ source_column.label }} + {% if source_column.get_sort_field == sort_field %} + {% if icon_sort %}{{ icon_sort.render }}{% endif %} + {% endif %} + {% else %} + {{ source_column.label }} {% endif %} - - {% else %} - {{ column.label }} - {% endif %} + + {% if source_column.help_text %} + + {% appearance_get_icon icon_path='mayan.apps.navigation.icons.icon_source_column_help_text' %} + + {% endif %} +
- + - {% if source_column.is_attribute_absolute_url or source_column.is_object_absolute_url %} - {{ column_value }} - {% else %} - {{ column_value }} - {% endif %} + {{ column_value }} {{ object|object_property:column.attribute }}{{ object|common_object_property:column.attribute }}
- {% include 'pagination/pagination.html' %}
{% endif %}
diff --git a/mayan/apps/appearance/templates/appearance/generic_multi_subtemplates.html b/mayan/apps/appearance/templates/appearance/generic_multi_subtemplates.html index 542bd6ec63..aaf55eb7ec 100644 --- a/mayan/apps/appearance/templates/appearance/generic_multi_subtemplates.html +++ b/mayan/apps/appearance/templates/appearance/generic_multi_subtemplates.html @@ -13,10 +13,10 @@
{% endif %} {% if subtemplate.form %} - {% render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} + {% common_render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} {{ rendered_subtemplate }} {% else %} - {% render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} + {% common_render_subtemplate subtemplate.name subtemplate.context as rendered_subtemplate %} {{ rendered_subtemplate }} {% endif %}
diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index 9c7bc68cc8..067a5cf922 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -44,6 +44,6 @@ {% include 'dynamic_search/search_box.html' %} - {% render_dashboard 'main' %} + {% dashboards_render_dashboard 'main' %} {% endblock %} diff --git a/mayan/apps/appearance/templates/appearance/icons/font_awesome_layers.html b/mayan/apps/appearance/templates/appearance/icons/font_awesome_layers.html index 4356ad89e1..8a8b454966 100644 --- a/mayan/apps/appearance/templates/appearance/icons/font_awesome_layers.html +++ b/mayan/apps/appearance/templates/appearance/icons/font_awesome_layers.html @@ -1,4 +1,7 @@ + {% if enable_shadow %} + + {% endif %} {% for entry in data %} {% endfor %} diff --git a/mayan/apps/appearance/templates/appearance/icons/font_awesome_symbol.html b/mayan/apps/appearance/templates/appearance/icons/font_awesome_symbol.html index fac6aeca4d..84e7b87eb8 100644 --- a/mayan/apps/appearance/templates/appearance/icons/font_awesome_symbol.html +++ b/mayan/apps/appearance/templates/appearance/icons/font_awesome_symbol.html @@ -1 +1,8 @@ - +{% if enable_shadow %} + + + + +{% else %} + +{% endif %} diff --git a/mayan/apps/appearance/templates/appearance/list_header.html b/mayan/apps/appearance/templates/appearance/list_header.html new file mode 100644 index 0000000000..ce310e8419 --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/list_header.html @@ -0,0 +1,28 @@ +{% load i18n %} +{% load static %} + +{% load common_tags %} +{% load navigation_tags %} + +{% if object_list %} +

+ {% if page_obj %} + {% if page_obj.paginator.num_pages != 1 %} + {% blocktrans with page_obj.start_index as start and page_obj.end_index as end and page_obj.paginator.object_list|length as total and page_obj.number as page_number and page_obj.paginator.num_pages as total_pages %}Total ({{ start }} - {{ end }} out of {{ total }}) (Page {{ page_number }} of {{ total_pages }}){% endblocktrans %} + {% else %} + {% blocktrans with page_obj.paginator.object_list|length as total %}Total: {{ total }}{% endblocktrans %} + {% endif %} + {% else %} + {% blocktrans with object_list|length as total %}Total: {{ total }}{% endblocktrans %} + {% endif %} +

+
+ + {% if not hide_multi_item_actions %} + {% navigation_resolve_menu name='multi item' sort_results=True source=object_list.0 as links_multi_menus_results %} + {% endif %} +{% endif %} + +
+ {% include 'appearance/list_toolbar.html' %} +
diff --git a/mayan/apps/appearance/templates/appearance/list_toolbar.html b/mayan/apps/appearance/templates/appearance/list_toolbar.html new file mode 100644 index 0000000000..610585d891 --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/list_toolbar.html @@ -0,0 +1,92 @@ +{% load i18n %} + +{% load common_tags %} +{% load navigation_tags %} + +{% if is_paginated or links_multi_menus_results %} +
+{% endif %} + + {% if links_multi_menus_results %} +
+ +
+ {% endif %} + + {% if is_paginated %} +
+ +
+ {% endif %} + + {% if links_multi_menus_results %} +
+

{% trans 'Select items to activate bulk actions. Use Shift + click to select many.' %}

+
+ + + {% endif %} + +{% if is_paginated or links_multi_menus_results %} +
+
+{% endif %} diff --git a/mayan/apps/appearance/templates/appearance/main_menu.html b/mayan/apps/appearance/templates/appearance/main_menu.html deleted file mode 100644 index 5d41c7ee1b..0000000000 --- a/mayan/apps/appearance/templates/appearance/main_menu.html +++ /dev/null @@ -1,57 +0,0 @@ -{% load i18n %} - -{% load navigation_tags %} -{% load smart_settings_tags %} - - diff --git a/mayan/apps/appearance/templates/appearance/menu_main.html b/mayan/apps/appearance/templates/appearance/menu_main.html new file mode 100644 index 0000000000..0643ed9986 --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/menu_main.html @@ -0,0 +1,75 @@ +{% load i18n %} + +{% load common_tags %} +{% load navigation_tags %} +{% load smart_settings_tags %} + +{% spaceless %} +
+ + {% navigation_resolve_menu name='main' as main_menus_results %} + {% for main_menu_results in main_menus_results %} + {% for link_group in main_menu_results.link_groups %} + {% for link in link_group.links %} + {% with 'active' as li_class_active %} + {% with ' ' as link_classes %} + {% if link|common_get_type == "" %} +
+ +
+
+
    + {% navigation_resolve_menu name=link.name as sub_menus_results %} + {% for sub_menu_results in sub_menus_results %} + {% for link_group in sub_menu_results.link_groups %} + {% with '' as link_class_active %} + {% with 'a-main-menu-accordion-link' as link_classes %} + {% with 'true' as as_li %} + {% with link_group.links as object_navigation_links %} + {% include 'navigation/generic_navigation.html' %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endfor %} + {% endfor %} +
+
+
+
+ {% else %} +
+ +
+ {% endif %} + {% endwith %} + {% endwith %} + {% endfor %} + {% endfor %} + {% endfor %} +
+{% endspaceless %} diff --git a/mayan/apps/appearance/templates/appearance/menu_topbar.html b/mayan/apps/appearance/templates/appearance/menu_topbar.html new file mode 100644 index 0000000000..7c99533960 --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/menu_topbar.html @@ -0,0 +1,43 @@ +{% load i18n %} + +{% load navigation_tags %} +{% load smart_settings_tags %} + +{% spaceless %} + +{% endspaceless %} diff --git a/mayan/apps/appearance/templates/appearance/root.html b/mayan/apps/appearance/templates/appearance/root.html index 35a29851f1..9766d35cd4 100644 --- a/mayan/apps/appearance/templates/appearance/root.html +++ b/mayan/apps/appearance/templates/appearance/root.html @@ -31,13 +31,16 @@ {% if appearance_type == 'plain' %} {% block content_plain %}{% endblock %} {% else %} +
-
+
@@ -102,21 +105,27 @@ ajaxMenusOptions: [ { callback: function (options) { - options.app.doBodyAdjust(); + MayanApp.updateNavbarState(); }, interval: 5000, menuSelector: '#menu-main', name: 'menu_main', url: '{% url "rest_api:template-detail" "menu_main" %}' }, - ] + { + interval: 5000, + menuSelector: '#menu-topbar', + name: 'menu_topbar', + url: '{% url "rest_api:template-detail" "menu_topbar" %}' + }, + ], + messagePosition: '{% smart_setting "APPEARANCE_MESSAGE_POSITION" %}' }); var afterBaseLoad = function () { MayanImage.intialize({ templateInvalidDocument: '{% spaceless %}{% include "documents/invalid_document.html" %}{% endspaceless %}' }); - app.doBodyAdjust(); app.doToastrMessages(); app.resizeFullHeight(); app.setupSelect2(); diff --git a/mayan/apps/appearance/templates/pagination/pagination.html b/mayan/apps/appearance/templates/pagination/pagination.html index a1cdc9bfa0..829a6f958b 100644 --- a/mayan/apps/appearance/templates/pagination/pagination.html +++ b/mayan/apps/appearance/templates/pagination/pagination.html @@ -11,7 +11,7 @@ {% if page %} {% ifequal page page_obj.number %} -
  • {{ page }}
  • +
  • {{ page }}
  • {% else %}
  • {{ page }}
  • {% endifequal %} diff --git a/mayan/apps/appearance/templatetags/appearance_tags.py b/mayan/apps/appearance/templatetags/appearance_tags.py index 05c3ba043d..9f8131e68d 100644 --- a/mayan/apps/appearance/templatetags/appearance_tags.py +++ b/mayan/apps/appearance/templatetags/appearance_tags.py @@ -8,7 +8,7 @@ register = Library() @register.filter -def get_choice_value(field): +def appearance_get_choice_value(field): try: return dict(field.field.choices)[field.value()] except TypeError: @@ -18,10 +18,15 @@ def get_choice_value(field): @register.filter -def get_form_media_js(form): +def appearance_get_form_media_js(form): return [form.media.absolute_path(path) for path in form.media._js] @register.simple_tag -def get_icon(icon_path): +def appearance_get_icon(icon_path): return import_string(dotted_path=icon_path).render() + + +@register.simple_tag +def appearance_icon_render(icon_class, enable_shadow=False): + return icon_class.render(extra_context={'enable_shadow': enable_shadow}) diff --git a/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po index dd473ff05d..c003e7f3ba 100644 --- a/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" diff --git a/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po index 93f2659f4c..af59e4722e 100644 --- a/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-10-16 09:44+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" diff --git a/mayan/apps/authentication/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/bs_BA/LC_MESSAGES/django.po index b81ae40ed4..27ae550703 100644 --- a/mayan/apps/authentication/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/bs_BA/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" diff --git a/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po index 1298e06ce6..aad99af30c 100644 --- a/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-10-15 16:23+0000\n" "Last-Translator: Michal Švábík \n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" diff --git a/mayan/apps/authentication/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/da_DK/LC_MESSAGES/django.po index 2f4eb7f6ba..eb69ec4d22 100644 --- a/mayan/apps/authentication/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/da_DK/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" diff --git a/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po index ef6f778ee5..c9184702b1 100644 --- a/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-11-08 10:28+0000\n" "Last-Translator: Marvin Haschker \n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" diff --git a/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po index 666a43674a..d1aa5d4893 100644 --- a/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" diff --git a/mayan/apps/authentication/locale/en/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/en/LC_MESSAGES/django.po index c0d2c48d6d..75740d14c3 100644 --- a/mayan/apps/authentication/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/mayan/apps/authentication/locale/es/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/es/LC_MESSAGES/django.po index 8042de044a..a36d5ff915 100644 --- a/mayan/apps/authentication/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:51+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" diff --git a/mayan/apps/authentication/locale/fa/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/fa/LC_MESSAGES/django.po index 5c692f070f..49b4208c8d 100644 --- a/mayan/apps/authentication/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/fa/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" diff --git a/mayan/apps/authentication/locale/fr/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/fr/LC_MESSAGES/django.po index c7fad9fc60..fb4bda6f88 100644 --- a/mayan/apps/authentication/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-07-02 15:51+0000\n" "Last-Translator: Frédéric Sheedy \n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" diff --git a/mayan/apps/authentication/locale/hu/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/hu/LC_MESSAGES/django.po index 6912fa9b4a..1a931c610b 100644 --- a/mayan/apps/authentication/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/hu/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" diff --git a/mayan/apps/authentication/locale/id/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/id/LC_MESSAGES/django.po index b984a20cee..ecc50df6a3 100644 --- a/mayan/apps/authentication/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/id/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" diff --git a/mayan/apps/authentication/locale/it/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/it/LC_MESSAGES/django.po index 84a0939262..2bb98c275e 100644 --- a/mayan/apps/authentication/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/it/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" diff --git a/mayan/apps/authentication/locale/lv/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/lv/LC_MESSAGES/django.po index 3268361006..bfa2a89775 100644 --- a/mayan/apps/authentication/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/lv/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-27 12:07+0000\n" "Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" diff --git a/mayan/apps/authentication/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/nl_NL/LC_MESSAGES/django.po index 78bf042872..7908edb492 100644 --- a/mayan/apps/authentication/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/nl_NL/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" diff --git a/mayan/apps/authentication/locale/pl/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/pl/LC_MESSAGES/django.po index dcfe366639..0ea55a7e6c 100644 --- a/mayan/apps/authentication/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/pl/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-09-23 09:50+0000\n" "Last-Translator: Tomasz Szymanowicz \n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" diff --git a/mayan/apps/authentication/locale/pt/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/pt/LC_MESSAGES/django.po index 7b378c69fb..1fa4a27de1 100644 --- a/mayan/apps/authentication/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/pt/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" diff --git a/mayan/apps/authentication/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/pt_BR/LC_MESSAGES/django.po index 9a9ab9d727..d17c6a1c75 100644 --- a/mayan/apps/authentication/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/pt_BR/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" diff --git a/mayan/apps/authentication/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/ro_RO/LC_MESSAGES/django.po index e2c2df068d..349b7188f3 100644 --- a/mayan/apps/authentication/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/ro_RO/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-18 15:36+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" diff --git a/mayan/apps/authentication/locale/ru/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/ru/LC_MESSAGES/django.po index 60380f70bf..91f6d126f7 100644 --- a/mayan/apps/authentication/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" diff --git a/mayan/apps/authentication/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/sl_SI/LC_MESSAGES/django.po index 0f3a7538fb..e9b9a622e0 100644 --- a/mayan/apps/authentication/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/sl_SI/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" diff --git a/mayan/apps/authentication/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/tr_TR/LC_MESSAGES/django.po index 0f00c07872..0a1e02787b 100644 --- a/mayan/apps/authentication/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/tr_TR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" diff --git a/mayan/apps/authentication/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/vi_VN/LC_MESSAGES/django.po index 9bc79061ed..629400e325 100644 --- a/mayan/apps/authentication/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/vi_VN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" diff --git a/mayan/apps/authentication/locale/zh/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/zh/LC_MESSAGES/django.po index 943607fdc4..d4442c710e 100644 --- a/mayan/apps/authentication/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-06-15 07:48+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" diff --git a/mayan/apps/authentication/tests/test_views.py b/mayan/apps/authentication/tests/test_views.py index f0c02e9c04..841bdee3ee 100644 --- a/mayan/apps/authentication/tests/test_views.py +++ b/mayan/apps/authentication/tests/test_views.py @@ -11,7 +11,7 @@ from django.test import override_settings from django.urls import reverse from django.utils.http import urlunquote_plus -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from mayan.apps.smart_settings.classes import Namespace from mayan.apps.user_management.permissions import permission_user_edit from mayan.apps.user_management.tests.literals import TEST_USER_PASSWORD_EDITED diff --git a/mayan/apps/autoadmin/apps.py b/mayan/apps/autoadmin/apps.py index 18596da92a..f6a0859724 100644 --- a/mayan/apps/autoadmin/apps.py +++ b/mayan/apps/autoadmin/apps.py @@ -18,7 +18,7 @@ class AutoAdminAppConfig(MayanAppConfig): super(AutoAdminAppConfig, self).ready() post_save.connect( - dispatch_uid='auto_admin_handler_account_password_change', + dispatch_uid='autoadmin_handler_account_password_change', receiver=handler_auto_admin_account_password_change, sender=settings.AUTH_USER_MODEL ) diff --git a/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.mo index 91d3bc5706..c5c359b869 100644 Binary files a/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.po index 265938f3ec..546b71b2b9 100644 --- a/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/ar/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Mohammed ALDOUB , 2019\n" "Language-Team: Arabic (https://www.transifex.com/rosarior/teams/13584/ar/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "First time login" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Login using the following credentials:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Username: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.mo index de0ddd1893..bd5e5972ec 100644 Binary files a/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po index 229eb1c796..9702ec422e 100644 --- a/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" @@ -68,8 +68,8 @@ msgstr "" "Потребителското име на автоматично създадения супер потребителски акаунт." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Логване за първи път" +msgid "Automatic credentials" +msgstr "Автоматични идентификационни данни" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Влезте, като използвате следните идентификационни данни:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Потребителско име: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Имейл: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Парола: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.mo index 78ff32bac5..bf2b37b887 100644 Binary files a/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.po index cb51090acf..9f199c5a34 100644 --- a/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/bs_BA/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Atdhe Tabaku , 2019\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" @@ -63,8 +63,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Prijava - prvi put" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -79,22 +79,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Prijava korištenjem sljedećih podataka:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Korisnik: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Pasvord: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.mo index 9c7b853073..d164185f0e 100644 Binary files a/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po index ab9c8ac766..315de078e0 100644 --- a/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" @@ -65,8 +65,8 @@ msgid "The username of the automatically created super user account." msgstr "Uživatelské jméno automaticky vytvořeného superuživatelského účtu." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "První přihlášení" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -81,22 +81,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Přihlaste se pomocí následujících přihlašovacích údajů:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Uživatelské jméno: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "E-mail: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Heslo: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po index afb297332b..e960818647 100644 --- a/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Language-Team: Danish (https://www.transifex.com/rosarior/teams/13584/da/)\n" "MIME-Version: 1.0\n" @@ -58,7 +58,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -72,22 +72,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/da_DK/LC_MESSAGES/django.po index 05713b723a..f5769d524c 100644 --- a/mayan/apps/autoadmin/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/da_DK/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Rasmus Kierudsen , 2019\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" @@ -62,7 +62,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Login med følgende:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Brugernavn: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.mo index 7e34b9be68..896f6113fb 100644 Binary files a/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.po index 4ff7c26c1d..0e172ea87b 100644 --- a/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/de_DE/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Mathias Behrle , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -68,8 +68,8 @@ msgid "The username of the automatically created super user account." msgstr "Der Benutzername für das automatisch erstellte Superuser-Konto." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Erstanmeldung" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Sie können sich mit den folgenden Zugangsdaten anmelden:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Benutzername: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "E-Mail: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Passwort: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.mo index a4313ea6f6..71f02a2c32 100644 Binary files a/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.po index 02c7a7e5a7..7a3d9ebb1c 100644 --- a/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/el/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Hmayag Antonian , 2019\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Σύνδεση για πρώτη φορά" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Συνδεθείτε χρησιμοποιώντας τα παρακάτω διαπιστευτήρια:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Όνομα χρήστη: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Κωδικός πρόσβασης: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/en/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/en/LC_MESSAGES/django.po index 6fedb07c6d..09bc2e04c1 100644 --- a/mayan/apps/autoadmin/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -58,7 +58,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -72,22 +72,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.mo index 44f01f3482..02e0e8d387 100644 Binary files a/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.po index c6fa289592..7e97dafa29 100644 --- a/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/es/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Spanish (https://www.transifex.com/rosarior/teams/13584/es/)\n" @@ -70,8 +70,8 @@ msgstr "" "El nombre de usuario de la cuenta de superusuario creada automáticamente." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Primer inicio de sesión" +msgid "Automatic credentials" +msgstr "Credenciales automáticas" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "Acaba de instalar %(project_title)s, ¡felicidades!" msgid "Login using the following credentials:" msgstr "Inicie sesión con las siguientes credenciales:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Usuario: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Correo electrónico: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Contraseña: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.mo index dbfce3ce03..8838b0e0da 100644 Binary files a/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.po index c2fb66c6aa..c0c0341ff5 100644 --- a/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/fa/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Mehdi Amani , 2019\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" @@ -63,8 +63,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "دفعه اول لاگین " +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -77,22 +77,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "نام کاربری و پسورد زیر را استفاده کنید" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Username: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.mo index a045061650..bab3520d5e 100644 Binary files a/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.po index 284b16d27d..69f1819377 100644 --- a/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/fr/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Frédéric Sheedy , 2019\n" "Language-Team: French (https://www.transifex.com/rosarior/teams/13584/fr/)\n" @@ -69,8 +69,8 @@ msgid "The username of the automatically created super user account." msgstr "Le nom d'utilisateur du compte superutilisateur créé automatiquement." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Première connexion" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -85,22 +85,22 @@ msgid "Login using the following credentials:" msgstr "" "Connectez-vous en utilisant les informations d'identification suivantes :" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Nom d'utilisateur : %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Courriel : %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Mot de passe : %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/hu/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/hu/LC_MESSAGES/django.po index bb997f2c73..a0e3f106cb 100644 --- a/mayan/apps/autoadmin/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/hu/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: molnars , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" @@ -62,7 +62,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/id/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/id/LC_MESSAGES/django.po index cef360fba2..db6bb89006 100644 --- a/mayan/apps/autoadmin/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/id/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Dzikri Hakim , 2019\n" "Language-Team: Indonesian (https://www.transifex.com/rosarior/teams/13584/id/)\n" @@ -62,7 +62,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.mo index 1893dbc004..06bcab0c0f 100644 Binary files a/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.po index 5463406433..9c552a96e1 100644 --- a/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/it/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Daniele Bortoluzzi , 2019\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" @@ -68,8 +68,8 @@ msgid "The username of the automatically created super user account." msgstr "Il nome utente dell'account superutente creato in automatico." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Primo login" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Accedi con le seguenti credenziali:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Nome utente: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Password: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.mo index b483ab3912..ecc5dbc75c 100644 Binary files a/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.po index 018946ab60..9fb413b7e3 100644 --- a/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Māris Teivāns , 2019\n" "Language-Team: Latvian (https://www.transifex.com/rosarior/teams/13584/lv/)\n" @@ -66,8 +66,8 @@ msgid "The username of the automatically created super user account." msgstr "Automātiski izveidotā super lietotāja konta lietotājvārds." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Pirmā pierakstīšanās reize" +msgid "Automatic credentials" +msgstr "Automātiskie akreditācijas dati" #: templates/autoadmin/credentials.html:16 #, python-format @@ -82,22 +82,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Pierakstīties, izmantojot šādus akreditācijas datus:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Lietotājvārds: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "E-pasts: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Parole: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.mo index 627ba686c1..8be801e454 100644 Binary files a/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.po index da2bf9e51b..4c2fe9cf07 100644 --- a/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/nl_NL/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Martin Horseling , 2019\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/rosarior/teams/13584/nl_NL/)\n" @@ -64,8 +64,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Eerste aanmelding" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -79,22 +79,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Meld u aan met de volgende gegevens:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Gebruikersnaam: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Wachtwoord: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.mo index 61eb446f54..aa23496dad 100644 Binary files a/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.po index 5ded38134f..1f3bb0e571 100644 --- a/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/pl/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Tomasz Szymanowicz , 2019\n" "Language-Team: Polish (https://www.transifex.com/rosarior/teams/13584/pl/)\n" @@ -68,8 +68,8 @@ msgid "The username of the automatically created super user account." msgstr "Nazwa użytkownika automatycznie utworzonego konta superużytkownika." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Pierwsze logowanie" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Logowanie przy użyciu następujących poświadczeń:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Nazwa użytkownika: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Hasło: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.mo index 4016b63004..e558792e3f 100644 Binary files a/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.po index 1d5d85d703..e3839c9707 100644 --- a/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/pt/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Manuela Silva , 2019\n" "Language-Team: Portuguese (https://www.transifex.com/rosarior/teams/13584/pt/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Primeiro início de sessão" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Senha: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.mo index 7b4b5a2256..eac3ecff90 100644 Binary files a/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po index 28051132b8..91ce8b07d8 100644 --- a/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" @@ -70,8 +70,8 @@ msgid "The username of the automatically created super user account." msgstr "O nome de usuário da conta de super-usuário criada automaticamente." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Primeiro início de sessão" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -85,22 +85,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Entre usando as seguintes credenciais:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Nome de usuário: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "E-mail: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Senha: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.mo index f46e68e93d..c69d0074b5 100644 Binary files a/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.po index eadff10ce5..d4683834c4 100644 --- a/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/ro_RO/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Harald Ersch, 2019\n" "Language-Team: Romanian (Romania) (https://www.transifex.com/rosarior/teams/13584/ro_RO/)\n" @@ -68,8 +68,8 @@ msgid "The username of the automatically created super user account." msgstr "Numele de utilizator al contului de superutilizator creat automat." #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Prima autentificare" +msgid "Automatic credentials" +msgstr "Acreditări automate" #: templates/autoadmin/credentials.html:16 #, python-format @@ -84,22 +84,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Intrare utilizând acreditările următoarele:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Utilizator: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Email: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Parola: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.mo index 26d677705f..43c0fdbb3b 100644 Binary files a/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.po index 5ff6995a84..0670a6485b 100644 --- a/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/ru/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: mizhgan , 2019\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" @@ -64,8 +64,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Первое время входа в систему" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -80,22 +80,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Войти, используя следующие учетные данные:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Имя пользователя: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "Адрес электронной почты: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Пароль: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/sl_SI/LC_MESSAGES/django.po index 042d7572e8..a6a996df39 100644 --- a/mayan/apps/autoadmin/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/sl_SI/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/rosarior/teams/13584/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -58,7 +58,7 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -72,22 +72,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.mo index d3b6af6263..81effca42b 100644 Binary files a/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.po index b872182d8f..674ffbda74 100644 --- a/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/tr_TR/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: serhatcan77 , 2019\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" @@ -63,8 +63,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Ilk kez giriş" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -77,22 +77,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Aşağıdaki kimlik bilgilerini kullanarak giriş yapın:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Kullanıcı adı: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "E-posta: %(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Parola: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.mo index 560eafbe4c..7c7695afe4 100644 Binary files a/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.po index 7da3da64a1..0de3810064 100644 --- a/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/vi_VN/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Trung Phan Minh , 2019\n" "Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/rosarior/teams/13584/vi_VN/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "Đăng nhập lần đầu" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "Đăng nhập dùng các thông tin sau:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "Người dùng: %(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "Mật khẩu: %(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.mo index bf054ddad3..ab4808a664 100644 Binary files a/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.po index c483a02d7c..83f3203971 100644 --- a/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/zh/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>, 2019\n" "Language-Team: Chinese (https://www.transifex.com/rosarior/teams/13584/zh/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "第一次登录" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "您刚刚安装了 %(project_title)s ,恭喜!" msgid "Login using the following credentials:" msgstr "使用以下凭据登录:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "用户名: %(account)s " -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "电子邮件: %(email)s " -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "密码: %(password)s " -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/locale/zh_CN/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/zh_CN/LC_MESSAGES/django.po index 26e716d876..18344cfa73 100644 --- a/mayan/apps/autoadmin/locale/zh_CN/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/zh_CN/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" "Last-Translator: Ford Guo , 2019\n" "Language-Team: Chinese (China) (https://www.transifex.com/rosarior/teams/13584/zh_CN/)\n" @@ -62,8 +62,8 @@ msgid "The username of the automatically created super user account." msgstr "" #: templates/autoadmin/credentials.html:11 -msgid "First time login" -msgstr "第一次登录" +msgid "Automatic credentials" +msgstr "" #: templates/autoadmin/credentials.html:16 #, python-format @@ -76,22 +76,22 @@ msgstr "" msgid "Login using the following credentials:" msgstr "使用如下凭证登录:" -#: templates/autoadmin/credentials.html:18 +#: templates/autoadmin/credentials.html:19 #, python-format msgid "Username: %(account)s" msgstr "用户名:%(account)s" -#: templates/autoadmin/credentials.html:19 +#: templates/autoadmin/credentials.html:20 #, python-format msgid "Email: %(email)s" msgstr "邮箱:%(email)s" -#: templates/autoadmin/credentials.html:20 +#: templates/autoadmin/credentials.html:21 #, python-format msgid "Password: %(password)s" msgstr "密码:%(password)s" -#: templates/autoadmin/credentials.html:21 +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." diff --git a/mayan/apps/autoadmin/templates/autoadmin/credentials.html b/mayan/apps/autoadmin/templates/autoadmin/credentials.html index 3a258c8034..3db5b857c0 100755 --- a/mayan/apps/autoadmin/templates/autoadmin/credentials.html +++ b/mayan/apps/autoadmin/templates/autoadmin/credentials.html @@ -4,21 +4,23 @@ {% if autoadmin_properties.account %}
    -
    +

    -

    {% trans 'First time login' %}

    +

    {% trans 'Automatic credentials' %}

    diff --git a/mayan/apps/autoadmin/templatetags/autoadmin_tags.py b/mayan/apps/autoadmin/templatetags/autoadmin_tags.py index ff670ffeaf..b42f08c066 100644 --- a/mayan/apps/autoadmin/templatetags/autoadmin_tags.py +++ b/mayan/apps/autoadmin/templatetags/autoadmin_tags.py @@ -7,6 +7,14 @@ from ..models import AutoAdminSingleton register = Library() +@register.inclusion_tag('autoadmin/credentials.html') +def autoadmin_partial(): + try: + return {'autoadmin_properties': AutoAdminSingleton.objects.get()} + except AutoAdminSingleton.DoesNotExist: + return {'autoadmin_properties': None} + + @register.simple_tag(takes_context=True) def autoadmin_properties(context): try: @@ -15,11 +23,3 @@ def autoadmin_properties(context): context['autoadmin_properties'] = None return '' - - -@register.inclusion_tag('autoadmin/credentials.html') -def autoadmin_partial(): - try: - return {'autoadmin_properties': AutoAdminSingleton.objects.get()} - except AutoAdminSingleton.DoesNotExist: - return {'autoadmin_properties': None} diff --git a/mayan/apps/autoadmin/tests/literals.py b/mayan/apps/autoadmin/tests/literals.py index c217b05800..fa6ab9456b 100644 --- a/mayan/apps/autoadmin/tests/literals.py +++ b/mayan/apps/autoadmin/tests/literals.py @@ -3,5 +3,5 @@ from __future__ import unicode_literals TEST_ADMIN_USER_EMAIL = 'testemail@example.com' TEST_ADMIN_USER_PASSWORD = 'test admin user password' TEST_ADMIN_USER_USERNAME = 'test_admin_user_username' -TEST_FIRST_TIME_LOGIN_TEXT = 'First time login' +TEST_FIRST_TIME_LOGIN_TEXT = 'Automatic credentials' TEST_MOCK_VIEW_TEXT = 'mock view text' diff --git a/mayan/apps/autoadmin/tests/test_management_commands.py b/mayan/apps/autoadmin/tests/test_management_commands.py index 9de71acd1f..1ddc6e7835 100644 --- a/mayan/apps/autoadmin/tests/test_management_commands.py +++ b/mayan/apps/autoadmin/tests/test_management_commands.py @@ -2,20 +2,24 @@ from __future__ import unicode_literals from django.contrib.auth import get_user_model from django.core import management -from django.test import TestCase +from mayan.apps.common.tests.base import BaseTestCase from mayan.apps.common.tests.utils import mute_stdout from ..models import AutoAdminSingleton -class AutoAdminManagementCommandTestCase(TestCase): +class AutoAdminManagementCommandTestCase(BaseTestCase): + create_test_case_user = False + def setUp(self): + super(AutoAdminManagementCommandTestCase, self).setUp() with mute_stdout(): management.call_command('createautoadmin') def tearDown(self): AutoAdminSingleton.objects.all().delete() + super(AutoAdminManagementCommandTestCase, self).tearDown() def test_autoadmin_creation(self): autoadmin = AutoAdminSingleton.objects.get() diff --git a/mayan/apps/autoadmin/tests/test_models.py b/mayan/apps/autoadmin/tests/test_models.py index f45f5ede31..b1f74ccef7 100644 --- a/mayan/apps/autoadmin/tests/test_models.py +++ b/mayan/apps/autoadmin/tests/test_models.py @@ -2,8 +2,7 @@ from __future__ import unicode_literals import logging -from django.test import TestCase - +from mayan.apps.common.tests.base import BaseTestCase from mayan.apps.common.tests.utils import mute_stdout from ..models import AutoAdminSingleton @@ -12,7 +11,7 @@ from ..settings import setting_username from .literals import TEST_ADMIN_USER_PASSWORD -class AutoAdminHandlerTestCase(TestCase): +class AutoAdminHandlerTestCase(BaseTestCase): def test_post_admin_creation(self): logging.disable(logging.INFO) diff --git a/mayan/apps/autoadmin/tests/test_views.py b/mayan/apps/autoadmin/tests/test_views.py index a5a90aa977..6ee20398a0 100644 --- a/mayan/apps/autoadmin/tests/test_views.py +++ b/mayan/apps/autoadmin/tests/test_views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from mayan.apps.common.settings import setting_home_view -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from mayan.apps.common.tests.utils import mute_stdout from ..models import AutoAdminSingleton @@ -9,7 +9,12 @@ from ..models import AutoAdminSingleton from .literals import TEST_FIRST_TIME_LOGIN_TEXT, TEST_MOCK_VIEW_TEXT -class AutoAdminViewCase(GenericViewTestCase): +class AutoAdminViewMixing(object): + def _request_home_view(self): + return self.get(viewname=setting_home_view.value, follow=True) + + +class AutoAdminViewCase(AutoAdminViewMixing, GenericViewTestCase): auto_create_group = False auto_create_users = False auto_login_user = False @@ -19,9 +24,6 @@ class AutoAdminViewCase(GenericViewTestCase): with mute_stdout(): AutoAdminSingleton.objects.create_autoadmin() - def _request_home_view(self): - return self.get(viewname=setting_home_view.value, follow=True) - def test_login_302_view(self): response = self._request_home_view() diff --git a/mayan/apps/cabinets/api_views.py b/mayan/apps/cabinets/api_views.py index 63adbac3ce..d558556ec5 100644 --- a/mayan/apps/cabinets/api_views.py +++ b/mayan/apps/cabinets/api_views.py @@ -2,14 +2,12 @@ from __future__ import absolute_import, unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework import generics from rest_framework.response import Response from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.models import Document from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics from .models import Cabinet from .permissions import ( @@ -27,10 +25,8 @@ class APIDocumentCabinetListView(generics.ListAPIView): """ Returns a list of all the cabinets to which a document belongs. """ - serializer_class = CabinetSerializer - - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_cabinet_view,)} + serializer_class = CabinetSerializer def get_queryset(self): document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) @@ -48,10 +44,8 @@ class APICabinetListView(generics.ListCreateAPIView): get: Returns a list of all the cabinets. post: Create a new cabinet """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_cabinet_view,)} mayan_view_permissions = {'POST': (permission_cabinet_create,)} - permission_classes = (MayanPermission,) queryset = Cabinet.objects.all() def get_serializer(self, *args, **kwargs): @@ -74,14 +68,12 @@ class APICabinetView(generics.RetrieveUpdateDestroyAPIView): patch: Edit the selected cabinet. put: Edit the selected cabinet. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'GET': (permission_cabinet_view,), 'PUT': (permission_cabinet_edit,), 'PATCH': (permission_cabinet_edit,), 'DELETE': (permission_cabinet_delete,) } - permission_classes = (MayanPermission,) queryset = Cabinet.objects.all() def get_serializer(self, *args, **kwargs): @@ -102,7 +94,6 @@ class APICabinetDocumentListView(generics.ListCreateAPIView): get: Returns a list of all the documents contained in a particular cabinet. post: Add a document to the selected cabinet. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'GET': (permission_cabinet_view,), 'POST': (permission_cabinet_add_document,) @@ -154,7 +145,6 @@ class APICabinetDocumentView(generics.RetrieveDestroyAPIView): delete: Remove a document from the selected cabinet. get: Returns the details of the selected cabinet document. """ - filter_backends = (MayanObjectPermissionsFilter,) lookup_url_kwarg = 'document_pk' mayan_object_permissions = { 'GET': (permission_cabinet_view,), diff --git a/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po index 47eb4dd446..de21bd77ab 100644 --- a/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Yaman Sanobar , 2019\n" "Language-Team: Arabic (https://www.transifex.com/rosarior/teams/13584/ar/)\n" @@ -24,7 +24,7 @@ msgstr "" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "الخزائن" @@ -61,32 +61,36 @@ msgstr "الكل" msgid "Details" msgstr "التفاصيل" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "العنوان" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "الوثائق" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "خزانة" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.mo index 4c505fbc85..ea03fa2f02 100644 Binary files a/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po index 08b202db62..d5cdd34e0c 100644 --- a/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" @@ -25,7 +25,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Шкафове" @@ -62,32 +62,36 @@ msgstr "Всичко" msgid "Details" msgstr "Детайли" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Кратък текст, използван за идентифициране на шкафа." + +#: models.py:37 search.py:16 msgid "Label" msgstr "Етикет" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Документи" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Шкаф" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Родител и Етикет" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s с този %(field_labels)s вече съществува." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Шкаф за документи" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Шкафове за документи" diff --git a/mayan/apps/cabinets/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/bs_BA/LC_MESSAGES/django.po index c938819a95..d5fa37bf11 100644 --- a/mayan/apps/cabinets/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/bs_BA/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Atdhe Tabaku , 2018\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" @@ -24,7 +24,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Ormarić" @@ -61,32 +61,36 @@ msgstr "Sve" msgid "Details" msgstr "Detalji" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Labela" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenti" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Ormarić" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Roditelj i etiketa" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s sa ovim%(field_labels)s već postoji" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Kabinet za dokumente" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Kabineti za dokumente" diff --git a/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po index d0e08932b5..681d1f076f 100644 --- a/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" @@ -24,7 +24,7 @@ msgstr "" "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:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Kabinety" @@ -61,32 +61,36 @@ msgstr "Vše" msgid "Details" msgstr "Detail" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Označení" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenty" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Kabinet" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Nadřízený a označení" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s s tímto %(field_labels)s již existuje." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Kabinet dokumentu" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Kabinety dokumentů" diff --git a/mayan/apps/cabinets/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/da_DK/LC_MESSAGES/django.po index f122fdb0b7..1efefce12a 100644 --- a/mayan/apps/cabinets/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/da_DK/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Rasmus Kierudsen , 2018\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Samlesager" @@ -59,32 +59,36 @@ msgstr "Alle" msgid "Details" msgstr "Detaljer" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etiket" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenter" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Samlesag" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s med %(field_labels)s eksisterer allerede" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/de_DE/LC_MESSAGES/django.po index bd571c6b56..2331cb575b 100644 --- a/mayan/apps/cabinets/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/de_DE/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Mathias Behrle , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -25,7 +25,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Aktenschränke" @@ -62,32 +62,36 @@ msgstr "Alle" msgid "Details" msgstr "Details" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Bezeichner" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumente" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Aktenschrank" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Überebene und Bezeichnung" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s mit diesem %(field_labels)s existiert bereits." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Dokumenten-Aktenschrank" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Dokumenten-Aktenschränke" diff --git a/mayan/apps/cabinets/locale/el/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/el/LC_MESSAGES/django.po index c45a30af10..02812d271d 100644 --- a/mayan/apps/cabinets/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/el/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Hmayag Antonian , 2018\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Ερμάρια" @@ -59,32 +59,36 @@ msgstr "Όλα" msgid "Details" msgstr "Λεπτομέρειες" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Ετικέτα" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Έγγραφα" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Ερμάριο" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Γονέας και ετικέτα" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s με την ετικέτα %(field_labels)s υπάρχει ήδη." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Ερμάριο εγγράφων" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Ερμάρια εγγράφων" diff --git a/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.mo index 71391091cb..9aa425e655 100644 Binary files a/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po index 01ff0246b4..18c3b771a2 100644 --- a/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Cabinets" @@ -92,32 +92,36 @@ msgstr "Cabinets containing document: %s" msgid "get_cabinets()" msgstr "Create cabinets" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "A short text used to identify the cabinet." + +#: models.py:37 search.py:16 msgid "Label" msgstr "Label" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documents" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Cabinet" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Parent and Label" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s with this %(field_labels)s already exists." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Document cabinet" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Document cabinets" diff --git a/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.mo index 5d56b0cc09..4bc1cda502 100644 Binary files a/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po index 2d79b3817a..d757849c06 100644 --- a/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po @@ -4,17 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Roberto Rosario, 2018 # jmcainzos , 2019 +# Roberto Rosario, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" -"Last-Translator: jmcainzos , 2019\n" +"Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Spanish (https://www.transifex.com/rosarior/teams/13584/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,14 +23,14 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Gabinetes" #: links.py:30 links.py:44 workflow_actions.py:76 msgid "Remove from cabinets" -msgstr "Quitar de los gabinetes" +msgstr "Retirar de los gabinetes" #: links.py:35 links.py:40 workflow_actions.py:31 msgid "Add to cabinets" @@ -60,32 +60,36 @@ msgstr "Todos" msgid "Details" msgstr "Detalles" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Un breve texto utilizado para identificar el gabinete." + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etiqueta" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documentos" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Gabinete" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Padre y etiqueta" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s con este %(field_labels)s ya existe." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Gabinete de documentos" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Gabinetes de documentos" diff --git a/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po index 681a401956..13b0c91215 100644 --- a/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Mehdi Amani , 2017\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" @@ -23,7 +23,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "کابینت" @@ -60,32 +60,36 @@ msgstr "همه" msgid "Details" msgstr "جزئیات" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "برچسب" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "اسناد" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "کابینه" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "پدر و مادر و برچسب" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s با این %(field_labels)s موجود است." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "کابینه سند" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "کابینت سند" diff --git a/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.mo index 40c7e1ec8f..83bb3ffdc0 100644 Binary files a/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.po index 1269c43093..6a52ba4b9c 100644 --- a/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/fr/LC_MESSAGES/django.po @@ -9,15 +9,16 @@ # Christophe CHAUVET , 2017 # Yves Dubois , 2018 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" -"Last-Translator: Frédéric Sheedy , 2019\n" +"Last-Translator: Olivier W, 2019\n" "Language-Team: French (https://www.transifex.com/rosarior/teams/13584/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +27,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Classeurs" @@ -63,32 +64,36 @@ msgstr "Tout" msgid "Details" msgstr "Détails" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Un court texte utilisé pour identifier ce classeur" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Libellé" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documents" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Classeur" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Parent et Libellé" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s avec ce %(field_labels)s existe déjà" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Classeur de document" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Classeurs de document" diff --git a/mayan/apps/cabinets/locale/hu/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/hu/LC_MESSAGES/django.po index b27bbf995c..369553f851 100644 --- a/mayan/apps/cabinets/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/hu/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: molnars , 2017\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" @@ -23,7 +23,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Fiók" @@ -60,32 +60,36 @@ msgstr "Mind" msgid "Details" msgstr "Részletek" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Cimke" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "dokumentumok" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/id/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/id/LC_MESSAGES/django.po index ac29a99342..88a9a78ef2 100644 --- a/mayan/apps/cabinets/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/id/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Adek Lanin, 2019\n" "Language-Team: Indonesian (https://www.transifex.com/rosarior/teams/13584/id/)\n" @@ -24,7 +24,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "" @@ -61,32 +61,36 @@ msgstr "" msgid "Details" msgstr "Detail" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Label" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumen" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/it/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/it/LC_MESSAGES/django.po index 130322c180..3a98e20eb1 100644 --- a/mayan/apps/cabinets/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/it/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Andrea Evangelisti , 2018\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" @@ -26,7 +26,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Contenitori" @@ -63,32 +63,36 @@ msgstr "Tutti" msgid "Details" msgstr "Dettagli" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etichetta" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documenti" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Contenitore" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.mo index fda372c2dd..590ee56489 100644 Binary files a/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.po index 3094218f65..b563c61c48 100644 --- a/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Māris Teivāns , 2019\n" "Language-Team: Latvian (https://www.transifex.com/rosarior/teams/13584/lv/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Kabineti" @@ -59,32 +59,36 @@ msgstr "Visi" msgid "Details" msgstr "Detaļas" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Īss teksts, ko izmanto kabineta identificēšanai." + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etiķete" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenti" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Kabinets" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Mātes elements un etiķete" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s ar šo %(field_labels)s jau eksistē." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Dokumentu kabinets" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Dokumentu kabineti" diff --git a/mayan/apps/cabinets/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/nl_NL/LC_MESSAGES/django.po index 087ed443b4..f1a7fba3be 100644 --- a/mayan/apps/cabinets/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/nl_NL/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Evelijn Saaltink , 2017\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/rosarior/teams/13584/nl_NL/)\n" @@ -26,7 +26,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "" @@ -63,32 +63,36 @@ msgstr "" msgid "Details" msgstr "Gegevens" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Label" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documenten" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/pl/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/pl/LC_MESSAGES/django.po index 16fda9b0f9..7f9fbfc7f5 100644 --- a/mayan/apps/cabinets/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/pl/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Tomasz Szymanowicz , 2019\n" "Language-Team: Polish (https://www.transifex.com/rosarior/teams/13584/pl/)\n" @@ -24,7 +24,7 @@ msgstr "" "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:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Szafki" @@ -61,32 +61,36 @@ msgstr "Wszystkie" msgid "Details" msgstr "Szczegóły" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etykieta" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenty" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Szafka" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Element nadrzędny i etykieta" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s z etykietą %(field_labels)s już istnieje." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Szafka na dokumenty" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Szafki na dokumenty" diff --git a/mayan/apps/cabinets/locale/pt/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/pt/LC_MESSAGES/django.po index 60da71a6bb..dbffea5820 100644 --- a/mayan/apps/cabinets/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/pt/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Manuela Silva , 2017\n" "Language-Team: Portuguese (https://www.transifex.com/rosarior/teams/13584/pt/)\n" @@ -24,7 +24,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "" @@ -61,32 +61,36 @@ msgstr "" msgid "Details" msgstr "Detalhes" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Nome" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documentos" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/pt_BR/LC_MESSAGES/django.po index 77d0400589..53d2c63024 100644 --- a/mayan/apps/cabinets/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/pt_BR/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: José Samuel Facundo da Silva , 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" @@ -25,7 +25,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Pasta" @@ -62,32 +62,36 @@ msgstr "Todos" msgid "Details" msgstr "Detalhes" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etiqueta" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documento" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Pasta" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Pai e Rótulo" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s com estes %(field_labels)s já exitem. " -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Pasta de documentos" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Pastas de documentos" diff --git a/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.mo index 6297eb2b3b..b7ac1a58b2 100644 Binary files a/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.po index 6c0171d394..97c364914b 100644 --- a/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/ro_RO/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Harald Ersch, 2019\n" "Language-Team: Romanian (Romania) (https://www.transifex.com/rosarior/teams/13584/ro_RO/)\n" @@ -25,7 +25,7 @@ msgstr "" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Fișete" @@ -62,32 +62,36 @@ msgstr "Toate" msgid "Details" msgstr "Detalii" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Un text scurt folosit pentru identificarea cabinetului." + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etichetă" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Documente" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Fișet" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Părinte și etichetă" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr " Există deja %(model_name)s cu acest %(field_labels)s." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Fișet de documente" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Fișete cu documentul" diff --git a/mayan/apps/cabinets/locale/ru/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/ru/LC_MESSAGES/django.po index 818ce8ec82..73af302723 100644 --- a/mayan/apps/cabinets/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/ru/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Daler Abdulloev , 2019\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" @@ -26,7 +26,7 @@ msgstr "" "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" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Кабинеты" @@ -63,32 +63,36 @@ msgstr "Все" msgid "Details" msgstr "Детали" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Ярлык" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Документы" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Кабинет" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/sl_SI/LC_MESSAGES/django.po index 1b0d25ce9f..881c9c23d7 100644 --- a/mayan/apps/cabinets/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/sl_SI/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: kontrabant , 2017\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/rosarior/teams/13584/sl_SI/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "" @@ -59,32 +59,36 @@ msgstr "" msgid "Details" msgstr "Podrobnosti" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Oznaka" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Dokumenti" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/tr_TR/LC_MESSAGES/django.po index 7d41d4ef3d..49894fdf2c 100644 --- a/mayan/apps/cabinets/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/tr_TR/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: serhatcan77 , 2017\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Dolaplar" @@ -59,32 +59,36 @@ msgstr "Herşey" msgid "Details" msgstr "Ayrıntılar" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "Etiket" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Belgeler" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "Dolap" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "Ana ve Etiket" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s bu %(field_labels)s ile zaten var." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "Belge dolabı" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "Belge dolapları" diff --git a/mayan/apps/cabinets/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/vi_VN/LC_MESSAGES/django.po index 1af3d13967..109a500581 100644 --- a/mayan/apps/cabinets/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/vi_VN/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: Trung Phan Minh , 2017\n" "Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/rosarior/teams/13584/vi_VN/)\n" @@ -23,7 +23,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "" @@ -60,32 +60,36 @@ msgstr "" msgid "Details" msgstr "Chi tiết" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "Tài liệu" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "" diff --git a/mayan/apps/cabinets/locale/zh/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/zh/LC_MESSAGES/django.po index dee04b4a16..1776cba4d6 100644 --- a/mayan/apps/cabinets/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/zh/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>, 2019\n" "Language-Team: Chinese (https://www.transifex.com/rosarior/teams/13584/zh/)\n" @@ -22,7 +22,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" #: apps.py:49 apps.py:110 apps.py:118 apps.py:121 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: links.py:24 menus.py:16 models.py:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "文档柜" @@ -59,32 +59,36 @@ msgstr "所有" msgid "Details" msgstr "细节" -#: models.py:35 search.py:16 +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "" + +#: models.py:37 search.py:16 msgid "Label" msgstr "标签" -#: models.py:38 +#: models.py:41 msgid "Documents" msgstr "文档" -#: models.py:46 models.py:135 serializers.py:138 workflow_actions.py:68 +#: models.py:49 models.py:138 serializers.py:138 workflow_actions.py:68 msgid "Cabinet" msgstr "文档柜" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" msgstr "父级与标签" -#: models.py:143 serializers.py:145 +#: models.py:146 serializers.py:145 #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(model_name)s与此%(field_labels)s已存在。" -#: models.py:160 +#: models.py:163 msgid "Document cabinet" msgstr "文档柜" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" msgstr "文档柜" diff --git a/mayan/apps/cabinets/migrations/0002_auto_20190729_0236.py b/mayan/apps/cabinets/migrations/0002_auto_20190729_0236.py new file mode 100644 index 0000000000..fd2a7c9226 --- /dev/null +++ b/mayan/apps/cabinets/migrations/0002_auto_20190729_0236.py @@ -0,0 +1,18 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cabinets', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='cabinet', + name='label', + field=models.CharField(help_text='A short text used to identify the cabinet.', max_length=128, verbose_name='Label'), + ), + ] diff --git a/mayan/apps/cabinets/models.py b/mayan/apps/cabinets/models.py index b59e637157..e5fc8d623e 100644 --- a/mayan/apps/cabinets/models.py +++ b/mayan/apps/cabinets/models.py @@ -32,7 +32,10 @@ class Cabinet(MPTTModel): blank=True, db_index=True, null=True, on_delete=models.CASCADE, related_name='children', to='self' ) - label = models.CharField(max_length=128, verbose_name=_('Label')) + label = models.CharField( + help_text=_('A short text used to identify the cabinet.'), + max_length=128, verbose_name=_('Label') + ) documents = models.ManyToManyField( blank=True, related_name='cabinets', to=Document, verbose_name=_('Documents') diff --git a/mayan/apps/cabinets/tests/test_api.py b/mayan/apps/cabinets/tests/test_api.py index 4fe870c221..8e71ce2e0e 100644 --- a/mayan/apps/cabinets/tests/test_api.py +++ b/mayan/apps/cabinets/tests/test_api.py @@ -5,8 +5,8 @@ from django.utils.encoding import force_text from rest_framework import status from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.documents.tests import DocumentTestMixin -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Cabinet from ..permissions import ( diff --git a/mayan/apps/cabinets/tests/test_events.py b/mayan/apps/cabinets/tests/test_events.py index a0a7961deb..f29eaf511c 100644 --- a/mayan/apps/cabinets/tests/test_events.py +++ b/mayan/apps/cabinets/tests/test_events.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from actstream.models import Action -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from mayan.apps.documents.tests.test_models import GenericDocumentTestCase from ..events import ( diff --git a/mayan/apps/cabinets/tests/test_models.py b/mayan/apps/cabinets/tests/test_models.py index 51305515ab..b18b3eb93f 100644 --- a/mayan/apps/cabinets/tests/test_models.py +++ b/mayan/apps/cabinets/tests/test_models.py @@ -2,8 +2,8 @@ from __future__ import unicode_literals from django.core.exceptions import ValidationError -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.tests import DocumentTestMixin +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin from ..models import Cabinet diff --git a/mayan/apps/cabinets/tests/test_views.py b/mayan/apps/cabinets/tests/test_views.py index 894a01d3eb..44bf735705 100644 --- a/mayan/apps/cabinets/tests/test_views.py +++ b/mayan/apps/cabinets/tests/test_views.py @@ -1,8 +1,8 @@ from __future__ import absolute_import, unicode_literals -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..models import Cabinet from ..permissions import ( diff --git a/mayan/apps/cabinets/tests/test_wizard_steps.py b/mayan/apps/cabinets/tests/test_wizard_steps.py index bcdc7f30ce..3f93b768fa 100644 --- a/mayan/apps/cabinets/tests/test_wizard_steps.py +++ b/mayan/apps/cabinets/tests/test_wizard_steps.py @@ -2,9 +2,8 @@ from __future__ import unicode_literals from mayan.apps.documents.models import Document from mayan.apps.documents.permissions import permission_document_create -from mayan.apps.documents.tests import ( - GenericDocumentViewTestCase, TEST_SMALL_DOCUMENT_PATH, -) +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase +from mayan.apps.documents.tests.literals import TEST_SMALL_DOCUMENT_PATH from mayan.apps.sources.models import WebFormSource from mayan.apps.sources.tests.literals import ( TEST_SOURCE_LABEL, TEST_SOURCE_UNCOMPRESS_N @@ -34,7 +33,7 @@ class CabinetDocumentUploadTestCase(CabinetTestMixin, GenericDocumentViewTestCas def _request_upload_interactive_document_create_view(self): with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: return self.post( - viewname='sources:upload_interactive', kwargs={ + viewname='sources:document_upload_interactive', kwargs={ 'source_id': self.test_source.pk }, data={ 'document_type_id': self.test_document_type.pk, diff --git a/mayan/apps/cabinets/tests/test_workflow_actions.py b/mayan/apps/cabinets/tests/test_workflow_actions.py index eb010b55c5..f2a55da818 100644 --- a/mayan/apps/cabinets/tests/test_workflow_actions.py +++ b/mayan/apps/cabinets/tests/test_workflow_actions.py @@ -1,8 +1,8 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase +from mayan.apps.document_states.tests.base import ActionTestCase from mayan.apps.document_states.tests.mixins import WorkflowTestMixin -from mayan.apps.document_states.tests.test_workflow_actions import ActionTestCase from ..models import Cabinet from ..workflow_actions import CabinetAddAction, CabinetRemoveAction @@ -46,7 +46,7 @@ class CabinetWorkflowActionViewTestCase( self._create_test_workflow_state() response = self.get( - viewname='document_states:setup_workflow_state_action_create', + viewname='document_states:workflow_template_state_action_create', kwargs={ 'pk': self.test_workflow_state.pk, 'class_path': 'mayan.apps.cabinets.workflow_actions.CabinetAddAction' @@ -61,7 +61,7 @@ class CabinetWorkflowActionViewTestCase( self._create_test_cabinet() response = self.get( - viewname='document_states:setup_workflow_state_action_create', + viewname='document_states:workflow_template_state_action_create', kwargs={ 'pk': self.test_workflow_state.pk, 'class_path': 'mayan.apps.cabinets.workflow_actions.CabinetRemoveAction' diff --git a/mayan/apps/cabinets/urls.py b/mayan/apps/cabinets/urls.py index 4703ddeab7..ee87035a40 100644 --- a/mayan/apps/cabinets/urls.py +++ b/mayan/apps/cabinets/urls.py @@ -12,55 +12,62 @@ from .views import ( CabinetDeleteView, CabinetDetailView, CabinetEditView, CabinetListView, ) -urlpatterns = [ +urlpatterns_cabinets = [ url( - regex=r'^list/$', view=CabinetListView.as_view(), name='cabinet_list' + regex=r'^cabinets/$', view=CabinetListView.as_view(), name='cabinet_list' ), url( - regex=r'^(?P\d+)/child/add/$', view=CabinetChildAddView.as_view(), - name='cabinet_child_add' - ), - url( - regex=r'^create/$', view=CabinetCreateView.as_view(), + regex=r'^cabinets/create/$', view=CabinetCreateView.as_view(), name='cabinet_create' ), url( - regex=r'^(?P\d+)/edit/$', view=CabinetEditView.as_view(), - name='cabinet_edit' + regex=r'^cabinets/(?P\d+)/children/add/$', view=CabinetChildAddView.as_view(), + name='cabinet_child_add' ), url( - regex=r'^(?P\d+)/delete/$', view=CabinetDeleteView.as_view(), + regex=r'^cabinets/(?P\d+)/delete/$', view=CabinetDeleteView.as_view(), name='cabinet_delete' ), url( - regex=r'^(?P\d+)/$', view=CabinetDetailView.as_view(), - name='cabinet_view' + regex=r'^cabinets/(?P\d+)/edit/$', view=CabinetEditView.as_view(), + name='cabinet_edit' ), url( - regex=r'^document/(?P\d+)/cabinet/add/$', + regex=r'^cabinets/(?P\d+)/$', view=CabinetDetailView.as_view(), + name='cabinet_view' + ), +] + +urlpatterns_documents_cabinets = [ + url( + regex=r'^documents/(?P\d+)/cabinets/add/$', view=DocumentAddToCabinetView.as_view(), name='document_cabinet_add' ), url( - regex=r'^document/multiple/cabinet/add/$', + regex=r'^documents/multiple/cabinets/add/$', view=DocumentAddToCabinetView.as_view(), name='document_multiple_cabinet_add' ), url( - regex=r'^document/(?P\d+)/cabinet/remove/$', + regex=r'^documents/(?P\d+)/cabinets/remove/$', view=DocumentRemoveFromCabinetView.as_view(), name='document_cabinet_remove' ), url( - regex=r'^document/multiple/cabinet/remove/$', + regex=r'^documents/multiple/cabinets/remove/$', view=DocumentRemoveFromCabinetView.as_view(), name='multiple_document_cabinet_remove' ), url( - regex=r'^document/(?P\d+)/cabinet/list/$', + regex=r'^documents/(?P\d+)/cabinets/$', view=DocumentCabinetListView.as_view(), name='document_cabinet_list' ), ] +urlpatterns = [] +urlpatterns.extend(urlpatterns_cabinets) +urlpatterns.extend(urlpatterns_documents_cabinets) + api_urls = [ url( regex=r'^cabinets/(?P[0-9]+)/documents/(?P[0-9]+)/$', diff --git a/mayan/apps/cabinets/views.py b/mayan/apps/cabinets/views.py index 8f589a8098..784aeae5ea 100644 --- a/mayan/apps/cabinets/views.py +++ b/mayan/apps/cabinets/views.py @@ -16,7 +16,7 @@ from mayan.apps.common.generics import ( from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.documents.permissions import permission_document_view from mayan.apps.documents.models import Document -from mayan.apps.documents.views import DocumentListView +from mayan.apps.documents.views.document_views import DocumentListView from .forms import CabinetListForm from .icons import icon_cabinet diff --git a/mayan/apps/checkouts/api_views.py b/mayan/apps/checkouts/api_views.py index c6148077ba..a22539683f 100644 --- a/mayan/apps/checkouts/api_views.py +++ b/mayan/apps/checkouts/api_views.py @@ -1,9 +1,8 @@ from __future__ import absolute_import, unicode_literals -from rest_framework import generics - from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.permissions import permission_document_view +from mayan.apps.rest_api import generics from .models import DocumentCheckout from .permissions import ( diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index 6f9e5b7c00..7c067edb0b 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -6,9 +6,12 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.acls.classes import ModelPermission from mayan.apps.common.apps import MayanAppConfig -from mayan.apps.common.menus import menu_facet, menu_main, menu_secondary +from mayan.apps.common.menus import ( + menu_facet, menu_main, menu_multi_item, menu_secondary +) from mayan.apps.dashboards.dashboards import dashboard_main from mayan.apps.events.classes import ModelEventType +from mayan.apps.navigation.classes import SourceColumn from .dashboard_widgets import DashboardWidgetTotalCheckouts from .events import ( @@ -17,8 +20,9 @@ from .events import ( ) from .handlers import handler_check_new_version_creation from .links import ( - link_check_in_document, link_check_out_document, link_check_out_info, - link_check_out_list + link_check_in_document, link_check_in_document_multiple, + link_check_out_document, link_check_out_document_multiple, + link_check_out_info, link_check_out_list ) from .methods import ( method_check_in, method_get_check_out_info, method_get_check_out_state, @@ -43,6 +47,8 @@ class CheckoutsApp(MayanAppConfig): def ready(self): super(CheckoutsApp, self).ready() + CheckedOutDocument = self.get_model(model_name='CheckedOutDocument') + DocumentCheckout = self.get_model(model_name='DocumentCheckout') Document = apps.get_model( app_label='documents', model_name='Document' ) @@ -76,6 +82,22 @@ class CheckoutsApp(MayanAppConfig): permission_document_check_out_detail_view ) ) + ModelPermission.register_inheritance( + model=DocumentCheckout, related='document' + ) + + SourceColumn( + attribute='get_user_display', include_label=True, order=99, + source=CheckedOutDocument + ) + SourceColumn( + attribute='get_checkout_datetime', include_label=True, order=99, + source=CheckedOutDocument + ) + SourceColumn( + attribute='get_checkout_expiration', include_label=True, order=99, + source=CheckedOutDocument + ) dashboard_main.add_widget( widget=DashboardWidgetTotalCheckouts, order=-1 @@ -85,6 +107,22 @@ class CheckoutsApp(MayanAppConfig): links=(link_check_out_info,), sources=(Document,) ) menu_main.bind_links(links=(link_check_out_list,), position=98) + menu_multi_item.bind_links( + links=( + link_check_in_document_multiple, + ), sources=(CheckedOutDocument,) + ) + menu_multi_item.bind_links( + links=( + link_check_in_document_multiple, + link_check_out_document_multiple, + ), sources=(Document,) + ) + menu_multi_item.unbind_links( + links=( + link_check_out_document_multiple, + ), sources=(CheckedOutDocument,) + ) menu_secondary.bind_links( links=(link_check_out_document, link_check_in_document), sources=( diff --git a/mayan/apps/checkouts/forms.py b/mayan/apps/checkouts/forms.py index 9375dcb00f..9939f75d17 100644 --- a/mayan/apps/checkouts/forms.py +++ b/mayan/apps/checkouts/forms.py @@ -10,7 +10,7 @@ from .models import DocumentCheckout from .widgets import SplitTimeDeltaWidget -class DocumentCheckoutForm(forms.ModelForm): +class DocumentCheckOutForm(forms.ModelForm): class Meta: fields = ('expiration_datetime', 'block_new_version') model = DocumentCheckout @@ -19,7 +19,7 @@ class DocumentCheckoutForm(forms.ModelForm): } -class DocumentCheckoutDefailForm(DetailForm): +class DocumentCheckOutDetailForm(DetailForm): def __init__(self, *args, **kwargs): instance = kwargs['instance'] @@ -56,7 +56,7 @@ class DocumentCheckoutDefailForm(DetailForm): ) kwargs['extra_fields'] = extra_fields - super(DocumentCheckoutDefailForm, self).__init__(*args, **kwargs) + super(DocumentCheckOutDetailForm, self).__init__(*args, **kwargs) class Meta: fields = () diff --git a/mayan/apps/checkouts/links.py b/mayan/apps/checkouts/links.py index d03d54c23d..c8012653c9 100644 --- a/mayan/apps/checkouts/links.py +++ b/mayan/apps/checkouts/links.py @@ -38,16 +38,26 @@ link_check_out_document = Link( args='object.pk', condition=is_not_checked_out, icon_class=icon_check_out_document, permissions=(permission_document_check_out,), - text=_('Check out document'), view='checkouts:check_out_document', + text=_('Check out document'), view='checkouts:check_out_document' +) +link_check_out_document_multiple = Link( + icon_class=icon_check_out_document, + permissions=(permission_document_check_out,), text=_('Check out'), + view='checkouts:check_out_document_multiple' ) link_check_in_document = Link( args='object.pk', icon_class=icon_check_in_document, condition=is_checked_out, permissions=( permission_document_check_in, permission_document_check_in_override - ), text=_('Check in document'), view='checkouts:check_in_document', + ), text=_('Check in document'), view='checkouts:check_in_document' +) +link_check_in_document_multiple = Link( + icon_class=icon_check_in_document, + permissions=(permission_document_check_in,), text=_('Check in'), + view='checkouts:check_in_document_multiple' ) link_check_out_info = Link( args='resolved_object.pk', icon_class=icon_check_out_info, permissions=( permission_document_check_out_detail_view, - ), text=_('Check in/out'), view='checkouts:check_out_info', + ), text=_('Check in/out'), view='checkouts:check_out_info' ) diff --git a/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.mo index 49f2d8a408..8463765734 100644 Binary files a/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.po index b105dc0e35..e7fbff4210 100644 --- a/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "Document checked out" msgid "Document forcefully checked in" msgstr "Document forcefully checked in" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Document already checked out." @@ -49,7 +49,7 @@ msgstr "Document already checked out." msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "مستخدم" @@ -77,11 +77,19 @@ msgstr "لا" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Amount of time to hold the document checked out in minutes." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Check out expiration date and time" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Do not allow new version of this document to be uploaded." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Document checkout" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "Check in documents" @@ -165,64 +181,53 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#: views.py:48 +#, python-format +msgid "Check in document: %s" msgstr "" -#: views.py:41 +#: views.py:102 #, python-format -msgid "Check in the document: %s?" -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Document has not been checked out." - -#: views.py:80 -#, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Document \"%s\" checked in successfully." - -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Check out details for document: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Document \"%s\" checked out successfully." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Check out document: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Check out details for document: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.mo index c16e546090..0b1a7a1519 100644 Binary files a/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po index 0db771651c..1bda1188c1 100644 --- a/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-16 11:41+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-04 16:41+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Изписване" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Изписани документи" @@ -42,7 +42,7 @@ msgstr "Документът е изписан" msgid "Document forcefully checked in" msgstr "Документът е принудително регистриран" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Документът вече е изписан." @@ -50,7 +50,7 @@ msgstr "Документът вече е изписан." msgid "Document status" msgstr "Състояние на документа" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Потребител" @@ -78,11 +78,19 @@ msgstr "Не" msgid "Check out document" msgstr "Изписване на документ" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "Изписване" + +#: links.py:52 msgid "Check in document" msgstr "Регистриране на документ" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "Вписване" + +#: links.py:62 msgid "Check in/out" msgstr "Регистриране / изписване" @@ -94,50 +102,58 @@ msgstr "Изписан" msgid "Checked in/available" msgstr "Регистрирани / налични" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Документ" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Дата и час на изписване" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Време за задържане на изписания документ в минути." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Срока на изписване - дата и час" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Забранете качването на нова версия на този документ." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Блокиране на качване на нова версия" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Изписване на документ" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Изписвания на документи" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Датата и часът за срока на изписване трябва да бъдат в бъдещето." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Ново блокиране на версията" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Нови блокирания на версията" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Час и дата на изписване" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Срок на изписване" + #: permissions.py:10 msgid "Check in documents" msgstr "Регистрирай документи" @@ -166,64 +182,45 @@ msgstr "Провери изписванията с изтекъл срок" msgid "Primary key of the document to be checked out." msgstr "Основен ключ на документа, който трябва да бъде изписан." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Не сте изписали този документ. Принудително регистрирайте документа: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "Проверете в документа %(count)d" +msgstr[1] "Впишете %(count)d документа" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Регистрирайте документ: %s?" +msgid "Check in document: %s" +msgstr "Впишете документ: %s" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Документът не е изписан." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Документ \"%s\" е регистриран успешно." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "Checkout %(count)d документ" +msgstr[1] "Изпишете %(count)d документа" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Данни за изписването на документ: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Документ \"%s\" изписан успешно." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Изпиши документ: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Данни за изписването на документ: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Час и дата на изписване" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Срок на изписване" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Изписването на документ блокира определени операции с документи за предварително определен период от време." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "Изписването на документ блокира някои операции за предварително определен период от време." -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Не са изписани документи" -#: views.py:187 -msgid "Documents checked out" -msgstr "Изписани документи" - #: widgets.py:27 msgid "Amount" msgstr "Брой" diff --git a/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.mo index b4c8b17ad4..5588934ecc 100644 Binary files a/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.po index 3a201b8011..80b76206b0 100644 --- a/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/bs_BA/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Odjave" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "Dokument odjavljen" msgid "Document forcefully checked in" msgstr "Dokument je prisilno prijavljen" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokument je već odjavljen." @@ -50,7 +50,7 @@ msgstr "Dokument je već odjavljen." msgid "Document status" msgstr "Status dokumenta" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Korisnik" @@ -78,11 +78,19 @@ msgstr "Ne" msgid "Check out document" msgstr "Pogledajte dokument" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Proverite dokument" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Proverite/pogledajte" @@ -94,50 +102,58 @@ msgstr "Odjavljen" msgid "Checked in/available" msgstr "Proveren/dostupan" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Datum i vrijeme odjave" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Vrijeme zadržavanja odjavljenog dokumenta u minutama " -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Datum i vrijeme istjecanja odjave" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Ne dozvoliti upload nove verzije ovog dokumenta." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Blokiranje nove verzije prenosa" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Odjava dokumenta" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Provera dokumenta" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Provera datuma i vremena isteka." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Novi blok verzije" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Novi blok verzije" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Provjerite vrijeme i datum" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Potvrda istrage" + #: permissions.py:10 msgid "Check in documents" msgstr "Prijaviti dokumente" @@ -166,64 +182,47 @@ msgstr "Provjerite istekle provjere" msgid "Primary key of the document to be checked out." msgstr "Primarni ključ dokumenta koji treba proveriti." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "niste prvobitno proverili ovaj dokument. Naporno proverite u dokumentu: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Proverite dokument::%s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Dokument nije odjavljen." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Dokument \"%s\" uspješno prijavljen." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Odjavni detalji za dokument: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Dokument \"%s\" uspješno odjavljen." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Odjaviti dokument: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Odjavni detalji za dokument: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Provjerite vrijeme i datum" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Potvrda istrage" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "Dokumenti su odjavljeni" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.mo index 4fecd840b9..bf183a82b1 100644 Binary files a/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po index a24300a44e..090e77988f 100644 --- a/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-21 09:57+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,11 +18,11 @@ msgstr "" "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:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Kontrola" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Dokomenty ke kontrole" @@ -42,7 +42,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -50,7 +50,7 @@ msgstr "" msgid "Document status" msgstr "Stav dokumentu" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Uživatel" @@ -78,11 +78,19 @@ msgstr "Ne" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -94,50 +102,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Nová verze bloku" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -166,64 +182,49 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "Množství" diff --git a/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.mo index d935aeacb7..a12ce6aa8e 100644 Binary files a/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.po index 9723b0c206..ed01984cf4 100644 --- a/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Bruger" @@ -77,11 +77,19 @@ msgstr "Nej" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.mo index 1ad949cf90..ba5b9f3e47 100644 Binary files a/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po index 959b2daf50..c5d2cde1c7 100644 --- a/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-08 10:29+0000\n" -"Last-Translator: Marvin Haschker \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,11 +22,11 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Ausbuchungen" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Ausgebuchte Dokumente" @@ -46,7 +46,7 @@ msgstr "Dokument ausgebucht" msgid "Document forcefully checked in" msgstr "Dokument zwingend eingebucht" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokument bereits ausgebucht." @@ -54,7 +54,7 @@ msgstr "Dokument bereits ausgebucht." msgid "Document status" msgstr "Dokumentenstatus" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Benutzer" @@ -82,11 +82,19 @@ msgstr "Nein" msgid "Check out document" msgstr "Dokument ausbuchen" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Dokument einbuchen" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Ein-/Ausbuchung" @@ -98,50 +106,58 @@ msgstr "Ausgebucht" msgid "Checked in/available" msgstr "Eingebucht/Verfügbar" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Ausbuchungszeit" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Zeitdauer, die das Dokument ausgebucht bleiben soll." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Ausbuchungsende" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Hochladen neuer Versionen dieses Dokuments nicht erlauben." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Hochladen neuer Versionen sperren" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Ausbuchung" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Ausbuchungen" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Ausbuchungsende muss in der Zukunft liegen." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Aktualisierungsschutz" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Aktualisierungsschutz" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Ausbuchungszeit" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Ausbuchungsende" + #: permissions.py:10 msgid "Check in documents" msgstr "Dokumente einbuchen" @@ -170,64 +186,45 @@ msgstr "Prüfe abgelaufene Ausbuchungen" msgid "Primary key of the document to be checked out." msgstr "Primärschlüssel des auszubuchenden Dokuments." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Sie haben dieses Dokument ursprünglich nicht ausgebucht. Soll Dokument %s trotzdem zwingend eingebucht werden?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Dokument %s einbuchen?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Dokument wurde nicht ausgebucht." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Dokument \"%s\" erfolgreich eingebucht." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Ausbuchungsdetails für Dokument %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Dokument \"%s\" erfolgreich ausgebucht." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Dokument %s ausbuchen" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Ausbuchungsdetails für Dokument %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Ausbuchungszeit" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Ausbuchungsende" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Das Ausbuchen eines Dokuments verhindert für eine bestimmte Zeit gewisse Operationen." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Keine Dokumente ausgebucht" -#: views.py:187 -msgid "Documents checked out" -msgstr "Ausgebuchte Dokumente" - #: widgets.py:27 msgid "Amount" msgstr "Menge" diff --git a/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.mo index 2516c9081e..d8f9097cee 100644 Binary files a/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.po index fb26741534..2a992fddf0 100644 --- a/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Χρήστης" @@ -77,11 +77,19 @@ msgstr "Όχι" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Έγγραφο" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/en/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/en/LC_MESSAGES/django.po index 744c624a93..c42e3d8361 100644 --- a/mayan/apps/checkouts/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "" @@ -77,11 +77,19 @@ msgstr "" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.mo index e23da209c3..807d8e3b0c 100644 Binary files a/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.po index 83cba2aec3..1919b604db 100644 --- a/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/es/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-09-24 21:04+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 22:19+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Reservaciones" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Documentos reservados" @@ -42,7 +42,7 @@ msgstr "Documento reservado" msgid "Document forcefully checked in" msgstr "Documento devuelto forzosamente" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "El documento ya está reservado." @@ -50,7 +50,7 @@ msgstr "El documento ya está reservado." msgid "Document status" msgstr "Estatus del documento" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Usuario" @@ -78,11 +78,19 @@ msgstr "No" msgid "Check out document" msgstr "Reservar documento" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "Reservar" + +#: links.py:52 msgid "Check in document" msgstr "Devolver documento" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "Devolver" + +#: links.py:62 msgid "Check in/out" msgstr "Reservas" @@ -94,50 +102,58 @@ msgstr "Reservado" msgid "Checked in/available" msgstr "Devuelto/disponible" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Documento" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Fecha y hora de la reservación" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Cantidad de tiempo para mantener el documento reservado, en minutos." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Fecha y hora de la expiración de la reserva." -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "No permitir que nuevas versiones de este documento sean cargadas." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Restringir la subida de nuevas versiones" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Reserva de documentos" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Reservaciones de documentos" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Fecha y hora de la expiración de la reserva deben ser en el futuro." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Bloquear nueva version" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Bloquear nuevas versiones" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Fecha y hora de reservación" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Expiración de la reservación" + #: permissions.py:10 msgid "Check in documents" msgstr "Devolver documentos" @@ -166,64 +182,45 @@ msgstr "Comprobar reservaciones caducadas" msgid "Primary key of the document to be checked out." msgstr "Llave primaria del documento que se va a reservar." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Usted no reservó inicialmente este documento. ¿Devolver forzosamente el documento: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "Devolver %(count)d documento" +msgstr[1] "Devolver %(count)ddocumentos" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "¿Devolver el documento: %s?" +msgid "Check in document: %s" +msgstr "Devolver documento: %s" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "El documento no ha sido reservado." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Documento \"%s\" devuelto con éxito." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "Reservar %(count)d documento" +msgstr[1] "Reservar %(count)d documentos" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Detalles de la reserva para el documento: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Document \"%s\" reservado con éxito." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Reservar el documento: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Detalles de la reserva para el documento: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Fecha y hora de reservación" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Expiración de la reservación" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Reservar un documento bloquea ciertas operaciones del documento durante un período de tiempo predeterminado." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "Al retirar un documento, bloquea ciertas operaciones durante un período de tiempo predeterminado." -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "No se han reservado documentos" -#: views.py:187 -msgid "Documents checked out" -msgstr "Documentos reservados" - #: widgets.py:27 msgid "Amount" msgstr "Cantidad" diff --git a/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.mo index e3ccba36bb..2f6b52fd89 100644 Binary files a/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.po index a5a8f6900d..d928e4072d 100644 --- a/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "خروج Checkout" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "سند خارج شد." msgid "Document forcefully checked in" msgstr "سند طبق دستور وارد شد." -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "سند در حال حاضر خارج و یا checked out شده است." @@ -50,7 +50,7 @@ msgstr "سند در حال حاضر خارج و یا checked out شده است." msgid "Document status" msgstr "وضعیت سند" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "کاربر" @@ -78,11 +78,19 @@ msgstr "خیر" msgid "Check out document" msgstr "خروج checkout سند" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "ورود check in سند" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "ورود/خروج" @@ -94,50 +102,58 @@ msgstr "خارج شده checked out" msgid "Checked in/available" msgstr "وارد شده و یا موجود Checked in" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "سند" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "تاریخ و زمان خروج check out" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "مدت زمان مجاز برای خارج نگه داشتن سند به دقیقه." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "انقضای مهلت خروج و یا Check out تاریخ و زمان" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "از بارگذاری نسخه جدید این سند جلوگیری کنید." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "آپلود نسخه و یا بلوک جدید" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "خروج و یا checkout سند" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "خروجی های check out سند" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "اتمام تاریخ انقضا و زمان باید در آینده باشد." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "بلوک نسخه جدید" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "بلوک نسخه جدید" +#: models.py:141 +msgid "Checkout time and date" +msgstr "زمان و تاریخ خروج" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "زمان پایان خارج بودن Checkout" + #: permissions.py:10 msgid "Check in documents" msgstr "ورود اسناد" @@ -166,64 +182,45 @@ msgstr "بررسی پرداخت های منقضی شده را بررسی کنی msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "ابتدا این سند را بررسی نکردید نیرویی در سند چک کنید: %s" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "در سند چک کنید: %s" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "سند خارج و یا checked out نشده است." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "سند \"%s\" با موفقیت وارد و یا checked in شد." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "جزئیات خروج و یا Checkout سند: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "سند \"%s\" بالاجبار خارج ویا checked out شد." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "خروج و یا check out سند: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "جزئیات خروج و یا Checkout سند: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "زمان و تاریخ خروج" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "زمان پایان خارج بودن Checkout" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "اسناد خارج شده check out" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.mo index 7c5a06f464..6af9814f00 100644 Binary files a/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.po index ffd200c4a2..3d61924358 100644 --- a/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-11-18 20:29+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,11 +22,11 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Verrouillages" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Documents verrouillés" @@ -46,7 +46,7 @@ msgstr "Document verrouillé" msgid "Document forcefully checked in" msgstr "Document déverrouillé de force" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Document déjà verrouillé." @@ -54,7 +54,7 @@ msgstr "Document déjà verrouillé." msgid "Document status" msgstr "Statut du document" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Utilisateur" @@ -82,11 +82,19 @@ msgstr "Non" msgid "Check out document" msgstr "Verrouiller le document" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Déverrouiller le document" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Verrouiller/déverrouiller" @@ -98,50 +106,58 @@ msgstr "Verrouillé" msgid "Checked in/available" msgstr "Déverrouillé/disponible" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Document" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Date et heure du verrouillage" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Durée en minutes pendant laquelle le document doit être verrouillé." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Date et heure de l'expiration du verrouillage" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Ne pas autoriser l'import d'une nouvelle version de ce document." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Empêcher l'import d'une nouvelle version" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Verrouillage du document" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Verrouillages du document" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "La date et l'heure d'expiration du verrouillage doit se situer dans le futur." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Bloc de la nouvelle version" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Blocs de la nouvelle version" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Date et heure du verrouillage" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Expiration du verrouillage" + #: permissions.py:10 msgid "Check in documents" msgstr "Déverrouiller les documents" @@ -170,64 +186,45 @@ msgstr "Vérifier les verrouillages expirés" msgid "Primary key of the document to be checked out." msgstr "Clé primaire du document devant être verrouillé." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Vous n'êtes pas celui qui a originellement verrouillé ce document. Êtes vous certain de vouloir forcer le déverrouillage de : %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Déverrouiller le document : %s ?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Le document n'a pas été verrouillé." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Document \"%s\" déverrouillé avec succès." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Détails du verrouillage pour le document : %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Document \"%s\" verrouillé avec succès." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Verrouiller le document : %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Détails du verrouillage pour le document : %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Date et heure du verrouillage" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Expiration du verrouillage" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Le verrouillage d'un document bloque certaines opérations sur le document pendant une durée prédéterminée." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Aucun document n'a été verrouillé" -#: views.py:187 -msgid "Documents checked out" -msgstr "Documents verrouillés" - #: widgets.py:27 msgid "Amount" msgstr "Nombre" diff --git a/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.mo index 63fe877a22..f66ed71a58 100644 Binary files a/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.po index 247fd068d3..f0452744e1 100644 --- a/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Kikölcsönzések" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "Dokumentum kikölcsönzés" msgid "Document forcefully checked in" msgstr "Dokumentum felűlbíráltan feltöltve" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokumentum már kikölcsönözve" @@ -50,7 +50,7 @@ msgstr "Dokumentum már kikölcsönözve" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Felhasználó" @@ -78,11 +78,19 @@ msgstr "Nem" msgid "Check out document" msgstr "Dokumentum kikölcsönzése" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Dokumentum feltöltése" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Feltöltés/kikölcsönzés" @@ -94,50 +102,58 @@ msgstr "Kikölcsönözve" msgid "Checked in/available" msgstr "Feltöltve/elérhető" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokumentum" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Kikölcsönzés dátuma és ideje" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Dokumentum kikölcsönzött státuszban tartásának ideje percekben" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Kikülcsönzés lejárati ideje" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Új dokumentum verzió feltöltésének tiltása" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Új verzió feltöltésének blokkolása" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Dokumentum kikölcsönzés" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Dokumentumok kikölcsönzése" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Kikölcsönzés dátuma és ideje" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Kikölcsönzés lejárta" + #: permissions.py:10 msgid "Check in documents" msgstr "Dokumentumok kikölcsönzése" @@ -166,64 +182,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" + +#: views.py:48 +#, python-format +msgid "Check in document: %s" msgstr "" -#: views.py:41 +#: views.py:102 #, python-format -msgid "Check in the document: %s?" -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "A dokumentum nem kerül kikölcsönzésre." - -#: views.py:80 -#, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "A \"%s\" dokumentum feltöltése sikeres." - -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Dokumentum kikölcsönzés részletei: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "A \"%s\" dokumentum kikölcsönzése sikeres." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Dokumentum kikölcsönzése: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Dokumentum kikölcsönzés részletei: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Kikölcsönzés dátuma és ideje" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Kikölcsönzés lejárta" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "Dokumentum kikölcsönzések" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.mo index 908469b24a..19d7fa968b 100644 Binary files a/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.po index 7a3b00a11d..f1315ec18c 100644 --- a/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Pengguna" @@ -77,11 +77,19 @@ msgstr "Tidak" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokumen" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,43 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.mo index 2f5e2b7690..673c3e98f9 100644 Binary files a/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.po index 879fb49cf8..648c6d16c6 100644 --- a/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/it/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Uscite" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "Documento in uscita" msgid "Document forcefully checked in" msgstr "Forza documento in entrata" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Documento già uscito" @@ -50,7 +50,7 @@ msgstr "Documento già uscito" msgid "Document status" msgstr "Stato documento" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Utente" @@ -78,11 +78,19 @@ msgstr "No" msgid "Check out document" msgstr "Documento in uscita" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Documento in entrata" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Check in / out" @@ -94,50 +102,58 @@ msgstr "Uscito" msgid "Checked in/available" msgstr "Check-in / disponibile" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Documento" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Uscito in data e ora" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Minuti disponibili per fermare il documento in checked out" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Scopri la data e l'ora di scadenza" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Non permettere che la nuova versione di questo documento sia caricata." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Blocca la nuova versione in caricamento" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Documento uscito" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Documenti usciti" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "La data e ora di uscita deve essere nel futuro." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Nuova versione blocco" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Nuove versioni blocco" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Ora e data checkout " + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Scadenza checkout " + #: permissions.py:10 msgid "Check in documents" msgstr "Check in documenti" @@ -166,64 +182,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Non hai originariamente fatto il checkout di questo documento. Forzare nel documento: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Accetti il documento: %s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Il documento non è stato fatto uscire" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Il documento \"%s\" è entrato con successo" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Dettaglio del check out per il documento: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Il documento\"%s\" è uscito con successo" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Check out documento: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Dettaglio del check out per il documento: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Ora e data checkout " - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Scadenza checkout " - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "Documenti estratti" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.mo index 2caff56af6..9db3cc3ccd 100644 Binary files a/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.po index eb449bea9f..36267d52ef 100644 --- a/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-04 06:48+0000\n" +"Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,11 +18,11 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Izraksti" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Izrakstītie dokumenti" @@ -42,7 +42,7 @@ msgstr "Dokuments izrakstīts" msgid "Document forcefully checked in" msgstr "Dokuments piespiedus pierakstīts" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokuments jau ir izrakstīts." @@ -50,7 +50,7 @@ msgstr "Dokuments jau ir izrakstīts." msgid "Document status" msgstr "Dokumenta statuss" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Lietotājs" @@ -78,11 +78,19 @@ msgstr "Nē" msgid "Check out document" msgstr "Izrakstīt dokumentu" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "Izrakstīt" + +#: links.py:52 msgid "Check in document" msgstr "Pierakstīt dokumentu" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "Pierakstīt" + +#: links.py:62 msgid "Check in/out" msgstr "Pierakstīts/izrakstīt" @@ -94,50 +102,58 @@ msgstr "Izrakstīts" msgid "Checked in/available" msgstr "Pierakstīts/pieejams" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokuments" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Izrakstīšanas datums un laiks" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Laiks minūtēs, cik ilgi turēt dokumentu izrakstītu." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Izrakstīšanas derīguma termiņš un laiks" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Neļaujiet augšupielādēt jaunu šī dokumenta versiju." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Bloķēt jaunu versiju augšupielādi" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Dokumentu izrakstīšana" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Dokumentu izrakstīšanas" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Izrakstīšanas derīguma termiņam un laikam ir jābūt norādītam nākotnē." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Jauna versijas bloks" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Jaunas versijas bloki" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Izraksta laiks un datums" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Izraksta derīguma termiņš" + #: permissions.py:10 msgid "Check in documents" msgstr "Pierakstītie dokumenti" @@ -166,64 +182,47 @@ msgstr "Pārbaudiet izbeigušos izrakstus" msgid "Primary key of the document to be checked out." msgstr "Izrakstāmā dokumenta primārā atslēga." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Sākotnēji jūs šo dokuments neizrakstījāt. Piespiedus pierakstīt dokumentu: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "Pierakstīt %(count)d dokumentus" +msgstr[1] "Pierakstīt %(count)d dokumentu" +msgstr[2] "Pierakstīt %(count)d dokumentus" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Pierakstīt dokumentu %s?" +msgid "Check in document: %s" +msgstr "Pierakstīt dokumentu: %s" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Dokuments nav ticis izrakstīts." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Dokuments \"%s\" pierakstīts veiksmīgi." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "Izrakstīt %(count)d dokumentus" +msgstr[1] "Izrakstīt %(count)d dokumentu" +msgstr[2] "Izrakstīt %(count)d dokumentus" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Izraksta detaļas dokumentam: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Dokuments \"%s\" izrakstīts veiksmīgi." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Izrakstīt dokumentu: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Izraksta detaļas dokumentam: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Izraksta laiks un datums" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Izraksta derīguma termiņš" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Dokumenta izrakstīšana bloķē noteiktas dokumentu darbības uz iepriekš noteiktu laika periodu." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "Izrakstot dokumentu, noteiktas darbības tiek bloķētas uz noteiktu laiku." -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Neviens dokuments nav izrakstīts" -#: views.py:187 -msgid "Documents checked out" -msgstr "Izrakstītie dokumenti" - #: widgets.py:27 msgid "Amount" -msgstr "" +msgstr "Apjoms" diff --git a/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.mo index 216ded08fd..b2d8a02b3e 100644 Binary files a/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.po index d687a6f99f..2a91be573d 100644 --- a/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/nl_NL/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -19,11 +19,11 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Checkouts" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -43,7 +43,7 @@ msgstr "Document uit-gecheckt" msgid "Document forcefully checked in" msgstr "Document geforceerd in-gecheckt" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Document reeds uit-gecheckt." @@ -51,7 +51,7 @@ msgstr "Document reeds uit-gecheckt." msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Gebruiker" @@ -79,11 +79,19 @@ msgstr "Nee" msgid "Check out document" msgstr "Document uit-checken" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Document in-checken" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "In/uit-checken" @@ -95,50 +103,58 @@ msgstr "Uit-checken" msgid "Checked in/available" msgstr "In-gecheckt/beschikbaar" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Document" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Uit-check datum en tijd" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Hoelang in minuten uitgedrukt het document uit-gecheckt houden. " -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Verloop-tijd en -datum van checkout" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Sta niet toe dat een nieuwe versie van dit document wordt geüpload." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Blokkeer uploaden van een nieuwe versie" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -167,64 +183,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.mo index f327503b1f..af408e8941 100644 Binary files a/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.po index 11e96a7be2..cae6cb6041 100644 --- a/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/pl/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-09-23 09:57+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,11 +20,11 @@ msgstr "" "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:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Blokady" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Zablokowane dokumenty" @@ -44,7 +44,7 @@ msgstr "Dokument został zablokowany" msgid "Document forcefully checked in" msgstr "Wymuszono odblokowanie dokumentu" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokument jest już zablokowany." @@ -52,7 +52,7 @@ msgstr "Dokument jest już zablokowany." msgid "Document status" msgstr "Status dokumentu" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Użytkownik" @@ -80,11 +80,19 @@ msgstr "Nie" msgid "Check out document" msgstr "Zablokuj dokument" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Odblokuj dokument" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Blokada" @@ -96,50 +104,58 @@ msgstr "Zablokowany" msgid "Checked in/available" msgstr "Odblokowany/dostępny" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Data i czas blokady" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Liczba dni, godzin lub minut w trakcie których dokument będzie zablokowany." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Data i czas wygaśnięcia blokady" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Brak możliwości dodania nowej wersji dokumentu." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Blokuj załadowanie nowej wersji" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Blokada dokumentu" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Blokady dokumentu" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Wygaśnięcie blokady musi nastąpić w przyszłości." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Blokada nowej wersji" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Blokady nowych wersji" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Rozpoczęcie blokady" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Wygaśnięcie blokady" + #: permissions.py:10 msgid "Check in documents" msgstr "Odblokuj dokumenty" @@ -168,64 +184,49 @@ msgstr "Sprawdź wygasłe blokady" msgid "Primary key of the document to be checked out." msgstr "Klucz podstawowy dokumentu do zablokowania." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Ten dokument nie został przez ciebie zablokowany. Czy wymusić odblokowanie dokumentu: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Odblokować dokument: %s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Dokument nie został zablokowany." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Dokument \"%s\" został pomyślnie odblokowany." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Szczegóły blokady dokumentu: %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Dokument \"%s\" został pomyślnie zablokowany." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Zablokuj dokument: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Szczegóły blokady dokumentu: %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Rozpoczęcie blokady" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Wygaśnięcie blokady" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Zablokowanie dokumentu blokuje niektóre operacje na dokumencie przez określony czas." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Żadne dokumenty nie zostały zablokowane" -#: views.py:187 -msgid "Documents checked out" -msgstr "Dokumenty zablokowane" - #: widgets.py:27 msgid "Amount" msgstr "Ilość" diff --git a/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.mo index 65cbd57034..bb871b59e8 100644 Binary files a/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.po index d5730ddbc8..a00b8d40de 100644 --- a/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Utilizador" @@ -77,11 +77,19 @@ msgstr "Não" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,45 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.mo index 1f43945bc8..e411ed298f 100644 Binary files a/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po index 3eeff7cccd..4ed20da98e 100644 --- a/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-10-16 16:50+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,11 +21,11 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Reservas" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Documentos retirados" @@ -45,7 +45,7 @@ msgstr "Documento reservado" msgid "Document forcefully checked in" msgstr "Documento devolvido forçosamente" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Documento já está reservado." @@ -53,7 +53,7 @@ msgstr "Documento já está reservado." msgid "Document status" msgstr "Status do documento" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Usuário" @@ -81,11 +81,19 @@ msgstr "Não" msgid "Check out document" msgstr "Reservar documentos" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Devolver documento" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Reservas" @@ -97,50 +105,58 @@ msgstr "Reservado" msgid "Checked in/available" msgstr "Devolvido/disponível" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Documento" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Data e hora da reserva" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Quantidade de tempo para manter o documento reservado em minutos." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Data e hora da expiração da reserva." -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Não permitir que novas versões deste documento sejam carregadas." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Restringir o carregamento de novas versões" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Reserva de documentos" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Reservas de documentos" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Data e hora da expiração da reserva deve ser no futuro." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Bloqueio de nova versão" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Bloqueios de nova versão" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Data e hora da reserva" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Expiração da reserva" + #: permissions.py:10 msgid "Check in documents" msgstr "Devolver documentos" @@ -169,64 +185,45 @@ msgstr "Verificar reservas expiradas" msgid "Primary key of the document to be checked out." msgstr "Chave primária do documento que será reservado." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Você não reservou inicialmente este documento. Devolver forçosamente o documento: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Devolver o documento: %s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "O documento não foi reservado." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Documento \"%s\" devolvido com sucesso." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Detalhes da reserva para o documento: %s " - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Documento \"%s\" reservado com êxito." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Reservar o documento: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Detalhes da reserva para o documento: %s " + #: views.py:168 -msgid "Checkout time and date" -msgstr "Data e hora da reserva" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Expiração da reserva" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Reservar um documento bloqueia certas operações do documento por um período de tempo pré-determinado." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Nenhum documento foi reservado." -#: views.py:187 -msgid "Documents checked out" -msgstr "Documentos reservados" - #: widgets.py:27 msgid "Amount" msgstr "Montante" diff --git a/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.mo index 3124555d17..4e212d9255 100644 Binary files a/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.po index ef905afc19..0a7eed9205 100644 --- a/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/ro_RO/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-09-03 08:31+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 13:26+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Consemnări intări/ieșiri" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "Documente consemnate ca ieșite" @@ -42,7 +42,7 @@ msgstr "Documentul consemnat ca ieșit" msgid "Document forcefully checked in" msgstr "Document consemnat forţat ca intrat" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Document deja consemnat ca ieșit." @@ -50,7 +50,7 @@ msgstr "Document deja consemnat ca ieșit." msgid "Document status" msgstr "Starea documentului" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Utilizator" @@ -78,11 +78,19 @@ msgstr "Nu" msgid "Check out document" msgstr "Consemnare ieșire document" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "Consemnare ca ieșit" + +#: links.py:52 msgid "Check in document" msgstr "Consemnare intrare document" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "Consemnare ca intrat" + +#: links.py:62 msgid "Check in/out" msgstr "Consemnare intrare/ieșire" @@ -94,50 +102,58 @@ msgstr "Consemnat ca ieșit" msgid "Checked in/available" msgstr "Consemnat ca intrat/disponibil" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Document" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Data și ora consemnării ieșirii" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Total timp alocat în minute pentru a deține documentul în mod consemnat ca ieșit." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Data și ora expirării consemnării ieșirii" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Nu se permite încărcarea unor noi versiuni ale documentului." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Blocați încărcarea de versiuni noi" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Document consemnat ca ieșit" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Consemnări de ieșiri de documente" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Data și ora expirării consemnării de ieșire trebuie să fie in viitor." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Blocare versiuni noi" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Blocări versiuni noi" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Data și ora expirării consemnării ieșirii" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Expirarea consemnării ca ieșit" + #: permissions.py:10 msgid "Check in documents" msgstr "Consemnări intrări de documente" @@ -166,64 +182,47 @@ msgstr "Consemnați drept intrate documentele cu consemnarea de ieșire expirat msgid "Primary key of the document to be checked out." msgstr "Cheia primară a documentului care urmează să fie consemnat ca ieșit." -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Nu ați inițiat consemnarea ca ieșit a acestui document. Consemnați forțat intrarea documentului: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "Verificați documentul %(count)d" +msgstr[1] "Verificați documentele %(count)d" +msgstr[2] "%(count)d documente consemnate ca intrate" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Consemnați ca intrat documentul: %s ?" +msgid "Check in document: %s" +msgstr "Document consemnat ca intrat: %s" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Documentul nu a fost consemnat ca ieșit." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Documentul \"%s\" aprobat cu succes." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "Verificați documentul %(count)d" +msgstr[1] "Verificați documentele %(count)d" +msgstr[2] "%(count)d documente consemnate ca ieșite" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Verificat detaliile documentului:% s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Documentul \"%s\" a fost consemnat ca ieșit cu succes." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Consemează ca ieșit documentul: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Verificat detaliile documentului:% s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Data și ora expirării consemnării ieșirii" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Expirarea consemnării ca ieșit" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "Consemnarea ca ieșit blochează unele operații asupra documentului pentru o perioadă de timp prestabilită." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "Consemnarea ca ieșit a unui document blochează anumite operațiuni pentru o perioadă de timp predeterminată." -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "Nu sunt documente consemnate ca ieșite" -#: views.py:187 -msgid "Documents checked out" -msgstr "Documente consemnate ca ieșite" - #: widgets.py:27 msgid "Amount" msgstr "Cantitate" diff --git a/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.mo index 8c1fc96a5c..65230aecb9 100644 Binary files a/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.po index 72fe9b7bce..fb964df917 100644 --- a/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "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" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Забронированные документы" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "Документ забронирован" msgid "Document forcefully checked in" msgstr "Документ освобождён насильно" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Документ уже забронирован." @@ -50,7 +50,7 @@ msgstr "Документ уже забронирован." msgid "Document status" msgstr "Статус документа" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Пользователь" @@ -78,11 +78,19 @@ msgstr "Нет" msgid "Check out document" msgstr "Забронировать документ" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Освободить документ" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Освободить/забронировать" @@ -94,50 +102,58 @@ msgstr "Разбронирован" msgid "Checked in/available" msgstr "Освобождён/доступен" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Документ" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Дата и время брониварония" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Время бронирования документа в минутах." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Дата и время окончания бронирования" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Запретить загрузку новых версий документа." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Заблокировать загрузку новых версий" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Бронирование документа" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Забронированные документы" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Время окончания брованирования должно быть в будущем." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Блокировка добавления новых версий" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Блокировки добавления новых версий" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Дата и время бронирования" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Истечение бронирования" + #: permissions.py:10 msgid "Check in documents" msgstr "Освобождение документов" @@ -166,64 +182,49 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Документ был забронирован не вами. Освободить насильно %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Освободить документ: %s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Документ не был забронирован." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "Документ \"%s\" освобожден." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "Подробности бронирования %s" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "Документ \"%s\" забронирован." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Бронирование документа: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "Подробности бронирования %s" + #: views.py:168 -msgid "Checkout time and date" -msgstr "Дата и время бронирования" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Истечение бронирования" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "Документы забронированы" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.mo index 4385415063..a71a1076a9 100644 Binary files a/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.po index bb64286d66..8d7e4d8a09 100644 --- a/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Odjave" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "Dokument prijavljen" msgid "Document forcefully checked in" msgstr "Dokumentu je vsiljena prijava" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Dokument je že odjavljen" @@ -49,7 +49,7 @@ msgstr "Dokument je že odjavljen" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "" @@ -77,11 +77,19 @@ msgstr "Ne" msgid "Check out document" msgstr "Odjavi dokument" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Prijavi dokument" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Prijava / Odjava" @@ -93,50 +101,58 @@ msgstr "Odjavljen" msgid "Checked in/available" msgstr "Prijavljen / na voljo" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Dokument" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Oglejte si datum in čas" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,49 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.mo index 25236a2754..2caa29b9f6 100644 Binary files a/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.po index 1a98a196d8..be290e3258 100644 --- a/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/tr_TR/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "Teslim alınmışlar" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -42,7 +42,7 @@ msgstr "Belge teslim alındı" msgid "Document forcefully checked in" msgstr "Belge zorla teslim edildi" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "Belge zaten teslim alınmış." @@ -50,7 +50,7 @@ msgstr "Belge zaten teslim alınmış." msgid "Document status" msgstr "Belge durumu" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Kullanıcı" @@ -78,11 +78,19 @@ msgstr "Hayır" msgid "Check out document" msgstr "Belgeyi teslim al" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "Belgeyi teslim et" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "Teslim al / et" @@ -94,50 +102,58 @@ msgstr "Teslim alındı" msgid "Checked in/available" msgstr "Teslim etme aktif" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "Belge" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "Teslim alma tarih ve saati" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "Belgeyi elde tutma zamanı /dakika." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "Teslim alma son kullanma tarihi ve saati" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "Bu belgenin yeni sürümünün yüklenmesine izin vermeyin." -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "Yeni sürümü yüklemeyi engelle" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "Belge teslim alma" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "Belge teslim alma kayıtları" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "Teslim alma son kullanma tarihini gelecekte olmalıdır." -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "Yeni sürüm engelleme" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "Yeni sürüm engellemeleri" +#: models.py:141 +msgid "Checkout time and date" +msgstr "Teslim alma zamanı ve tarihi" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Teslim alma kullanımının sona erme tarihi" + #: permissions.py:10 msgid "Check in documents" msgstr "Belgeleri teslim et" @@ -166,64 +182,45 @@ msgstr "Süresi geçen teslim alma kayıt kontrolü" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "Aslında bu belgeyi teslim alamadın. Belgeyi zorla teslim al: %s?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "Belgeyi teslim edin: %s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "Belge teslim alınamadı." - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "\"%s\" belgesi başarıyla teslim edildi." +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" +msgstr[1] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "%s Belge ayrıntılarını kontrol edin: " - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "\"%s\" belgesi başarıyla teslim alındı." - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "Belgeye teslim alın: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "%s Belge ayrıntılarını kontrol edin: " + #: views.py:168 -msgid "Checkout time and date" -msgstr "Teslim alma zamanı ve tarihi" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "Teslim alma kullanımının sona erme tarihi" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "Belgeler teslim alındı" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.mo index 30394b50fc..6fab8d829a 100644 Binary files a/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.po index b205e364b9..4bfeb7af70 100644 --- a/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -17,11 +17,11 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "" @@ -41,7 +41,7 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" @@ -49,7 +49,7 @@ msgstr "" msgid "Document status" msgstr "" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Người dùng" @@ -77,11 +77,19 @@ msgstr "" msgid "Check out document" msgstr "" -#: links.py:47 -msgid "Check in document" +#: links.py:45 +msgid "Check out" msgstr "" #: links.py:52 +msgid "Check in document" +msgstr "" + +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "" @@ -93,50 +101,58 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "" + #: permissions.py:10 msgid "Check in documents" msgstr "" @@ -165,64 +181,43 @@ msgstr "" msgid "Primary key of the document to be checked out." msgstr "" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" +msgid "Check in document: %s" msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "" + #: views.py:168 -msgid "Checkout time and date" -msgstr "" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "" -#: views.py:187 -msgid "Documents checked out" -msgstr "" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.mo index 15713ef8fb..217e1d5591 100644 Binary files a/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.po b/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.po index e7dda47d45..e381dacf60 100644 --- a/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:12-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -18,11 +18,11 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:41 events.py:7 links.py:34 +#: apps.py:45 events.py:7 links.py:34 msgid "Checkouts" msgstr "签出" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" msgstr "已签出的文档" @@ -42,7 +42,7 @@ msgstr "签出的文档" msgid "Document forcefully checked in" msgstr "强制签入文档" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "文档已经签出。" @@ -50,7 +50,7 @@ msgstr "文档已经签出。" msgid "Document status" msgstr "文档状态" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "用户" @@ -78,11 +78,19 @@ msgstr "否" msgid "Check out document" msgstr "签出文档" -#: links.py:47 +#: links.py:45 +msgid "Check out" +msgstr "" + +#: links.py:52 msgid "Check in document" msgstr "签入文档" -#: links.py:52 +#: links.py:56 +msgid "Check in" +msgstr "" + +#: links.py:62 msgid "Check in/out" msgstr "签入/签出" @@ -94,50 +102,58 @@ msgstr "签出" msgid "Checked in/available" msgstr "签入/可用" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" msgstr "文档" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" msgstr "查看日期和时间" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." msgstr "签出文件需要几分钟的时间" -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" msgstr "查看到期日期和时间" -#: models.py:46 +#: models.py:49 msgid "Do not allow new version of this document to be uploaded." msgstr "不允许上传此文档的新版本。" -#: models.py:48 +#: models.py:51 msgid "Block new version upload" msgstr "阻止新版本上传" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" msgstr "文档签出" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" msgstr "文档签出" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." msgstr "签出到期时间必须是当前时间之后" -#: models.py:116 +#: models.py:120 msgid "New version block" msgstr "新版本阻止" -#: models.py:117 +#: models.py:121 msgid "New version blocks" msgstr "新版本阻止" +#: models.py:141 +msgid "Checkout time and date" +msgstr "签出时间和日期" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "签出到期时间" + #: permissions.py:10 msgid "Check in documents" msgstr "签入文档" @@ -166,64 +182,43 @@ msgstr "检查过期的签出" msgid "Primary key of the document to be checked out." msgstr "要检出的文件的主键。" -#: views.py:37 +#: views.py:35 #, python-format -msgid "" -"You didn't originally checked out this document. Forcefully check in the " -"document: %s?" -msgstr "该文档已被签出,强制签出:%s 吗?" +msgid "Check in %(count)d document" +msgid_plural "Check in %(count)d documents" +msgstr[0] "" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "签入文档:%s?" +msgid "Check in document: %s" +msgstr "" -#: views.py:74 -msgid "Document has not been checked out." -msgstr "文档尚未签出。" - -#: views.py:80 +#: views.py:102 #, python-format -msgid "Document \"%s\" checked in successfully." -msgstr "文档“%s”已成功签入。" +msgid "Checkout %(count)d document" +msgid_plural "Checkout %(count)d documents" +msgstr[0] "" -#: views.py:94 -#, python-format -msgid "Check out details for document: %s" -msgstr "%s 签出详情" - -#: views.py:128 -#, python-format -msgid "Document \"%s\" checked out successfully." -msgstr "文档: \"%s\" 签出成功。" - -#: views.py:137 +#: views.py:115 #, python-format msgid "Check out document: %s" msgstr "签出文档: %s" +#: views.py:149 +#, python-format +msgid "Check out details for document: %s" +msgstr "%s 签出详情" + #: views.py:168 -msgid "Checkout time and date" -msgstr "签出时间和日期" - -#: views.py:174 -msgid "Checkout expiration" -msgstr "签出到期时间" - -#: views.py:182 msgid "" -"Checking out a document blocks certain document operations for a " -"predetermined amount of time." -msgstr "签出文档会在预定的时间内阻塞关联文档操作。" +"Checking out a document, blocks certain operations for a predetermined " +"amount of time." +msgstr "" -#: views.py:186 +#: views.py:171 msgid "No documents have been checked out" msgstr "文档未被签出" -#: views.py:187 -msgid "Documents checked out" -msgstr "签出的文件" - #: widgets.py:27 msgid "Amount" msgstr "" diff --git a/mayan/apps/checkouts/managers.py b/mayan/apps/checkouts/managers.py index 674a77257e..6fbebfc5e1 100644 --- a/mayan/apps/checkouts/managers.py +++ b/mayan/apps/checkouts/managers.py @@ -6,6 +6,7 @@ from django.apps import apps from django.db import models, transaction from django.utils.timezone import now +from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.models import Document from .events import ( @@ -14,10 +15,58 @@ from .events import ( ) from .exceptions import DocumentNotCheckedOut from .literals import STATE_CHECKED_OUT, STATE_CHECKED_IN +from .permissions import ( + permission_document_check_in, permission_document_check_in_override +) logger = logging.getLogger(__name__) +class DocumentCheckoutBusinessLogicManager(models.Manager): + def check_in_document(self, document, user=None): + # Convert any document submodel to the parent model class + queryset = document._meta.default_manager.filter(pk=document.pk) + + if not self.filter(document__pk__in=queryset).exists(): + raise DocumentNotCheckedOut + + return self.check_in_documents(queryset=queryset, user=user) + + def check_in_documents(self, queryset, user=None): + if user: + user_document_checkouts = AccessControlList.objects.restrict_queryset( + permission=permission_document_check_in, + queryset=self.filter(user_id=user.pk, document__in=queryset), + user=user + ) + + others_document_checkouts = AccessControlList.objects.restrict_queryset( + permission=permission_document_check_in_override, + queryset=self.exclude(user_id=user.pk, document__in=queryset), + user=user + ) + + with transaction.atomic(): + if user: + for checkout in user_document_checkouts: + event_document_check_in.commit( + actor=user, target=checkout.document + ) + checkout.delete() + + for checkout in others_document_checkouts: + event_document_forceful_check_in.commit( + actor=user, target=checkout.document + ) + checkout.delete() + else: + for checkout in self.filter(document__in=queryset): + event_document_auto_check_in.commit( + target=checkout.document + ) + checkout.delete() + + class DocumentCheckoutManager(models.Manager): def are_document_new_versions_allowed(self, document, user=None): try: @@ -27,25 +76,6 @@ class DocumentCheckoutManager(models.Manager): else: return not check_out_info.block_new_version - def check_in_document(self, document, user=None): - try: - document_check_out = self.model.objects.get(document=document) - except self.model.DoesNotExist: - raise DocumentNotCheckedOut - else: - with transaction.atomic(): - if user: - if self.get_check_out_info(document=document).user != user: - event_document_forceful_check_in.commit( - actor=user, target=document - ) - else: - event_document_check_in.commit(actor=user, target=document) - else: - event_document_auto_check_in.commit(target=document) - - document_check_out.delete() - def check_in_expired_check_outs(self): for document in self.expired_check_outs(): document.check_in() @@ -57,7 +87,11 @@ class DocumentCheckoutManager(models.Manager): ) def checked_out_documents(self): - return Document.objects.filter( + CheckedOutDocument = apps.get_model( + app_label='checkouts', model_name='CheckedOutDocument' + ) + + return CheckedOutDocument.objects.filter( pk__in=self.model.objects.values('document__id') ) @@ -74,7 +108,11 @@ class DocumentCheckoutManager(models.Manager): return STATE_CHECKED_IN def expired_check_outs(self): - expired_list = Document.objects.filter( + CheckedOutDocument = apps.get_model( + app_label='checkouts', model_name='CheckedOutDocument' + ) + + expired_list = CheckedOutDocument.objects.filter( pk__in=self.model.objects.filter( expiration_datetime__lte=now() ).values_list('document__pk', flat=True) @@ -83,9 +121,6 @@ class DocumentCheckoutManager(models.Manager): return expired_list def get_by_natural_key(self, document_natural_key): - Document = apps.get_model( - app_label='documents', model_name='Document' - ) try: document = Document.objects.get_by_natural_key(document_natural_key) except Document.DoesNotExist: diff --git a/mayan/apps/checkouts/methods.py b/mayan/apps/checkouts/methods.py index 680f6cf4c7..3972807a8f 100644 --- a/mayan/apps/checkouts/methods.py +++ b/mayan/apps/checkouts/methods.py @@ -8,7 +8,7 @@ def method_check_in(self, user=None): app_label='checkouts', model_name='DocumentCheckout' ) - return DocumentCheckout.objects.check_in_document( + return DocumentCheckout.business_logic.check_in_document( document=self, user=user ) diff --git a/mayan/apps/checkouts/migrations/0008_checkedoutdocument.py b/mayan/apps/checkouts/migrations/0008_checkedoutdocument.py new file mode 100644 index 0000000000..123466057f --- /dev/null +++ b/mayan/apps/checkouts/migrations/0008_checkedoutdocument.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0050_auto_20190725_0451'), + ('checkouts', '0007_auto_20180310_1715'), + ] + + operations = [ + migrations.CreateModel( + name='CheckedOutDocument', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + }, + bases=('documents.document',), + ), + ] diff --git a/mayan/apps/checkouts/models.py b/mayan/apps/checkouts/models.py index c724e21db8..5efc322dff 100644 --- a/mayan/apps/checkouts/models.py +++ b/mayan/apps/checkouts/models.py @@ -14,7 +14,10 @@ from mayan.apps.documents.models import Document from .events import event_document_check_out from .exceptions import DocumentAlreadyCheckedOut -from .managers import DocumentCheckoutManager, NewVersionBlockManager +from .managers import ( + DocumentCheckoutBusinessLogicManager, DocumentCheckoutManager, + NewVersionBlockManager +) logger = logging.getLogger(__name__) @@ -49,6 +52,7 @@ class DocumentCheckout(models.Model): ) objects = DocumentCheckoutManager() + business_logic = DocumentCheckoutBusinessLogicManager() class Meta: ordering = ('pk',) @@ -81,13 +85,13 @@ class DocumentCheckout(models.Model): natural_key.dependencies = ['documents.Document'] def save(self, *args, **kwargs): - new_checkout = not self.pk - if not new_checkout or self.document.is_checked_out(): + is_new = not self.pk + if not is_new or self.document.is_checked_out(): raise DocumentAlreadyCheckedOut with transaction.atomic(): result = super(DocumentCheckout, self).save(*args, **kwargs) - if new_checkout: + if is_new: event_document_check_out.commit( actor=self.user, target=self.document ) @@ -119,3 +123,24 @@ class NewVersionBlock(models.Model): def natural_key(self): return self.document.natural_key() natural_key.dependencies = ['documents.Document'] + + +class CheckedOutDocument(Document): + class Meta: + proxy = True + + def get_user_display(self): + check_out_info = self.get_check_out_info() + return check_out_info.user.get_full_name() or check_out_info.user + + get_user_display.short_description = _('User') + + def get_checkout_datetime(self): + return self.get_check_out_info().checkout_datetime + + get_checkout_datetime.short_description = _('Checkout time and date') + + def get_checkout_expiration(self): + return self.get_check_out_info().expiration_datetime + + get_checkout_expiration.short_description = _('Checkout expiration') diff --git a/mayan/apps/checkouts/tests/mixins.py b/mayan/apps/checkouts/tests/mixins.py index 745d5ce6aa..82f2474414 100644 --- a/mayan/apps/checkouts/tests/mixins.py +++ b/mayan/apps/checkouts/tests/mixins.py @@ -5,6 +5,7 @@ import datetime from django.utils.timezone import now from mayan.apps.common.literals import TIME_DELTA_UNIT_DAYS +from mayan.apps.common.tests.utils import as_id_list from ..models import DocumentCheckout @@ -70,16 +71,13 @@ class DocumentCheckoutViewTestMixin(object): } ) - def _request_test_document_check_out_detail_view(self): - return self.get( - viewname='checkouts:check_out_info', kwargs={ - 'pk': self.test_document.pk + def _request_test_document_multiple_check_in_post_view(self): + return self.post( + viewname='checkouts:check_in_document_multiple', data={ + 'id_list': as_id_list(items=self.test_documents) } ) - def _request_test_document_check_out_list_view(self): - return self.get(viewname='checkouts:check_out_list') - def _request_test_document_check_out_get_view(self): return self.get( viewname='checkouts:check_out_document', kwargs={ @@ -97,3 +95,23 @@ class DocumentCheckoutViewTestMixin(object): 'block_new_version': True } ) + + def _request_test_document_multiple_check_out_post_view(self): + return self.post( + viewname='checkouts:check_out_document_multiple', data={ + 'block_new_version': True, + 'expiration_datetime_unit': TIME_DELTA_UNIT_DAYS, + 'expiration_datetime_amount': 99, + 'id_list': as_id_list(items=self.test_documents) + } + ) + + def _request_test_document_check_out_detail_view(self): + return self.get( + viewname='checkouts:check_out_info', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_test_document_check_out_list_view(self): + return self.get(viewname='checkouts:check_out_list') diff --git a/mayan/apps/checkouts/tests/test_api.py b/mayan/apps/checkouts/tests/test_api.py index b87af58efa..73a698d280 100644 --- a/mayan/apps/checkouts/tests/test_api.py +++ b/mayan/apps/checkouts/tests/test_api.py @@ -4,9 +4,9 @@ from django.utils.encoding import force_text from rest_framework import status -from mayan.apps.documents.tests import DocumentTestMixin from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..permissions import ( permission_document_check_in, permission_document_check_in_override, diff --git a/mayan/apps/checkouts/tests/test_links.py b/mayan/apps/checkouts/tests/test_links.py index 1debe57e29..1fd88ad8aa 100644 --- a/mayan/apps/checkouts/tests/test_links.py +++ b/mayan/apps/checkouts/tests/test_links.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..links import link_check_out_document, link_check_out_info from ..permissions import ( diff --git a/mayan/apps/checkouts/tests/test_models.py b/mayan/apps/checkouts/tests/test_models.py index b6015d0016..b449c654ac 100644 --- a/mayan/apps/checkouts/tests/test_models.py +++ b/mayan/apps/checkouts/tests/test_models.py @@ -2,11 +2,10 @@ from __future__ import unicode_literals import time -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.tests import ( - GenericDocumentTestCase, DocumentTestMixin -) +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.documents.tests.base import GenericDocumentTestCase from mayan.apps.documents.tests.literals import TEST_SMALL_DOCUMENT_PATH +from mayan.apps.documents.tests.mixins import DocumentTestMixin from ..exceptions import ( DocumentAlreadyCheckedOut, DocumentNotCheckedOut, @@ -53,7 +52,7 @@ class DocumentCheckoutTestCase( block_new_version=True ) - def test_document_checkin_without_checkout(self): + def test_document_check_in_without_check_out(self): with self.assertRaises(DocumentNotCheckedOut): self.test_document.check_in() diff --git a/mayan/apps/checkouts/tests/test_views.py b/mayan/apps/checkouts/tests/test_views.py index 3258c5a351..d563d33936 100644 --- a/mayan/apps/checkouts/tests/test_views.py +++ b/mayan/apps/checkouts/tests/test_views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from mayan.apps.sources.links import link_document_version_upload from ..literals import STATE_CHECKED_OUT, STATE_LABELS @@ -22,8 +22,8 @@ class DocumentCheckoutViewTestCase( self._check_out_test_document() response = self._request_test_document_check_in_get_view() - self.assertContains( - response=response, text=self.test_document.label, status_code=200 + self.assertNotContains( + response=response, text=self.test_document.label, status_code=404 ) self.assertTrue(self.test_document.is_checked_out()) @@ -46,7 +46,7 @@ class DocumentCheckoutViewTestCase( self._check_out_test_document() response = self._request_test_document_check_in_post_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) self.assertTrue(self.test_document.is_checked_out()) @@ -67,9 +67,89 @@ class DocumentCheckoutViewTestCase( ) ) + def test_document_multiple_check_in_post_view_no_permission(self): + # Upload second document + self.upload_document() + + self._check_out_test_document(document=self.test_documents[0]) + self._check_out_test_document(document=self.test_documents[1]) + + response = self._request_test_document_multiple_check_in_post_view() + self.assertEqual(response.status_code, 404) + + self.assertTrue(self.test_documents[0].is_checked_out()) + self.assertTrue(self.test_documents[1].is_checked_out()) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + + def test_document_multiple_check_in_post_view_with_document_0_access(self): + # Upload second document + self.upload_document() + + self._check_out_test_document(document=self.test_documents[0]) + self._check_out_test_document(document=self.test_documents[1]) + + self.grant_access( + obj=self.test_documents[0], permission=permission_document_check_in + ) + + response = self._request_test_document_multiple_check_in_post_view() + self.assertEqual(response.status_code, 302) + + self.assertFalse(self.test_documents[0].is_checked_out()) + self.assertTrue(self.test_documents[1].is_checked_out()) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + + def test_document_multiple_check_in_post_view_with_access(self): + # Upload second document + self.upload_document() + + self._check_out_test_document(document=self.test_documents[0]) + self._check_out_test_document(document=self.test_documents[1]) + + self.grant_access( + obj=self.test_documents[0], permission=permission_document_check_in + ) + self.grant_access( + obj=self.test_documents[1], permission=permission_document_check_in + ) + + response = self._request_test_document_multiple_check_in_post_view() + self.assertEqual(response.status_code, 302) + + self.assertFalse(self.test_documents[0].is_checked_out()) + self.assertFalse(self.test_documents[1].is_checked_out()) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + def test_document_check_out_get_view_no_permission(self): response = self._request_test_document_check_out_get_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) self.assertFalse(self.test_document.is_checked_out()) @@ -85,7 +165,7 @@ class DocumentCheckoutViewTestCase( def test_document_check_out_post_view_no_permission(self): response = self._request_test_document_check_out_post_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) self.assertFalse(self.test_document.is_checked_out()) @@ -103,6 +183,102 @@ class DocumentCheckoutViewTestCase( self.assertTrue(self.test_document.is_checked_out()) + def test_document_multiple_check_out_post_view_no_permission(self): + # Upload second document + self.upload_document() + + self.grant_access( + obj=self.test_documents[0], + permission=permission_document_check_out_detail_view + ) + self.grant_access( + obj=self.test_documents[1], + permission=permission_document_check_out_detail_view + ) + + response = self._request_test_document_multiple_check_out_post_view() + self.assertEqual(response.status_code, 404) + + self.assertFalse(self.test_documents[0].is_checked_out()) + self.assertFalse(self.test_documents[1].is_checked_out()) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + + def test_document_multiple_check_out_post_view_with_document_access(self): + # Upload second document + self.upload_document() + + self.grant_access( + obj=self.test_documents[0], permission=permission_document_check_out + ) + self.grant_access( + obj=self.test_documents[0], + permission=permission_document_check_out_detail_view + ) + self.grant_access( + obj=self.test_documents[1], + permission=permission_document_check_out_detail_view + ) + + response = self._request_test_document_multiple_check_out_post_view() + self.assertEqual(response.status_code, 302) + + self.assertTrue(self.test_documents[0].is_checked_out()) + self.assertFalse(self.test_documents[1].is_checked_out()) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertFalse( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + + def test_document_multiple_check_out_post_view_with_access(self): + # Upload second document + self.upload_document() + + self.grant_access( + obj=self.test_documents[0], permission=permission_document_check_out + ) + self.grant_access( + obj=self.test_documents[1], permission=permission_document_check_out + ) + self.grant_access( + obj=self.test_documents[0], + permission=permission_document_check_out_detail_view + ) + self.grant_access( + obj=self.test_documents[1], + permission=permission_document_check_out_detail_view + ) + + response = self._request_test_document_multiple_check_out_post_view() + self.assertEqual(response.status_code, 302) + + self.assertTrue(self.test_documents[0].is_checked_out()) + self.assertTrue(self.test_documents[1].is_checked_out()) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[0] + ) + ) + self.assertTrue( + DocumentCheckout.objects.is_checked_out( + document=self.test_documents[1] + ) + ) + def test_document_check_out_detail_view_no_permission(self): self._check_out_test_document() @@ -172,19 +348,18 @@ class DocumentCheckoutViewTestCase( 'pk': self.test_document.pk } ) - self.assertContains( - response=response, text='Insufficient permissions', status_code=403 - ) + self.assertEqual(response.status_code, 302) self.assertTrue(self.test_document.is_checked_out()) - def test_document_check_in_forcefull_view_with_permission(self): + def test_document_check_in_forcefull_view_with_access(self): self._create_test_user() # Check out document as test_user self._check_out_test_document(user=self.test_user) self.grant_access( - obj=self.test_document, permission=permission_document_check_in_override + obj=self.test_document, + permission=permission_document_check_in_override ) # Check in document as test_case_user @@ -217,7 +392,7 @@ class NewVersionBlockViewTestCase( self.login_superuser() response = self.post( - viewname='sources:upload_version', kwargs={ + viewname='sources:document_version_upload', kwargs={ 'document_pk': self.test_document.pk }, follow=True ) @@ -235,6 +410,8 @@ class NewVersionBlockViewTestCase( # Needed by the url view resolver response.context.current_app = None - resolved_link = link_document_version_upload.resolve(context=response.context) + resolved_link = link_document_version_upload.resolve( + context=response.context + ) self.assertEqual(resolved_link, None) diff --git a/mayan/apps/checkouts/urls.py b/mayan/apps/checkouts/urls.py index 87dfff5c73..f79579bd51 100644 --- a/mayan/apps/checkouts/urls.py +++ b/mayan/apps/checkouts/urls.py @@ -4,8 +4,8 @@ from django.conf.urls import url from .api_views import APICheckedoutDocumentListView, APICheckedoutDocumentView from .views import ( - DocumentCheckOutView, DocumentCheckOutDetailView, DocumentCheckOutListView, - DocumentCheckInView + DocumentCheckInView, DocumentCheckOutDetailView, DocumentCheckOutListView, + DocumentCheckOutView ) urlpatterns = [ @@ -14,16 +14,25 @@ urlpatterns = [ name='check_out_list' ), url( - regex=r'^documents/(?P\d+)/check/out/$', view=DocumentCheckOutView.as_view(), - name='check_out_document' + regex=r'^documents/(?P\d+)/check/in/$', + view=DocumentCheckInView.as_view(), name='check_in_document' ), url( - regex=r'^documents/(?P\d+)/check/in/$', view=DocumentCheckInView.as_view(), - name='check_in_document' + regex=r'^documents/multiple/check/in/$', + name='check_in_document_multiple', view=DocumentCheckInView.as_view() ), url( - regex=r'^documents/(?P\d+)/check/info/$', view=DocumentCheckOutDetailView.as_view(), - name='check_out_info' + regex=r'^documents/(?P\d+)/check/out/$', + view=DocumentCheckOutView.as_view(), name='check_out_document' + ), + url( + regex=r'^documents/multiple/check/out/$', + name='check_out_document_multiple', + view=DocumentCheckOutView.as_view() + ), + url( + regex=r'^documents/(?P\d+)/checkout/info/$', + view=DocumentCheckOutDetailView.as_view(), name='check_out_info' ), ] diff --git a/mayan/apps/checkouts/views.py b/mayan/apps/checkouts/views.py index 4bab799063..f19f81e978 100644 --- a/mayan/apps/checkouts/views.py +++ b/mayan/apps/checkouts/views.py @@ -1,21 +1,17 @@ from __future__ import absolute_import, unicode_literals -from django.contrib import messages -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404 from django.urls import reverse -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, ungettext from mayan.apps.acls.models import AccessControlList from mayan.apps.common.generics import ( - ConfirmView, SingleObjectCreateView, SingleObjectDetailView + MultipleObjectConfirmActionView, MultipleObjectFormActionView, + SingleObjectDetailView ) -from mayan.apps.common.utils import encapsulate from mayan.apps.documents.models import Document -from mayan.apps.documents.views import DocumentListView +from mayan.apps.documents.views.document_views import DocumentListView -from .exceptions import DocumentAlreadyCheckedOut, DocumentNotCheckedOut -from .forms import DocumentCheckoutForm, DocumentCheckoutDefailForm +from .forms import DocumentCheckOutForm, DocumentCheckOutDetailForm from .icons import icon_check_out_info from .models import DocumentCheckout from .permissions import ( @@ -24,66 +20,125 @@ from .permissions import ( ) -class DocumentCheckInView(ConfirmView): - def get_extra_context(self): - document = self.get_object() +class DocumentCheckInView(MultipleObjectConfirmActionView): + error_message = 'Unable to check in document "%(instance)s". %(exception)s' + model = Document + pk_url_kwarg = 'pk' + success_message_singular = '%(count)d document checked in.' + success_message_plural = '%(count)d documents checked in.' - context = { - 'object': document, + def get_extra_context(self): + queryset = self.get_object_list() + + result = { + 'title': ungettext( + singular='Check in %(count)d document', + plural='Check in %(count)d documents', + number=queryset.count() + ) % { + 'count': queryset.count(), + } } - if document.get_check_out_info().user != self.request.user: - context['title'] = _( - 'You didn\'t originally checked out this document. ' - 'Forcefully check in the document: %s?' - ) % document + if queryset.count() == 1: + result.update( + { + 'object': queryset.first(), + 'title': _( + 'Check in document: %s' + ) % queryset.first() + } + ) + + return result + + def get_post_object_action_url(self): + if self.action_count == 1: + return reverse( + viewname='checkouts:document_checkout_info', + kwargs={'pk': self.action_id_list[0]} + ) else: - context['title'] = _('Check in the document: %s?') % document + super(DocumentCheckInView, self).get_post_action_redirect() - return context + def get_source_queryset(self): + # object_permission is None to disable restricting queryset mixin + # and restrict the queryset ourselves from two permissions - def get_object(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) + source_queryset = super(DocumentCheckInView, self).get_source_queryset() - def get_post_action_redirect(self): - return reverse( - viewname='checkouts:check_out_info', kwargs={ - 'pk': self.get_object().pk - } + check_in_queryset = AccessControlList.objects.restrict_queryset( + permission=permission_document_check_in, queryset=source_queryset, + user=self.request.user ) - def view_action(self): - document = self.get_object() + check_in_override_queryset = AccessControlList.objects.restrict_queryset( + permission=permission_document_check_in_override, + queryset=source_queryset, user=self.request.user + ) - if document.get_check_out_info().user == self.request.user: - AccessControlList.objects.check_access( - obj=document, permissions=(permission_document_check_in,), - user=self.request.user - ) - else: - AccessControlList.objects.check_access( - obj=document, - permissions=(permission_document_check_in_override,), - user=self.request.user + return check_in_queryset | check_in_override_queryset + + def object_action(self, form, instance): + DocumentCheckout.business_logic.check_in_document( + document=instance, user=self.request.user + ) + + +class DocumentCheckOutView(MultipleObjectFormActionView): + error_message = 'Unable to checkout document "%(instance)s". %(exception)s' + form_class = DocumentCheckOutForm + model = Document + object_permission = permission_document_check_out + pk_url_kwarg = 'pk' + success_message_singular = '%(count)d document checked out.' + success_message_plural = '%(count)d documents checked out.' + + def get_extra_context(self): + queryset = self.get_object_list() + + result = { + 'title': ungettext( + singular='Checkout %(count)d document', + plural='Checkout %(count)d documents', + number=queryset.count() + ) % { + 'count': queryset.count(), + } + } + + if queryset.count() == 1: + result.update( + { + 'object': queryset.first(), + 'title': _( + 'Check out document: %s' + ) % queryset.first() + } ) - try: - document.check_in(user=self.request.user) - except DocumentNotCheckedOut: - messages.error( - message=_('Document has not been checked out.'), - request=self.request + return result + + def get_post_object_action_url(self): + if self.action_count == 1: + return reverse( + viewname='checkouts:document_checkout_info', + kwargs={'pk': self.action_id_list[0]} ) else: - messages.success( - message=_( - 'Document "%s" checked in successfully.' - ) % document, request=self.request - ) + super(DocumentCheckOutView, self).get_post_action_redirect() + + def object_action(self, form, instance): + DocumentCheckout.objects.check_out_document( + block_new_version=form.cleaned_data['block_new_version'], + document=instance, + expiration_datetime=form.cleaned_data['expiration_datetime'], + user=self.request.user, + ) class DocumentCheckOutDetailView(SingleObjectDetailView): - form_class = DocumentCheckoutDefailForm + form_class = DocumentCheckOutDetailForm model = Document object_permission = permission_document_check_out_detail_view @@ -96,55 +151,6 @@ class DocumentCheckOutDetailView(SingleObjectDetailView): } -class DocumentCheckOutView(SingleObjectCreateView): - form_class = DocumentCheckoutForm - - def dispatch(self, request, *args, **kwargs): - self.document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) - - AccessControlList.objects.check_access( - obj=self.document, permissions=(permission_document_check_out,), - user=request.user - ) - - return super( - DocumentCheckOutView, self - ).dispatch(request, *args, **kwargs) - - def form_valid(self, form): - try: - instance = form.save(commit=False) - instance.user = self.request.user - instance.document = self.document - instance.save() - except DocumentAlreadyCheckedOut: - messages.error( - message=_('Document already checked out.'), - request=self.request - ) - else: - messages.success( - message=_( - 'Document "%s" checked out successfully.' - ) % self.document, request=self.request - ) - - return HttpResponseRedirect(redirect_to=self.get_success_url()) - - def get_extra_context(self): - return { - 'object': self.document, - 'title': _('Check out document: %s') % self.document - } - - def get_post_action_redirect(self): - return reverse( - viewname='checkouts:check_out_info', kwargs={ - 'pk': self.document.pk - } - ) - - class DocumentCheckOutListView(DocumentListView): def get_document_queryset(self): return AccessControlList.objects.restrict_queryset( @@ -157,34 +163,13 @@ class DocumentCheckOutListView(DocumentListView): context = super(DocumentCheckOutListView, self).get_extra_context() context.update( { - 'extra_columns': ( - { - 'name': _('User'), - 'attribute': encapsulate( - lambda document: document.get_check_out_info().user.get_full_name() or document.get_check_out_info().user - ) - }, - { - 'name': _('Checkout time and date'), - 'attribute': encapsulate( - lambda document: document.get_check_out_info().checkout_datetime - ) - }, - { - 'name': _('Checkout expiration'), - 'attribute': encapsulate( - lambda document: document.get_check_out_info().expiration_datetime - ) - }, - ), 'no_results_icon': icon_check_out_info, 'no_results_text': _( - 'Checking out a document blocks certain document ' - 'operations for a predetermined amount of ' - 'time.' + 'Checking out a document, blocks certain operations ' + 'for a predetermined amount of time.' ), 'no_results_title': _('No documents have been checked out'), - 'title': _('Documents checked out'), + 'title': _('Checked out documents'), } ) return context diff --git a/mayan/apps/common/api_views.py b/mayan/apps/common/api_views.py index 868fa1861e..a556e332b0 100644 --- a/mayan/apps/common/api_views.py +++ b/mayan/apps/common/api_views.py @@ -2,9 +2,10 @@ from __future__ import unicode_literals from django.contrib.contenttypes.models import ContentType -from rest_framework import generics from rest_framework.permissions import IsAuthenticated +from mayan.apps.rest_api import generics + from .classes import Template from .serializers import ContentTypeSerializer, TemplateSerializer diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index dc37935ae2..2ba24c0688 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -26,9 +26,7 @@ from .links import ( ) from .literals import MESSAGE_SQLITE_WARNING -from .menus import ( - menu_about, menu_main, menu_secondary, menu_user -) +from .menus import menu_about, menu_secondary, menu_topbar, menu_user from .settings import ( setting_auto_logging, setting_production_error_log_path, setting_production_error_logging @@ -96,7 +94,10 @@ class CommonApp(MayanAppConfig): ) Template( - name='menu_main', template_name='appearance/main_menu.html' + name='menu_main', template_name='appearance/menu_main.html' + ) + Template( + name='menu_topbar', template_name='appearance/menu_topbar.html' ) menu_user.bind_links( @@ -111,7 +112,7 @@ class CommonApp(MayanAppConfig): ) ) - menu_main.bind_links(links=(menu_about, menu_user,), position=99) + menu_topbar.bind_links(links=(menu_about, menu_user,), position=99) menu_secondary.bind_links( links=(link_object_error_list_clear,), sources=( 'common:object_error_list', diff --git a/mayan/apps/common/classes.py b/mayan/apps/common/classes.py index 6f0ab888dc..9a69b1d912 100644 --- a/mayan/apps/common/classes.py +++ b/mayan/apps/common/classes.py @@ -12,47 +12,6 @@ from django.utils.translation import ugettext from .settings import setting_home_view -@python_2_unicode_compatible -class Collection(object): - _registry = [] - - @classmethod - def get_all(cls): - return sorted(cls._registry, key=lambda entry: entry._order) - - def __init__( - self, label, icon_class=None, link=None, queryset=None, model=None, - order=None - ): - self._label = label - self._icon_class = icon_class - self._link = link - self._queryset = queryset - self._model = model - self._order = order or 99 - self.__class__._registry.append(self) - - def __str__(self): - return force_text(self.label) - - def _get_children(self): - if self._queryset: - return self._queryset - else: - if self._model: - return self._model.objects.all() - - def resolve(self): - self.children = self._get_children() - self.icon = self._icon - self.label = self._label - self.url = None - if self._link: - self.icon_class = getattr(self._link, 'icon_class', self._icon_class) - self.url = reverse(viewname=self._link.view, args=self._link.args) - return '' - - @python_2_unicode_compatible class ErrorLogNamespace(object): def __init__(self, name, label=None): diff --git a/mayan/apps/common/dependencies.py b/mayan/apps/common/dependencies.py index d261e62d90..74f7f73777 100644 --- a/mayan/apps/common/dependencies.py +++ b/mayan/apps/common/dependencies.py @@ -36,7 +36,7 @@ PythonDependency( ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ''', module=__name__, name='django', version_string='==1.11.25' + ''', module=__name__, name='django', version_string='==1.11.26' ) PythonDependency( copyright_text=''' @@ -64,9 +64,6 @@ PythonDependency( PythonDependency( module=__name__, name='django-downloadview', version_string='==1.9' ) -PythonDependency( - module=__name__, name='django-environ', version_string='==0.4.5' -) PythonDependency( module=__name__, name='django-formtools', version_string='==2.1' ) @@ -295,6 +292,10 @@ PythonDependency( module=__name__, environment=environment_development, name='Werkzeug', version_string='==0.15.4' ) +PythonDependency( + module=__name__, environment=environment_development, name='devpi-server', + version_string='==5.3.1' +) PythonDependency( environment=environment_development, module=__name__, name='django-debug-toolbar', version_string='==1.11' diff --git a/mayan/apps/common/forms.py b/mayan/apps/common/forms.py index 9a82560efb..99e530152c 100644 --- a/mayan/apps/common/forms.py +++ b/mayan/apps/common/forms.py @@ -124,7 +124,6 @@ class DetailForm(forms.ModelForm): field_object, 'help_text', None ) - # TODO: Add others result types <=> Field types if isinstance(result, models.query.QuerySet): self.fields[field] = forms.ModelMultipleChoiceField( queryset=result, label=label diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index 37f5c268ea..7de15ca51f 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -53,8 +53,8 @@ class MultiFormView(DjangoFormView): template_name = 'appearance/generic_form.html' def _create_form(self, form_name, klass): - form_kwargs = self.get_form_kwargs(form_name) - form_create_method = 'create_%s_form' % form_name + form_kwargs = self.get_form_kwargs(form_name=form_name) + form_create_method = 'create_{}_form'.format(form_name) if hasattr(self, form_create_method): form = getattr(self, form_create_method)(**form_kwargs) else: @@ -66,17 +66,17 @@ class MultiFormView(DjangoFormView): def dispatch(self, request, *args, **kwargs): form_classes = self.get_form_classes() - self.forms = self.get_forms(form_classes) + self.forms = self.get_forms(form_classes=form_classes) return super(MultiFormView, self).dispatch(request, *args, **kwargs) def forms_valid(self, forms): for form_name, form in forms.items(): - form_valid_method = '%s_form_valid' % form_name + form_valid_method = '{}_form_valid'.format(form_name) if hasattr(self, form_valid_method): - return getattr(self, form_valid_method)(form) + return getattr(self, form_valid_method)(form=form) - self.all_forms_valid(forms) + self.all_forms_valid(forms=forms) return HttpResponseRedirect(redirect_to=self.get_success_url()) @@ -98,14 +98,16 @@ class MultiFormView(DjangoFormView): def get_form_kwargs(self, form_name): kwargs = {} - kwargs.update({'initial': self.get_initial(form_name)}) - kwargs.update({'prefix': self.get_prefix(form_name)}) + kwargs.update({'initial': self.get_initial(form_name=form_name)}) + kwargs.update({'prefix': self.get_prefix(form_name=form_name)}) if self.request.method in ('POST', 'PUT'): - kwargs.update({ - 'data': self.request.POST, - 'files': self.request.FILES, - }) + kwargs.update( + { + 'data': self.request.POST, + 'files': self.request.FILES, + } + ) kwargs.update(self.get_form_extra_kwargs(form_name=form_name) or {}) @@ -118,13 +120,13 @@ class MultiFormView(DjangoFormView): return dict( [ ( - key, self._create_form(key, klass) + key, self._create_form(form_name=key, klass=klass) ) for key, klass in form_classes.items() ] ) def get_initial(self, form_name): - initial_method = 'get_%s_initial' % form_name + initial_method = 'get_{}_initial'.format(form_name) if hasattr(self, initial_method): return getattr(self, initial_method)() else: @@ -206,9 +208,9 @@ class AddRemoveView( getattr(self.main_object, self.related_field).add(*queryset) else: raise ImproperlyConfigured( - 'View %s must be called with a main_object_method_add, a ' + 'View {} must be called with a main_object_method_add, a ' 'related_field, or an action_add ' - 'method.' % self.__class__.__name__ + 'method.'.format(self.__class__.__name__) ) def _action_remove(self, queryset): @@ -225,9 +227,9 @@ class AddRemoveView( getattr(self.main_object, self.related_field).remove(*queryset) else: raise ImproperlyConfigured( - 'View %s must be called with a main_object_method_remove, a ' + 'View {} must be called with a main_object_method_remove, a ' 'related_field, or an action_remove ' - 'method.' % self.__class__.__name__ + 'method.'.format(self.__class__.__name__) ) def dispatch(self, request, *args, **kwargs): @@ -348,8 +350,10 @@ class AddRemoveView( def get_list_added_queryset(self): if not self.related_field: raise ImproperlyConfigured( - 'View %s must be called with either a related_field or ' - 'override .get_list_added_queryset().' % self.__class__.__name__ + 'View {} must be called with either a related_field or ' + 'override .get_list_added_queryset().'.format( + self.__class__.__name__ + ) ) return self.get_secondary_object_list().filter( diff --git a/mayan/apps/common/http.py b/mayan/apps/common/http.py index f353dfb99a..02c274fdc6 100644 --- a/mayan/apps/common/http.py +++ b/mayan/apps/common/http.py @@ -2,27 +2,31 @@ from __future__ import unicode_literals from django.http import QueryDict from django.utils.encoding import force_bytes +from django.utils.six import PY3 class URL(object): - def __init__(self, path=None, query_string=None): + def __init__(self, path=None, query_string=None, query=None): self._path = path self._query_string = query_string + self._query = query + kwargs = {'mutable': True} - if query_string: - kwargs['query_string'] = query_string.encode('utf-8') + if self._query_string: + kwargs['query_string'] = self._query_string.encode('utf-8') self._args = QueryDict(**kwargs) + if self._query: + self.args.update(self._query) + @property def args(self): return self._args def to_string(self): if self._args.keys(): - query = force_bytes( - '?{}'.format(self._args.urlencode()) - ) + query = '?{}'.format(self._args.urlencode()) else: query = '' @@ -31,6 +35,9 @@ class URL(object): else: path = '' - result = force_bytes('{}{}'.format(path, query)) + result = '{}{}'.format(path, query) - return result + if PY3: + return result + else: + return force_bytes(result) diff --git a/mayan/apps/common/icons.py b/mayan/apps/common/icons.py index 9fd1271e7b..65df6c45f6 100644 --- a/mayan/apps/common/icons.py +++ b/mayan/apps/common/icons.py @@ -36,8 +36,14 @@ icon_menu_about = Icon( icon_menu_user = Icon( driver_name='fontawesome', symbol='user-circle' ) -icon_object_error_list_with_icon = Icon( - driver_name='fontawesome', symbol='lock' +icon_object_errors = Icon( + driver_name='fontawesome', symbol='exclamation-triangle' +) +icon_object_error_list = Icon( + driver_name='fontawesome', symbol='exclamation-triangle' +) +icon_object_error_list_clear = Icon( + driver_name='fontawesome', symbol='times' ) icon_ok = Icon( driver_name='fontawesome', symbol='check' diff --git a/mayan/apps/common/links.py b/mayan/apps/common/links.py index 1a769fd5b1..46b4328400 100644 --- a/mayan/apps/common/links.py +++ b/mayan/apps/common/links.py @@ -8,8 +8,8 @@ from mayan.apps.navigation.classes import Link from .icons import ( icon_about, icon_book, icon_current_user_locale_profile_details, icon_current_user_locale_profile_edit, icon_documentation, - icon_forum, icon_license, icon_object_error_list_with_icon, - icon_setup, icon_source_code, icon_support, icon_tools + icon_forum, icon_license, icon_setup, icon_source_code, icon_support, + icon_tools ) from .permissions_runtime import permission_error_log_view @@ -54,21 +54,17 @@ link_documentation = Link( text=_('Documentation'), url='https://docs.mayan-edms.com' ) link_object_error_list = Link( + icon_class_path='mayan.apps.common.icons.icon_object_error_list', kwargs=get_kwargs_factory('resolved_object'), permissions=(permission_error_log_view,), text=_('Errors'), view='common:object_error_list', ) link_object_error_list_clear = Link( + icon_class_path='mayan.apps.common.icons.icon_object_error_list_clear', kwargs=get_kwargs_factory('resolved_object'), permissions=(permission_error_log_view,), text=_('Clear all'), view='common:object_error_list_clear', ) -link_object_error_list_with_icon = Link( - kwargs=get_kwargs_factory('resolved_object'), - icon_class=icon_object_error_list_with_icon, - permissions=(permission_error_log_view,), text=_('Errors'), - view='common:error_list', -) link_forum = Link( icon_class=icon_forum, tags='new_window', text=_('Forum'), url='https://forum.mayan-edms.com' diff --git a/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo index 2e2e761340..85aa14d697 100644 Binary files a/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/ar/LC_MESSAGES/django.po b/mayan/apps/common/locale/ar/LC_MESSAGES/django.po index b9497f6ae0..591d62555f 100644 --- a/mayan/apps/common/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,31 +18,31 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "الاختيار" msgid "None" msgstr "لا شيء" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "إضافة" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "إزالة" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -139,35 +139,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "License" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -194,29 +194,6 @@ msgstr "Hours" msgid "Minutes" msgstr "Minutes" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -233,16 +210,16 @@ msgstr "الإجراءات" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "مستخدم" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Object" @@ -254,7 +231,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -314,17 +291,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "تأكيد حذف" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "تأكيد" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "انشاء" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "لم يتم اختيار اجراء." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "يجب اختيار غرض واحد عالأقل." diff --git a/mayan/apps/common/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/common/locale/bg/LC_MESSAGES/django.mo index 5ee2c551ac..a34276b8dd 100644 Binary files a/mayan/apps/common/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/bg/LC_MESSAGES/django.po b/mayan/apps/common/locale/bg/LC_MESSAGES/django.po index c569a6188b..19cc5ab0c7 100644 --- a/mayan/apps/common/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/bg/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-22 13:10+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-04 16:43+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -19,31 +19,31 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Обобщение" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Налични характеристики: \n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Налични полета: \n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Използва се за разрешаване на офлайн превод на текстови низове в код." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Осигурява проверка на стила." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Команден ред с автоматично довършване." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Проверява правилното форматиране на файла README." @@ -55,67 +55,67 @@ msgstr "Избиране" msgid "None" msgstr "Няма" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Изберете записи, които ще бъдат премахнати. Задръжте Control, за да изберете няколко записа. След като избирането приключи, щракнете върху бутона по-долу или щракнете двукратно върху списъка, за да активирате действието." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Изберете записи за добавяне. Задръжте Control, за да изберете няколко записа. След като избирането приключи, щракнете върху бутона по-долу или щракнете двукратно върху списъка, за да активирате действието." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Добавете всички" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Добавете" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Премахнете всички" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Премахнете" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Грешка в дублиращи данни: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s не е създаден, грешка: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s е създаден успешно." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s не е изтрит, грешка: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s изтрит успешно." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s не е актуализиран, грешка: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s актуализиран успешно." @@ -140,35 +140,35 @@ msgstr "Редактиране на локален профил" msgid "Documentation" msgstr "Документация" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Грешки" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Изчисти всичко" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Форум" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Лиценз" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Настройка" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Изходен код" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Поддръжка" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Инструменти" @@ -195,29 +195,6 @@ msgstr "Часове" msgid "Minutes" msgstr "Минути" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Ограничава изхвърлените данни до определените app_label или app_label.ModelName." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Базата данни, от която ще бъдат експортирани данни. Ако е пропусната, ще се използва базата данни с име "по подразбиране"." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Базата данни, в която ще бъдат импортирани данни. Ако е пропусната, ще се използва базата данни с име "по подразбиране"." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Принудително преобразуване на базата данни, дори ако приемащата база данни не е празна." - #: menus.py:10 msgid "System" msgstr "Система" @@ -234,16 +211,16 @@ msgstr "Действия" msgid "Secondary" msgstr "Допълнително" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Потребител" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Не е намерен %(verbose_name)s, отговарящ на заявката" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Обект" @@ -255,7 +232,7 @@ msgstr "Именно пространство" msgid "Date time" msgstr "Дата час" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Резултат" @@ -315,17 +292,17 @@ msgstr "Обща периодичност" msgid "Delete stale uploads" msgstr "Изтриване на застояли качвания" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Автоматично активиране на регистрацията във всички приложения." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Време за забавяне на фоновите задачи, които зависят от запис в базата данни, за да се изпълнят." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "Списък с низове, обозначаващи всички приложения, които трябва да бъдат премахнати от списъка, обикновено инсталиран от Mayan EDMS. Всеки низ трябва да бъде пунктиран Python път към: клас на конфигурация на приложението (предпочитан) или пакет, съдържащ приложение." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "Списък на низове, обозначаващи всички приложения, които са инсталирани извън тези, които обикновено се инсталират от Mayan EDMS. Всеки низ трябва да бъде пунктиран Python път към: клас на конфигурация на приложението (предпочитан) или пакет, съдържащ приложение." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Име на изгледа, прикрепен към котвата на марката в главното меню. Това е и изгледът, към който потребителите ще бъдат пренасочени след влизане." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Брой на обектите, които ще бъдат показани на страница." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Активирайте регистрирането на грешки извън възможностите за регистриране на грешки в системата." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Път към файла на дневника, който ще проследява грешките по време на производството." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Име, което се показва в главното меню." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL адрес на инсталацията или началната страница на проекта." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Бекенд за съхранение, който всички работници могат да използват за споделяне на файлове." -#: settings.py:103 -msgid "Django" -msgstr "Джанго" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Списък с низове, представляващи имена на хост / домейн, които този сайт може да показва. Това е мярка за сигурност за предотвратяване на HTTP Host header атаки, които са възможни дори при на пръв поглед много безопасни конфигурации на уеб сървъра. Стойностите в този списък могат да бъдат напълно квалифицирани имена (напр. „www.example.com“), като в този случай те ще бъдат съпоставени точно със заглавката на хоста на заявката (нечувствителни към регистъра, без да включват порта). Стойност, започваща с точка, може да бъде използвана като заместващ поддомейн: „.example.com“ ще съответства на example.com, www.example.com и всеки друг поддомейн от example.com. Стойност '*' ще отговаря на всичко; в този случай вие сте отговорни да предоставите вашата собствена валидация на заглавката на хоста (може би в междинния софтуер; ако е така, този междинен софтуер трябва да бъде посочен първи в MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Когато е зададено като True, ако URL адресът на заявката не съвпада с който и да е от шаблоните в URLconf и не завършва с наклонена черта, HTTP пренасочване се издава на същия URL адрес с добавена наклонена черта. Имайте предвид, че пренасочването може да доведе до загуба на данни, изпратени в POST заявка. Настройката APPEND_SLASH се използва само ако е инсталиран CommonMiddleware (вижте Middleware). Вижте също PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "Списък на валидаторите, които се използват за проверка на силата на паролите на потребителя." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Речник, съдържащ настройките за всички бази данни, които ще се използват с Джанго. Това е вложен речник, чието съдържание пренася псевдоним в базата данни към речник, съдържащ опциите за отделна база данни. Настройката DATABASES трябва да конфигурира база данни по подразбиране; може да бъде посочен и всякакъв брой допълнителни бази данни." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "По подразбиране: 2621440 (т.е. 2,5 MB). Максималният размер в байтове, който тялото на заявката може да бъде, преди да се повдигне SuspiciousOperation (RequestDataTooBig). Проверката се извършва при достъп до request.body или request.POST и се изчислява спрямо общия размер на заявката, с изключение на евентуални данни за качването на файлове. Можете да зададете това като None, за да деактивирате проверката. Приложенията, които се очаква да получават необичайно големи текстове във формуляра, трябва да настройват тази настройка. Количеството данни на заявката е свързано с обема памет, необходима за обработка на заявката и попълване на GET и POST речниците. Големите заявки могат да бъдат използвани като вектор за атака на отказ на услуга, ако се остави без отметка. Тъй като уеб сървърите обикновено не извършват дълбока проверка на заявката, не е възможно да се извърши подобна проверка на това ниво. Вижте също FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "По подразбиране: 'webmaster@localhost' По подразбиране имейл адрес, който да се използва за различни автоматизирани кореспонденции от мениджъра(ите) на сайта. Това не включва съобщения за грешки, изпратени до ADMINS и MANAGERS; за това вижте SERVER_EMAIL." - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "По подразбиране: [] (празен списък). Списък на компилирани обекти на регулярни изрази, представляващи низове на User-Agent, на които не е разрешено да посещават никоя страница в цялата система. Използвайте това за лоши роботи/пълзящи роботи . Това се използва само ако е инсталиран CommonMiddleware (вижте Middleware)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "По подразбиране: 'django.core.mail.backends.smtp.EmailBackend'. Бекенд, който да използвате за изпращане на имейли." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "По подразбиране: 'localhost'. Хостът, който да използвате за изпращане на имейл." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "По подразбиране: '' (празен низ). Парола за SMTP сървър, дефиниран в EMAIL_HOST. Тази настройка се използва заедно с EMAIL_HOST_USER, когато се прави удостоверяване на SMTP сървъра. Ако някоя от тези настройки е празна, Django няма да прави опит за удостоверяване." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "По подразбиране: '' (празен низ). Потребителско име за SMTP сървър, дефиниран в EMAIL_HOST. Ако е празно, Django няма да прави опит за удостоверяване." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "По подразбиране: 25. Порт, който да се използва за SMTP сървър, дефиниран в EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "По подразбиране: Няма. Посочва изчакване в секунди за блокиране на операции като опит за свързване." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "По подразбиране: Грешно. Дали да използвате TLS (сигурна) връзка, когато говорите със SMTP сървъра. Това се използва за изрични TLS връзки, обикновено на порт 587. Ако имате зависващи връзки, вижте неявната настройка на TLS EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "По подразбиране: Грешно. Дали да използвате неявна TLS (сигурна) връзка, когато говорите със SMTP сървъра. В повечето имейл документации този тип TLS връзка се нарича SSL. Обикновено се използва на порт 465. Ако имате проблеми, вижте изричната настройка на TLS EMAIL_USE_TLS. Обърнете внимание, че EMAIL_USE_TLS / EMAIL_USE_SSL са взаимно изключващи се, така че задайте само една от тези настройки като True." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "По подразбиране: 2621440 (т.е. 2,5 MB). Максималният размер (в байтове), който ще бъде качен, преди да бъде пуснат към файловата система. Вижте Управление на файлове за подробности. Вижте също DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "По подразбиране: '/accounts/login/' URL адресът, при който заявките са пренасочени за вход, особено при използване на декоратора login_required(). Тази настройка приема също именувани модели на URL адреси, които могат да се използват за намаляване на дублирането на конфигурацията, тъй като не е необходимо да определяте URL адреса на две места (настройки и URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "По подразбиране: '/accounts/profile/'; URL адресът, където заявките са пренасочени след влизане, когато изгледът contrib.auth.login не получи следващ параметър. Това се използва например от декоратора login_required(). Тази настройка приема и именувани модели на URL адреси, които могат да се използват за намаляване на дублирането на конфигурацията, тъй като не е необходимо да определяте URL адреса на две места (настройки и URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "По подразбиране: Няма. URL адресът, където заявките са пренасочени, след като потребителят излезе от LogoutView (ако изгледът не получи аргумент next_page). Ако е Няма, няма да се извърши пренасочване и изгледът ще се изведе. Тази настройка приема и именувани модели на URL адреси, които могат да се използват за намаляване на дублирането на конфигурацията, тъй като не е необходимо да определяте URL адреса на две места (настройки и URLconf)." - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "Списък на IP адреси като низове, който: Позволява на debug() контекст процесора да добави някои променливи към контекста на шаблона. Може да използва книжните маркери на admindocs, дори ако не е влязъл като потребител от персонала. Те са маркирани като "вътрешни" (за разлика от "ВЪНШНИ") в имейлите на AdminEmailHandler." - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "Списък на всички налични езици. Списъкът е списък с две двойки във формата (код на езика, име на език), например, („ja“, „японски“). Това определя кои езици са достъпни за избор на език. По принцип стойността по подразбиране трябва да е достатъчна. Задайте тази настройка само ако искате да ограничите избора на език до подмножество от предоставените от Джанго езици." - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "Низ, представляващ езиков код за тази инсталация. Това трябва да е в стандартен езиков ID формат. Например американският английски е „en-us“. Той служи за две цели: Ако междинният софтуер за локална мрежа не се използва, списъкът решава кой превод да служи на всички потребители. Ако междинният софтуер за локална мрежа е активен, той предоставя резервен език в случай, че предпочитаният език на потребителя не може да бъде определен или не се поддържа от уебсайта. Той също така осигурява резервен превод, когато превод за даден буква не съществува за предпочитания от потребителя език." - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "URL адрес, който да използвате, когато се позовавате на статични файлове, разположени в STATIC_ROOT. Пример: \"/static/\"; или \"http://static.example.com/\" Ако не е None, адресът ще бъде използвано като основен път за дефинициите на активите (клас Media) и приложението staticfiles. Трябва да завършва с наклонена черта, ако е зададен на непразна стойност." - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "Двигателят за съхранение на файлове, който да се използва при събиране на статични файлове с командата за управление collectstatic. Готов за използване екземпляр на резервния архив за съхранение, дефиниран в тази настройка, може да бъде намерен на django.contrib.staticfiles.storage.staticfiles_storage." - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "Низ, представляващ часовата зона за тази инсталация. Обърнете внимание, че това не е непременно часовата зона на сървъра. Например един сървър може да обслужва множество сайтове, захранвани от Django, всеки с отделна настройка на часовата зона." - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "Пълният Python път на обекта на приложението WSGI, който ще използва вградените сървъри на Django (например runserver). Командата за управление django-admin startproject ще създаде прост файл wsgi.py с приложение, което може да се извиква в него и ще насочи тази настройка към това приложение." - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "По подразбиране: "amqp: //". URL адрес на брокера по подразбиране Това трябва да бъде URL под формата на: transport://userid:password@hostname:port/virtual_host Изисква се само частта от схемата (transport://), останалото е по избор и по подразбиране към конкретните стойности на транспортиране по подразбиране." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "По подразбиране: По подразбиране не е активиран бекенд. Бекендът, използван за съхраняване на резултати от задачи (надгробни камъни). Вижте http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Потвърдете изтриване" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Редактиране %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Потвърждаване" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Подробности за: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Редактиране: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Създаване" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "Въведете валидна JSON стойност." + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Въведете валидна YAML стойност." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Въведете валидно „вътрешно име“, състоящо се от букви, цифри и подчертавания." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Относно" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Данни от текущия локален потребителски профил " -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Редактиране на данни за текущия локален потребителски профил" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Контролно табло" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Изчистване на записите в дневника за грешки за: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Дневникът за грешки в обекта е изчистен успешно" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Дата и час" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "Този изглед показва дневника на грешките на различен обект. Празен списък е нещо добро." + +#: views.py:160 +msgid "There are no error log entries" +msgstr "Няма записи в дневника за грешки" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Записи в дневника за грешки за: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Няма опции за настройка." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Липса на резултати тук означава, че нямате необходимите разрешения за изпълнение на административна задача." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Елементи за настройка" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Тук можете да конфигурирате всички аспекти на системата." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Тези модули се използват за поддръжка на системата." - -#: views.py:240 -msgid "No action selected." -msgstr "Не са избрани действия." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Трябва да изберете поне един елемент." diff --git a/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.mo index 3b19ebbb2f..428f089aa4 100644 Binary files a/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.po index e5c572ccf4..1442224446 100644 --- a/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/bs_BA/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Ilvana Dollaroviq \n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,31 +19,31 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Zajednicki" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Raspoloživi atributi:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "Odabir" msgid "None" msgstr "Nijedno" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Dodati" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Ukloniti" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nije kreiran, greška:%(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s kreiran uspešno." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nije izbrisan, greška:%(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s izbrisan uspešno." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nije ažuriran, greška:%(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s ažuriran uspešno." @@ -140,35 +140,35 @@ msgstr "Uredi lokalni profil" msgid "Documentation" msgstr "Dokumentacija" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Greške" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Izbriši sve" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Setup" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Izvorni kod" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Podrška" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Alati" @@ -195,29 +195,6 @@ msgstr "Sati" msgid "Minutes" msgstr "Minuta" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "Sistem" @@ -234,16 +211,16 @@ msgstr "Akcije" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Korisnik" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objekat" @@ -255,7 +232,7 @@ msgstr "Imenovani prostor" msgid "Date time" msgstr "Datum vreme" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Rezultat" @@ -315,17 +292,17 @@ msgstr "Vremenski zajednički" msgid "Delete stale uploads" msgstr "Obriši stare otpreme" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Automatski omogućite evidenciju za sve aplikacije." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Vreme za odlaganje pozadinskih zadataka koji zavise od baze podataka obavezuju se da se propagiraju." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Omogućite prijavljivanje grešaka izvan sistemskih mogućnosti evidentiranja grešaka." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Put do log datoteke koja će pratiti greške tokom proizvodnje" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr " Backend skladišta koju svi radnici mogu koristiti za dijeljenje datoteka." -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Potvrditi brisanje" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Potvrditi" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Kreirati" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Unesite važeći IAML" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Unesite važeći 'interni naziv' koji se sastoji od slova, brojeva i podčrtava." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "O " -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Detalji lokalnog profila trenutnog korisnika" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Uredi detalje lokalnog profila trenutnog korisnika" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Komandna tabla" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Obrišite unose evidencije grešaka za:%s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Dnevnik grešaka objekata je uspešno obrisan" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Datum i vreme" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Unos log grešaka za:%s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Stavke setup-a" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Nijedna akcija nije odabrana." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Mora biti izabrana barem jedna stanka." diff --git a/mayan/apps/common/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/common/locale/cs/LC_MESSAGES/django.mo index 767dd09e34..5e35b676ee 100644 Binary files a/mayan/apps/common/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/cs/LC_MESSAGES/django.po b/mayan/apps/common/locale/cs/LC_MESSAGES/django.po index bdb72f790a..2dd83c6bad 100644 --- a/mayan/apps/common/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Michal Švábík \n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,31 +18,31 @@ msgstr "" "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:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Společný" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Dostupné atributy:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Dostupná pole:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Poskytuje kontrolu stylu." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Prostředí příkazového řádku s automatickým dokončováním." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Zkontroluje správné formátování souboru README." @@ -54,67 +54,67 @@ msgstr "Výběr" msgid "None" msgstr "žádný" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Vyberte položky, které chcete odstranit. Podržte Control pro výběr více záznamů. Po dokončení výběru klepněte na tlačítko níže nebo poklepáním na seznam akci aktivujte." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Vyberte položky, které chcete přidat. Podržte Control pro výběr více záznamů. Po dokončení výběru klepněte na tlačítko níže nebo poklepáním na seznam akci aktivujte." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Přidat vše" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Přidat" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Odebrat vše" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Odstranit" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Chyba duplicitních dat: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nebyl vytvořen, chyba: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s byl úspěšně vytvořen." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nebyl smazán, chyba: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s byl úspěšně smazán." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nebyl aktualizován, chyba: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s byl úspěšně aktualizován." @@ -139,35 +139,35 @@ msgstr "Upravit místní nastavení" msgid "Documentation" msgstr "Dokumentace" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Chyby" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Vymazat vše" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Instalace" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Zdrojový kód" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Podpora" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Nástroje" @@ -194,29 +194,6 @@ msgstr "Hodiny" msgid "Minutes" msgstr "Minuty" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Databáze, ze které budou data exportována. Pokud je vynechána, bude použita databáze s názvem „default“." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Databáze, do které budou data importována. Pokud je vynechána, bude použita databáze s názvem „default“." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Vynutit převod databáze, i když přijímající databáze není prázdná." - #: menus.py:10 msgid "System" msgstr "Systém" @@ -233,16 +210,16 @@ msgstr "Akce" msgid "Secondary" msgstr "Sekundární" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Uživatel" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Nebyl nalezen žádný dotaz %(verbose_name)s" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objekt" @@ -254,7 +231,7 @@ msgstr "Jmenný prostor" msgid "Date time" msgstr "Datum a čas" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Výsledek" @@ -314,17 +291,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "Odstraňte zastaralá nahrávání" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Automaticky povolit protokolování pro všechny aplikace." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Čas na čekání úkolů na pozadí, čekající na propagaci do databáze." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "Seznam řetězců označujících všechny aplikace, které mají být odstraněny ze seznamu normálně nainstalovaného Mayan EDMS. Každý řetězec by měla být tečkovaná cesta Pythonu k: třídě konfigurace aplikace (upřednostňováno) nebo balíčku obsahující aplikaci." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "Seznam řetězců označujících všechny aplikace, které jsou nainstalovány nad rámec těch, které jsou obvykle nainstalovány Mayn EDMS. Každý řetězec by měla být tečkovaná cesta Pythonu k: třídě konfigurace aplikace (upřednostňováno) nebo balíčku obsahující aplikaci." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Název pohledu připojeného ke kotvě značky v hlavní nabídce. Toto je také pohled, na který budou uživatelé přesměrováni po přihlášení." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Počet objektů, které se zobrazí na stránce." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Povolit protokolování chyb mimo možnosti protokolování systémových chyb." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Cesta k souboru protokolu, který bude sledovat chyby produkce." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Název, který se zobrazí v hlavní nabídce." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL instalace nebo domovská stránka projektu." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Úložiště, které všichni pracovníci mohou použít ke sdílení souborů." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "Seznam ověřovatelů, kteří se používají ke kontrole síly uživatelských hesel." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Výchozí: 'django.core.mail.backends.smtp.EmailBackend'. Backend, který se používá pro odesílání e-mailů." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Výchozí: 'localhost'. Hostitel, který má být použit pro odesílání e-mailů." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Výchozí: '' (prázdný řetězec). Heslo pro server SMTP definované v EMAIL_HOST. Toto nastavení se používá ve spojení s EMAIL_HOST_USER při autentizaci na server SMTP. Pokud je některé z těchto nastavení prázdné, Django se nepokusí o ověření." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Výchozí: '' (prázdný řetězec). Uživatelské jméno pro server SMTP definované v EMAIL_HOST. Pokud je prázdný, Django se nepokouší o ověření." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Výchozí: 25. Port, který má být použit pro server SMTP definovaný v EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Výchozí: None. Určuje časový limit v sekundách pro operace blokování, jako je pokus o připojení." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Potvrďte smazání" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Upravit %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Potvrdit" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Podrobnosti pro: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Upravit: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Vytvořit" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Zadejte platnou hodnotu YAML." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Zadejte platný „interní název“ skládající se z písmen, číslic a podtržítek." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "O" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Podrobnosti o aktuálním místním profilu uživatele" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Upravit podrobnosti o aktuálním místním profilu uživatele" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Řídící panel" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Vymažte položky protokolu chyb pro: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Protokol chyb objektu byl úspěšně vymazán" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Datum a čas" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Položky protokolu chyb pro: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Nejsou k dispozici žádné možnosti nastavení." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Žádné výsledky zde znamenají, že nemáte potřebná oprávnění k provedení administrativní úlohy." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Položky nastavení" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Zde můžete nakonfigurovat všechny aspekty systému." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Tyto moduly se používají k údržbě systému." - -#: views.py:240 -msgid "No action selected." -msgstr "Nebyla vybrána žádná akce." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Musíte vybrat alespoň jednu položku." diff --git a/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.mo index e23cc66721..095efd667f 100644 Binary files a/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.po index f560352fc6..f5defdfe7b 100644 --- a/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -17,31 +17,31 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Ingen" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Tilføj" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Fjern" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -138,35 +138,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -193,29 +193,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -232,16 +209,16 @@ msgstr "" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Bruger" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "" @@ -253,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Resultat" @@ -313,17 +290,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -331,7 +308,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -339,370 +316,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Bekræft" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Om" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "" diff --git a/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.mo index f91b1405aa..909b7b5c6a 100644 Binary files a/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po index 09a86b8afb..989df82ccf 100644 --- a/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po @@ -17,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Mathias Behrle \n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,31 +27,31 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Allgemein" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Verfügbare Attribute:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Verfügbare Felder:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Ermöglicht die Offline Übersetzung von Zeichenketten im Code." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Ermöglicht Stilüberprüfung." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Kommandozeilenumgebung mit Autovervollständigung." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Überprüft die korrekte Formatierung der README-Datei." @@ -63,67 +63,67 @@ msgstr "Auswahl" msgid "None" msgstr "Keine" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Wählen Sie Einträge aus, die entfernt werden sollen. Mit der Steuerungstaste können mehrere Einträge ausgewählt werden. Wenn die Auswahl vollständig ist, klicken Sie den folgenden Button oder doppelklicken Sie auf die Liste um die Aktion durchzuführen." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Wählen Sie Einträge aus, die hinzugefügt werden sollen. Mit der Steuerungstaste können mehrere Einträge ausgewählt werden. Wenn die Auswahl vollständig ist, klicken Sie den folgenden Button oder doppelklicken Sie auf die Liste um die Aktion durchzuführen." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Alle hinzufügen" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Hinzufügen" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Alle entfernen" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Entfernen" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Duplizierte Daten Fehler: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nicht erstellt, Fehler: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s erfolgreich erstellt." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nicht gelöscht, Fehler: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s erfolgreich gelöscht." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nicht aktualisiert, Fehler: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s erfolgreich aktualisiert." @@ -148,35 +148,35 @@ msgstr "Lokalisierungsprofil bearbeiten" msgid "Documentation" msgstr "Dokumentation" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Fehler" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Alles löschen" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lizenz" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Einrichtung" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Quelltext" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Hilfe" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Werkzeuge" @@ -203,29 +203,6 @@ msgstr "Stunden" msgid "Minutes" msgstr "Minuten" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Begrenzt die extrahierten Daten auf die spezifizierten app_label oder app_label.ModelName." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Die Datenbank von welcher die Daten exportiert werden. Falls nicht ausgefüllt wird \"default\" als Datenbankname verwendet." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Die Datenbank in welche die Daten importiert werden. Falls nicht ausgefüllt wird \"default\" als Datenbankname verwendet." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Erzwingt die Umstellung der Datenbank selbst wenn die Zieldatenbank nicht leer ist." - #: menus.py:10 msgid "System" msgstr "System" @@ -242,16 +219,16 @@ msgstr "Aktionen" msgid "Secondary" msgstr "Sekundär" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Benutzer" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Es wurden keine %(verbose_name)s passend zu Ihrer Suchanfrage gefunden" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objekt" @@ -263,7 +240,7 @@ msgstr "Namensraum" msgid "Date time" msgstr "Zeit" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Ergebnis" @@ -323,17 +300,17 @@ msgstr "Allgemein regelmäßig" msgid "Delete stale uploads" msgstr "Veraltete Uploads löschen" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Protokollierung für alle Apps automatisch einschalten." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Zeit für die Verzögerung von Hintergrundaufgaben, die für ihre Fortsetzung auf einen Datenbankcommit warten." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,7 +318,7 @@ msgid "" " containing an application." msgstr "Eine Liste mit Strings aller Applikationen, welche für diese Django-Installation aktiviert sind. Jede Zeichenfolge muss ein punktuierter Pythonpfad zu einer Anwendungskonfigurationsklasse (bevorzugt) oder einem Anwendungspaket sein." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -349,370 +326,139 @@ msgid "" " containing an application." msgstr "Eine Liste von Strings, die alle Anwendungen angeben, die über die normalerweise von Mayan EDMS installierten Anwendungen hinaus installiert wurden. Jede Zeichenfolge sollte ein punktuierter Python-Pfad sein zu: einer Anwendungskonfigurationsklasse (bevorzugt) oder einem Paket, das eine Anwendung enthält." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Name des Formulars, das mit dem Markenanker im Hauptmenü verknüpft ist. Zu diesem Formular werden die Benutzer auch nach dem Anmeldevorgang weitergeleitet." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Die Anzahl der Objekte, die pro Seite angezeigt werden." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Fehlerprotokollierung außerhalb des regulären Systemfehlerprotokolls aktivieren." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Der Pfad zur Protokolldatei, in der Fehler im Produktivbetrieb aufgezeichnet werden." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Der im Hauptmenü angezeigte Name." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "Die URL der Installation oder Webseite des Projekts." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Datenbackend, das alle Worker benutzen können, um Dateien zu teilen." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Eine Liste aller Hosts bzw. Domainnamen, die mit dieser Seite funktionieren. Sie dient als Sicherheitsmaßnahme um Angriffe über HTTP Hostheader zu verhindern, welche selbst unter vermeintlich sicheren Webserverkonfigurationen möglich sein können. Werte in dieser Liste können voll qualifizierte Domainnamen enthalten, die exakt gegen den Hostheader des Requests geprüft werden (ohne Prüfung von Groß-/Kleinschreibung und Port). Werte, die mit einem Punkt beginnen werden wie eine Subdomain Wildcard behandelt, so steht z.B. '.example.com' für 'example.com' oder 'www.example.com' oder jede andere Subdomain von example.com. '*' steht als Wert für alles Mögliche, in diesem Fall sind Sie selbst verantwortlich für eine Validierung des Hostheaders (z.B. mittels einer Middleware. Sollte das der Fall sein, muss diese in MIDDLEWARE zuerst gelistet werden)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Falls \"Wahr\" (true), wird eine Umleitung (HTTP Redirect) auf die bereitgestellte URL mit angehängtem Slash erzeugt, sofern diese nicht bereits mit einem Slash endet oder einem Muster aus der URLconf entspricht. Bitte beachten Sie, dass die Umleitung den Verlust von Daten aus den übermittelten POST-Requests verursachen kann. Die Einstellung APPEND_SLASH wird nur benutzt, wenn CommonMiddleware installiert ist (siehe Middleware). Siehe auch PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "Liste der Validatoren, die für die Überprüfung der Passwortstärke von Benutzerpasswörtern verwendet werden." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Ein Dictionary welches eine Liste aller Einstellungen für die mit Django verwendeten Datenbanken enthält. Dieses Dictionary enthält Aliase zu einem weiteren Dictionaries, welche wiederum die Einstellungen für weitere Datenbanken enthalten. Die DATABASES Einstellung muss eine Standarddatenbank enthalten, es können aber auch beliebige weitere Datenbanken angegeben werden." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Standard: 2621440 (entspricht 2,5 MB). Die Maximalgröße eines Requestbodys in Bytes, für Werte darüber wird die Aktion 'SuspiciousOperation - RequestDataTooBig' ausgelöst. Diese Prüfung wird immer ausgeführt, wenn auf 'request.body' oder 'request.POST' zugegriffen wird. Dabei wird die Gesamtgröße des Requests berechnet ohne Einbezug der Größe einer eventuell hochzuladenen Datei. Die Einstellung 'None' deaktiviert diese Prüfung. Anwendungen, welche erwartungsgemäß umfangreichere Formularanfragen erhalten, sollten diese Einstellung entsprechend anpassen. Der Umfang an Requestdaten korreliert mit dem zur Verarbeitung benötigten Speicher und dem benötigten Speicher zur Befüllung der GET und POST Dictionaries. Sehr umfangreiche Requests könnten ungeprüft einem Denial-of-Service Angriff dienen. Da Webserver für gewöhnlich eine solch gründliche Prüfung der Anfragen nicht durchführen, ist eine vergleichbare Prüfung auf Dieser Ebene nicht möglich. Siehe auch: FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "Standard: 'webmaster@localhost' Standard-E-Mailadresse, die für verschiedene automatische Korrespondenz durch die Sitemanager verwendet wird. Dies gilt nicht für Fehlerbenachrichtigungen an ADMINS and MANAGERS, für diese siehe SERVER_EMAIL." - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "Standard: [] (Leere Liste). Eine Liste von kompilierten regulären Ausdrücken (RegEx) welche diejenigen User-Agent Strings repräsentieren die systemweit keine einzige Seite aufrufen dürfen. Nutzen Sie diese gegen unerwünschte Robots oder Crawler. Wird nur genutzt wenn CommonMiddleware installiert ist (siehe: Middleware)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Standard: 'django.core.mail.backends.smtp.EmailBackend'. Das Backend für den E-Mailversand." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Standard: 'localhost'. Der Host für den E-Mailversand." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Standard: \" (Leere Zeichenfolge). Das Passwort zur Nutzung des SMTP-Servers, der in EMAIL_HOST definiert wurde. Diese Einstellung wird zusammen mit der für EMAIL_HOST_USER für die Authentifizierung am SMTP-Server genutzt. Wird eine der beiden leer gelassen, benutzt Django keine Authentifizierung." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Standard: \" (Leere Zeichenfolge). Der Benutzername zur Nutzung des SMTP-Servers, der in EMAIL_HOST definiert wurde. Wird die Einstellung leer gelassen, benutzt Django keine Authentifizierung." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Standard: 25. Der für den in EMAIL_HOST definierten SMTP-Server zu benutzende Port." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Standard: None (Keiner). Stellt einen Timeout (in Sekunden) für blockierende Operationen wie z.B. Verbindungsversuche ein." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "Standard: False. Definiert ob eine TLS Verbindung (sichere Verbindung) beim Verbinden zum SMTP-Server aufgebaut werden soll. Wird für explizite TLS-Verbindungen, üblicherweise über den Port 587, verwendet. Sollte es zu Verbindungsfehlern kommen, prüfen Sie bitte die implizite TLS Einstellung EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "Standard: False. Definiert ob eine TLS Verbindung (sichere Verbindung) beim Verbinden zum SMTP Server aufgebaut werden soll. Gelegentlich wird diese TLS Verbindung auch als SSL bezeichnet. Die Verbindung nutzt üblicherweise den Port 465. Sollte es zu Verbindungsfehlern kommen, prüfen Sie bitte die explizite TLS Einstellung EMAIL_USE_TLS. Beachten Sie bitte, dass immer nur eine Einstellung für EMAIL_USE_TLS oder EMAIL_USE_SSL genutzt werden kann, es sollte daher immer nur eine Einstellungen auf \"True\" gestellt werden." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Standard: 2621440 (entspricht 2,5 MB). Die Maximalgröße eines Uploads in Bytes, bevor dieser zum Dateisystem gestreamt wird. Mehr Details im Kapitel zum Dateimanagement. Siehe auch: DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "Standard: '/accounts/login/' Die URL zur Weiterleitung zum Login, insbesondere wenn z.B. der login_required() Decorator benutzt wird. Diese Einstellung akzeptiert auch die Eingabe von URL-Mustern, wenn z.B. mehrfach gleiche Konfigurationen an verschiedenen Stellen vermieden werden sollen (z.B. in 'Einstellungen' und URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "Standard: '/accounts/profile/' Die URL zur Weiterleitung von Requests nach erfolgreichem Login, insbesondere wenn die Ansicht contrib.auth.login keinen next Parameter übermittelt bekommt. Wird z.B. vom login_required() Decorator benutzt. Diese Einstellung akzeptiert auch die Eingabe von URL-Mustern, wenn mehrfach gleiche Konfigurationen an verschiedenen Stellen vermieden werden sollen (z.B. in 'Einstellungen' und URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "Standard: None. Die URL zu der Benutzer nach der Nutzung von LogoutView weitergeleitet werden (wenn das Formular kein Argument für nächste Seite enthält). Mit None wird keine Weiterleitung durchgeführt und das Logout-Formular dargestellt. Diese Einstellung akzeptiert auch 'named URL patterns', die benutzt werden können um die URL nur an einer Stelle zu definieren (anstatt Einstellungen und URLconf)." - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "Eine Liste von IP-Adressen (als Zeichenketten). Ermöglicht dem debug() context processor einige Variablen zum Vorlagenkontext hinzuzufügen. Kann admindocs bookmarklets benutzen, auch wenn nicht als Benutzer angemeldet. Werden in AdminEmailHandler E-Mails als \"internal\" (im Gegensatz zu \"EXTERNAL\") markiert." - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "Liste von verfügbaren Sprachen. Die Liste setzt sich zusammen aus Zweier-Tupeln mit dem Format (Sprachencode, Sprachenname), z.B. ('ja', 'Japanese'). Diese Eintellung bestimmt die für die Auswahl verfügbaren Sprachen. Üblicherweise sollte die Einstellung des Standardwerts ausreichen. Benutzen Sie diese Einstellung nur, wenn Sie die Auswahl auf eine Untermenge der von Django zur Verfügung gestellten Sprachen einstellen wollen." - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "Eine Zeichenkette, die den Sprachencode für diese Installation festlegt. Das Format sollte das Standardsprachenformat für IDs sein, z.B. \"en-us\" für U.S. English. Die Einstellung dient zwei Zwecken: Wenn die Lokalisierungs-Middleware nicht in Gebrauch ist, bestimmt sie die Übersetzung für alle Benutzer. Wenn die Lokalisierungs-Middleware in Gebrauch ist, bestimmt sie die Rückfallsprache, wenn die bevorzugte Sprache des Benutzers nicht ermittelt werden kann oder von der Website nicht unterstützt wird. Außerdem dient sie als Rückfallübersetzung, wenn eine Übersetzung in der vom Benutzer eingestellten Sprache nicht existiert." - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "URL für statische Dateien in STATIC_ROOT. Beispiel: \"/static/\" oder \"http://static.example.com/\". Wenn nicht None, dient diese URL als Basispfad für Medien (die Medienklasse) und die staticfiles App. Sie muss mit einem Schrägstrich enden, falls nicht leer." - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "Das Backend für die Speicherung von statischen Dateien mit dem collectstatic Management-Kommando. Eine betriebsfertige Instanz des Speicherungsbackends kann in django.contrib.staticfiles.storage.staticfiles_storage gefunden werden." - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "Eine Zeichenkette für die Zeitzone dieser Installation. Die muss nicht unbedingt die Zeitzone des Servers sein. Zum Beispiel kann ein Server mehrere Django-Sites bedienen, jede mit einer eigenen Zeitzoneneinstellung." - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "Der volle Pythonpfad für die WSGI application, das Django's built-in servers (e.g. runserver) benutzen wird. Das django-admin startproject Management-Kommando erstellt eine einfache wsgi.py Datei mit einem application callable, auf das diese Einstellung zeigt." - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "Standard: \"amqp://\". Die Standard Broker-URL. Muss in folgender Form angegeben werden: transport://userid:password@hostname:port/virtual_host\nNur das Schema (transport://) muss angegeben werden, der Rest ist optional und verweist auf die Standardwerte." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "Standard: Es ist standardmäßig kein Ergebnisbackend aktiviert. Das Backend speichert die Aufgabenergebnisse (tombstones). Siehe: http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Löschen bestätigen" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "%s bearbeiten" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Bestätigen" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Details für: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "%s bearbeiten" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Erstellen" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Einen gültigen YAML Wert eingeben" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Bitte geben Sie einen gültigen 'Internen Namen' an, bestehend aus Buchstaben, Zahlen und einem Unterstrich." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Über" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Aktuelle Benutzerlokalisierungsdetails" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Aktuelle Benutzerlokalisierungsdetails bearbeiten" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Dashboard" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Alle Fehlerlogeinträge für: %s löschen" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Objektfehlerlog erfolgreich gelöscht" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Datum und Uhrzeit" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Fehlerlogeinträge für: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Keine Einstellungsoptionen verfügbar." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Falls keine Ergebnisse angezeigt werden besitzen Sie nicht die erforderlichen Rechte für administrative Aufgaben." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Einrichtungsdetails" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Hier können sämtliche Aspekte des Systems konfiguriert werden." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Diese Module werden für die Wartung des Systems verwendet." - -#: views.py:240 -msgid "No action selected." -msgstr "Keine Aktion ausgewählt." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Es muss mindestens ein Element ausgewählt werden." diff --git a/mayan/apps/common/locale/el/LC_MESSAGES/django.mo b/mayan/apps/common/locale/el/LC_MESSAGES/django.mo index cbefc41324..015e47e742 100644 Binary files a/mayan/apps/common/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/el/LC_MESSAGES/django.po b/mayan/apps/common/locale/el/LC_MESSAGES/django.po index d6bd3b837a..e1df4684d7 100644 --- a/mayan/apps/common/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -17,31 +17,31 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Κοινό" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Διαθέσημα χαρκτηριστικά:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "Επιλογή" msgid "None" msgstr "Κανένα" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Προσθήκη" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Αφαίρεση" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s δεν δημιουργήθηκε, σφάλμα: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s δημιουργήθηκε επιτυχώς." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s δεν διαγράφηκε, σφάλμα: %(error)s" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s διαγράφηκε επιτυχώς." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s δεν ενημερώθηκε,σφάλμα: %(error)s" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s ενημερώθηκε επιτυχώς." @@ -138,35 +138,35 @@ msgstr "Τοποποίηση του προφίλ τοποθεσίας" msgid "Documentation" msgstr "Τεκμηρίωση" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Σφάλματα" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Φόρουμ" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Άδεια χρήσης" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Ρυθμίσεις" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Πηγαιος κώδικας" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Υποστήριξη" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Εργαλεία" @@ -193,29 +193,6 @@ msgstr "Ώρες" msgid "Minutes" msgstr "Λεπτά" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "Σύστημα" @@ -232,16 +209,16 @@ msgstr "Ενέργειες" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Χρήστης" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Αντικείμενο" @@ -253,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "Ηερομηνία ώρα" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Αποτέλεσμα" @@ -313,17 +290,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "Διαγραφή μεταφορτώσεων που δεν ολοκληρώθηκαν" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Αυτόματη ενεργοποίηση καταγραφής για όλες τις εφαρμογές." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Χρόνος αναμονής για ενέργειες παρασκηνίου που εξαρτώνται από την καταχώρηση στην βάση δεδομένων για να ολοκληρωθούν." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -331,7 +308,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -339,370 +316,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Διαδρομή όπου θα αποθηκευτεί το ημερολόγιο καταγραφής σφαλμάτων κατά την λειτουργεία του συστήματος." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Επιβεβαίωση διαγραφής" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Επιβεβαίωση" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Δημηουργία" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Σχετικά" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Λεπτομέρειες προφίλ τοποθεσίας του τρέχοντος χρήστη" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Τροποποίηση προφίλ τοποθεσίας του τρέχοντος χρήστη" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Πίνακας ελέγχου" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Ημερομηνία και ώρα" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Καταχωρήσεις σφαλμάτων για: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Ρυθμίσεις" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Δεν έχει επιλεγεί κάποια ενέργεια." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Πρέπει να επιλέξετε τουλάχιστον ένα αντικείμενο." diff --git a/mayan/apps/common/locale/en/LC_MESSAGES/django.po b/mayan/apps/common/locale/en/LC_MESSAGES/django.po index 74f74c08c7..579d6b4485 100644 --- a/mayan/apps/common/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,31 +17,31 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -138,35 +138,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -193,29 +193,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -232,16 +209,16 @@ msgstr "" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "" @@ -253,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -313,16 +290,16 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -330,7 +307,7 @@ msgid "" "containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -338,368 +315,139 @@ msgid "" "containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also " "the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which " -"are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly " -"(case-insensitive, not including port). A value beginning with a period can " -"be used as a subdomain wildcard: '.example.com' will match example.com, www." -"example.com, and any other subdomain of example.com. A value of '*' will " -"match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the " -"same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive " -"unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and " -"populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the " -"SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login, " -"especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no " -"redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at django.contrib.staticfiles." -"storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of: " -"transport://userid:password@hostname:port/virtual_host Only the scheme part " -"(transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to http://docs.celeryproject.org/en/v4.1.0/" -"userguide/configuration.html#result-backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "" diff --git a/mayan/apps/common/locale/es/LC_MESSAGES/django.mo b/mayan/apps/common/locale/es/LC_MESSAGES/django.mo index 4be9e6f69f..608754cded 100644 Binary files a/mayan/apps/common/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/es/LC_MESSAGES/django.po b/mayan/apps/common/locale/es/LC_MESSAGES/django.po index 98cc63200a..84387c5578 100644 --- a/mayan/apps/common/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/es/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 05:05+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:35+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -21,31 +21,31 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Común" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Atributos disponibles:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Campos disponibles:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Se utiliza para permitir la traducción sin conexión de los textos del código." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Proporciona la comprobación de estilo." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Entorno de línea de comandos con autocompletado." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Comprueba el formato correcto del archivo README." @@ -57,67 +57,67 @@ msgstr "Selección" msgid "None" msgstr "Ninguno" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Seleccione las entradas que desea eliminar. Mantén pulsado Control para seleccionar varias entradas. Una vez que se complete la selección, haga clic en el botón de abajo o haga doble clic en la lista para activar la acción." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Seleccione las entradas que se añadirán. Mantén pulsado Control para seleccionar varias entradas. Una vez que se complete la selección, haga clic en el botón de abajo o haga doble clic en la lista para activar la acción." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Añadir todo" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Agregar" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Eliminar todo" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Eliminar" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Error de datos duplicados: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s no se pudo crear, error: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s creado exitosamente." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s no se pudo borrar, error: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s borrado exitosamente." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s no se pudo actualizar, error: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s actualizado exitosamente." @@ -142,35 +142,35 @@ msgstr "Editar perfil de localización" msgid "Documentation" msgstr "Documentación" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Errores" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Limpiar todo" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Foro" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licencia" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configuración" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Código fuente" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Apoyo técnico" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Herramientas" @@ -197,29 +197,6 @@ msgstr "Horas" msgid "Minutes" msgstr "Minutos" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Restringe los datos exportados a la app_label o app_label.ModelName especificada." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "La base de datos desde la que se exportarán los datos. Si se omite, se usará la base de datos denominada \"default\"." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "La base de datos a la que se importarán los datos. Si se omite, se usará la base de datos denominada \"default\"." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Forzar la conversión de la base de datos incluso si la base de datos receptora no está vacía." - #: menus.py:10 msgid "System" msgstr "Sistema" @@ -236,16 +213,16 @@ msgstr "Acciones" msgid "Secondary" msgstr "Secundario" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Usuario" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "No se encontró %(verbose_name)s que coincida con la consulta" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objeto" @@ -257,7 +234,7 @@ msgstr "Espacio nombrado" msgid "Date time" msgstr "Fecha y hora" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Resultado" @@ -317,17 +294,17 @@ msgstr "Común periódico" msgid "Delete stale uploads" msgstr "Eliminar subidas expiradas" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Activar bitácoras automáticamente a todas las aplicaciones." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Tiempo para retrasar las tareas de fondo que dependen de la propagación de información en la base de datos." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -335,7 +312,7 @@ msgid "" " containing an application." msgstr "Una lista de nombres que designan todas las aplicaciones que se eliminarán de la lista que normalmente instala Mayan EDMS. Cada entrada debe ser una ruta de Python con puntos a: una clase de configuración de la aplicación (preferida) o un paquete que contenga una aplicación." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -343,370 +320,139 @@ msgid "" " containing an application." msgstr "Una lista de nombres que designan todas las aplicaciones que se instalan más allá de las instaladas normalmente por Mayan EDMS. Cada entrada debe ser una ruta de Python con puntos a: una clase de configuración de la aplicación (preferida) o un paquete que contenga una aplicación." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Nombre de la vista adjunta al ancla de la marca en el menú principal. Esta es también la vista a la que los usuarios serán redirigidos después de iniciar sesión." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "El número de objetos que se mostrarán por página." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Habilite el registro de errores fuera de las capacidades de registro de errores del sistema." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Ruta de acceso al archivo de registro que rastreará errores durante la producción." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nombre que se mostrará en el menú principal." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL de la instalación o página de inicio del proyecto." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Un soporte de almacenamiento que todos los 'workers' puedan utilizar para compartir archivos." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Una lista de cadenas que representan los nombres de host / dominio que este sitio puede servir. Esta es una medida de seguridad para evitar los ataques de encabezado HTTP Host, que son posibles incluso bajo muchas configuraciones de servidor web aparentemente seguras. Los valores en esta lista pueden ser nombres totalmente calificados (por ejemplo, 'www.ejemplo.com'), en cuyo caso se compararán exactamente con el encabezado Host de la solicitud (no distingue entre mayúsculas y minúsculas, sin incluir el puerto). Un valor que comienza con un punto se puede usar como un comodín de subdominio: '.example.com' coincidirá con example.com, www.example.com y cualquier otro subdominio de example.com. Un valor de '*' coincidirá con cualquier cosa; en este caso, usted es responsable de proporcionar su propia validación del encabezado de host (quizás en un middleware, si es así, este middleware debe aparecer primero en MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Cuando se establece en True, si la URL de solicitud no coincide con ninguno de los patrones en el URLconf y no termina en una barra inclinada, se emite un redireccionamiento HTTP a la misma URL con una barra inclinada. Tenga en cuenta que la redirección puede hacer que se pierdan los datos enviados en una solicitud POST. La configuración APPEND_SLASH solo se usa si está instalado CommonMiddleware (ver Middleware). Ver también PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "La lista de validadores que se utilizan para verificar la seguridad de las contraseñas de los usuarios." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Un diccionario que contiene la configuración de todas las bases de datos que se utilizarán con Django. Es un diccionario anidado cuyos contenidos asignan un alias de base de datos a un diccionario que contiene las opciones para una base de datos individual. La configuración DATABASES debe configurar una base de datos predeterminada; también se puede especificar cualquier cantidad de bases de datos adicionales." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Valor predeterminado: 2621440 (es decir, 2,5 MB). El tamaño máximo en bytes que puede ser un cuerpo de solicitud antes de que se genere una Operación Sospechosa (RequestDataTooBig). La comprobación se realiza al acceder a request.body o request.POST y se calcula con respecto al tamaño total de la solicitud, excluyendo cualquier archivo de carga de datos. Puede configurar esto en Ninguno para desactivar la verificación. Las aplicaciones que se espera que reciban publicaciones de forma inusualmente grande deben ajustar esta configuración. La cantidad de datos de solicitud se correlaciona con la cantidad de memoria necesaria para procesar la solicitud y llenar los diccionarios GET y POST. Las solicitudes grandes podrían usarse como un vector de ataque de denegación de servicio si no se seleccionan. Dado que los servidores web normalmente no realizan una inspección profunda de solicitudes, no es posible realizar una comprobación similar en ese nivel. Ver también FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "Predeterminado:'webmaster@localhost' Dirección de correo electrónico predeterminada que se usa para la correspondencia automatizada del administrador(es) del sitio. Esto no incluye los mensajes de error enviados a ADMINS y MANAGERS; para eso, vea SERVER_EMAIL." - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "Valor predeterminado: [] (lista vacía). Lista de objetos de expresiones regulares compilados que representan cadenas de User-Agent que no pueden visitar ninguna página, en todo el sistema. Úselo para robots / rastreadores malos. Esto solo se usa si CommonMiddleware está instalado (ver Middleware)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Valor predeterminado: 'django.core.mail.backends.smtp.EmailBackend'. El backend para usar para enviar correos electrónicos." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Valor predeterminado: 'localhost'. El host que se usará para enviar correos electrónicos." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Valor predeterminado: '' (cadena vacía). Contraseña para usar para el servidor SMTP definido en EMAIL_HOST. Esta configuración se usa junto con EMAIL_HOST_USER al autenticarse en el servidor SMTP. Si cualquiera de estas configuraciones está vacía, Django no intentará la autenticación." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Valor predeterminado: '' (cadena vacía). Nombre de usuario a usar para el servidor SMTP definido en EMAIL_HOST. Si está vacío, Django no intentará la autenticación." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Valor predeterminado: 25. Puerto para usar para el servidor SMTP definido en EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Predeterminado: ninguno Especifica un tiempo de espera en segundos para operaciones de bloqueo como el intento de conexión." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "Predeterminado: Falso. Si se debe usar una conexión TLS (segura) cuando se habla con el servidor SMTP. Esto se usa para conexiones explícitas de TLS, generalmente en el puerto 587. Si experimenta conexiones suspendidas, consulte la configuración de TLS implícita EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "Predeterminado: Falso. Si se debe usar una conexión TLS (segura) implícita al hablar con el servidor SMTP. En la mayoría de la documentación de correo electrónico, este tipo de conexión TLS se conoce como SSL. Generalmente se usa en el puerto 465. Si tiene problemas, consulte la configuración de TLS explícita EMAIL_USE_TLS. Tenga en cuenta que EMAIL_USE_TLS / EMAIL_USE_SSL son mutuamente excluyentes, por lo que solo debe establecer una de esas configuraciones en True." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Valor predeterminado: 2621440 (es decir, 2,5 MB). El tamaño máximo (en bytes) que una carga será antes de que se transmita al sistema de archivos. Consulte Administración de archivos para más detalles. Ver también DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "Valor predeterminado: '/ accounts / login /' La URL donde las solicitudes se redireccionan para iniciar sesión, especialmente cuando se utiliza el decodificador login_required (). Esta configuración también acepta patrones de URL nombrados que se pueden usar para reducir la duplicación de configuración, ya que no tiene que definir la URL en dos lugares (configuración y URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "Valor predeterminado: '/ accounts / profile /' La URL donde las solicitudes se redirigen después del inicio de sesión cuando la vista contrib.auth.login no obtiene el siguiente parámetro. Esto es usado por el decorador login_required (), por ejemplo. Esta configuración también acepta patrones de URL nombrados que se pueden usar para reducir la duplicación de configuración, ya que no tiene que definir la URL en dos lugares (configuración y URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "Predeterminado: Ninguno. La URL donde se redirigen las solicitudes después de que un usuario cierre sesión usando LogoutView (si la vista no obtiene un argumento next_page). Si Ninguno, no se realizará una redirección y se procesará la vista de cierre de sesión. Esta configuración también acepta patrones de URL con nombre que se pueden usar para reducir la duplicación de la configuración, ya que no tiene que definir la URL en dos lugares (configuración y URLconf)." - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "Una lista de direcciones IP, como cadenas, que: Permiten que el procesador de contexto debug() agregue algunas variables al contexto de la plantilla. Puede usar los marcadores de Admindocs incluso si no ha iniciado sesión como usuario del personal. Están marcados como 'internos' (a diferencia de 'EXTERNOS') en los correos electrónicos de AdminEmailHandler." - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "Una lista de todos los idiomas disponibles. La lista es una lista de dos tuplas en el formato (código de idioma, nombre del idioma), por ejemplo, ('ja', 'Japonés'). Esto especifica qué idiomas están disponibles para la selección de idiomas. Generalmente, el valor predeterminado debería ser suficiente. Solo establezca esta configuración si desea restringir la selección de idioma a un subconjunto de los idiomas proporcionados por Django." - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "Un texto que representa el código de idioma para esta instalación. Esto debe estar en formato de ID de idioma estándar. Por ejemplo, el inglés de EE. UU. Es 'en-us'. Tiene dos propósitos: si el middleware de configuración regional no está en uso, decide qué traducción se sirve a todos los usuarios. Si el middleware de configuración regional está activo, proporciona un idioma alternativo en caso de que el idioma preferido del usuario no se pueda determinar o el sitio web no lo admita. También proporciona la traducción alternativa cuando no existe una traducción para un literal dado para el idioma preferido del usuario." - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "URL a usar cuando se hace referencia a archivos estáticos ubicados en STATIC_ROOT. Ejemplo: \"/static/\" o \"http://static.example.com/\". Si no es None, se usará como ruta base para las definiciones de activos (la clase Media) y la aplicación staticfiles. Debe terminar en una barra inclinada si se establece en un valor no vacío." - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "El motor de almacenamiento de archivos que se utiliza al recopilar archivos estáticos con el comando de gestión collectstatic. Puede encontrar una instancia lista para usar del backend de almacenamiento definido en esta configuración en django.contrib.staticfiles.storage.staticfiles_storage." - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "Una cadena que representa la zona horaria para esta instalación. Tenga en cuenta que esto no es necesariamente la zona horaria del servidor. Por ejemplo, un servidor puede servir múltiples sitios con Django, cada uno con una configuración de zona horaria separada." - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "La ruta completa de Python del objeto de aplicación WSGI que usarán los servidores incorporados de Django (por ejemplo, runserver). El comando django-admin startproject management creará un archivo wsgi.py simple con una aplicación invocable en él, y señalará esta configuración a esa aplicación." - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "Valor predeterminado: \"amqp://\". URL del intermediario predeterminado Debe ser una URL en forma de: transporte://usuario:contraseña@servidor:puerto/virtual_host Solo se requiere la parte de esquema (transporte: //), el resto es opcional y se predetermina a los valores predeterminados de transporte específico." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "Predeterminado: Sin back-end de resultados habilitado por defecto. El backend utilizado para almacenar resultados de tareas (lápidas). Consulte http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Confirmar eliminación" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Editar %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Confirmar" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Detalles para: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Editar: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Crear" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "Ingrese un valor JSON válido." + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Ingrese un valor válido YAML." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Introduzca un nombre interno válido que conste de letras, números y subrayados." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Sobre" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Detalles del perfil de localización del usuario actual" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Editar los detalles del perfil del usuario local" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Tablero" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Borrar entradas de registro de errores para: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "El registro de errores del objeto se borró correctamente" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Fecha y hora" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "Esta vista muestra el registro de errores de diferentes objetos. Una lista vacía es algo bueno." + +#: views.py:160 +msgid "There are no error log entries" +msgstr "No hay entradas de registro de errores" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Entradas del registro de errores para: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "No hay opciones de configuración disponibles." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Ningún resultado aquí significa que no tiene los permisos necesarios para realizar tareas administrativas." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Elementos de configuración" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Aquí puede configurar todos los aspectos del sistema." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Estos módulos se utilizan para hacer el mantenimiento del sistema." - -#: views.py:240 -msgid "No action selected." -msgstr "Ninguna acción seleccionada." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Debe seleccionar al menos un artículo." diff --git a/mayan/apps/common/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/common/locale/fa/LC_MESSAGES/django.mo index d5237d3a9d..8baf39a076 100644 Binary files a/mayan/apps/common/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/fa/LC_MESSAGES/django.po b/mayan/apps/common/locale/fa/LC_MESSAGES/django.po index 5c20b9825a..3b85a8dd5c 100644 --- a/mayan/apps/common/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/fa/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Mehdi Amani \n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,31 +19,31 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "مشترک" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "ویژگی های موجود:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "انتخاب" msgid "None" msgstr "هیچ یک" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "افزودن" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "حذف" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s ایجاد نشد، خطا: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s با موفقیت ایجاد شد" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s حذف نشده است، خطا: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s با موفقیت حذف شد" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s به روز نشده، خطا: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s با موفقیت به روز شد" @@ -140,35 +140,35 @@ msgstr "ویرایش پروفایل محلی" msgid "Documentation" msgstr "مستندات" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "خطاها" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "انجمن" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "لیسانس" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "نصب" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "کد منبع" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "حمایت کردن" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "ابزار" @@ -195,29 +195,6 @@ msgstr "ساعات" msgid "Minutes" msgstr "دقایق" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "سیستم" @@ -234,16 +211,16 @@ msgstr "اقدامات" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "کاربر" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "شیئ" @@ -255,7 +232,7 @@ msgstr "فضای نام" msgid "Date time" msgstr "تاریخ زمان" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "جواب" @@ -315,17 +292,17 @@ msgstr "دوره ای متداول" msgid "Delete stale uploads" msgstr "حذف آپلود های قدیمی" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "به طور خودکار ورود به سیستم را به تمام برنامه ها فعال کنید" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "زمان برای به تاخیر انداختن وظایف پس زمینه که به پایگاه داده متعهد به انتشار است." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "مسیر فایل logfile که خطاهای تولید را دنبال می کند." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "محلی که کلیه کاربران جهت به اشتراک گذاری فایل میتوانند استفاه کنند." -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "تائید حذف" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "تائید" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "جزئیات برای : %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "ویرایش : %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "ایجاد" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "یک مقدار معتبر YAML را وارد کنید" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "یک نام داخلی معتبر وارد کنید که شامل حروف، اعداد و حروف زیر است." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "درباره" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "شرح پروفایل محلی کاربر فعلی" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "ویرایش شرح پروفایل محلی کاربر فعلی" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "داشبورد" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "تاریخ و زمان" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "ورودی های ورود به سیستم خطا برای: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "اقلام نصب" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "هیچ عملیاتی action انتخاب نشده است." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "حداقل یک مورد انتخاب شود." diff --git a/mayan/apps/common/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/common/locale/fr/LC_MESSAGES/django.mo index 89338c96e6..b979e8507d 100644 Binary files a/mayan/apps/common/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/fr/LC_MESSAGES/django.po b/mayan/apps/common/locale/fr/LC_MESSAGES/django.po index 3a5c654f9c..60cb2a990d 100644 --- a/mayan/apps/common/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/fr/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Franck Boucher , 2016 # Frédéric Escudero , 2017 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # PatrickHetu , 2012 # Pierre Lhoste , 2012 # SadE54 , 2013 @@ -16,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-27 00:54+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-08 19:01+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,31 +27,31 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Commun" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Attributs disponibles: \n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Champs disponibles: \n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Utilisé pour permettre la traduction hors ligne des chaînes de texte du code." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Fournit une vérification de style." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Environnement de ligne de commande avec autocomplétion." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Vérifie le formatage du fichier README." @@ -62,67 +63,67 @@ msgstr "Sélection" msgid "None" msgstr "Aucun" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Sélectionnez les entrées à supprimer. Maintenez la commande enfoncée pour sélectionner plusieurs entrées. Une fois la sélection terminée, cliquez sur le bouton ci-dessous ou double-cliquez sur la liste pour activer l'action." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Sélectionnez les entrées à ajouter. Maintenez la commande enfoncée pour sélectionner plusieurs entrées. Une fois la sélection terminée, cliquez sur le bouton ci-dessous ou double-cliquez sur la liste pour activer l'action." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Ajouter tout" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Ajouter" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Retirer tout" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Retirer" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Erreur de données en double: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s n'a pas été créé, erreur : %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s créé avec succès." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s n'a pas été supprimé, erreur : %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s supprimé avec succès." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s n'a pas été mis à jour, erreur : %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s mis à jour avec succès." @@ -147,35 +148,35 @@ msgstr "Éditer les paramètres régionaux du profil" msgid "Documentation" msgstr "Documentation" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Erreurs" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Effacer tout" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configuration" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Code source" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Support" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Outils" @@ -202,36 +203,13 @@ msgstr "Heures" msgid "Minutes" msgstr "Minutes" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Forcer la conversion de la base de données même si la base de données distante n'est pas vide." - #: menus.py:10 msgid "System" msgstr "Système" #: menus.py:12 menus.py:13 msgid "Facet" -msgstr "" +msgstr "Facette" #: menus.py:16 msgid "Actions" @@ -241,16 +219,16 @@ msgstr "Actions" msgid "Secondary" msgstr "Secondaire" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Uitlisateur" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Aucun %(verbose_name)s trouvé correspondant à la requête" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objet" @@ -262,7 +240,7 @@ msgstr "Espace de nommage" msgid "Date time" msgstr "Date et heure" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Résultat" @@ -322,17 +300,17 @@ msgstr "Tâches communes périodiques" msgid "Delete stale uploads" msgstr "Supprimer les imports périmés" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Activation automatique de la trace pour toutes les applications." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Durée de temporisation des tâches d'arrière plan dépendant d'une mise à jour de la base de données." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,7 +318,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -348,370 +326,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Le nombre d'objets qui seront affichés par page." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Activer la journalisation des erreurs en dehors des capacités de journalisation du système d'erreur." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Chemin d'accès au fichier journal qui enregistrera les erreurs pendant la production." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nom qui sera affiché dans le menu principal." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL de l'installation ou de la page d'accueil du projet." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Un espace de stockage que tous les agents pourront utiliser pour partager des fichiers." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "La liste des validateurs utilisés pour vérifier la force des mots de passe de l'utilisateur." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Par défaut:'django.core.mail.backends.smtp.EmailBackend'. Le backend à utiliser pour envoyer des courriels." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Par défaut: 'localhost'. L'hôte à utiliser pour l'envoi de courriel." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Par défaut: '' (chaîne vide). Nom d'utilisateur à utiliser pour le serveur SMTP défini dans EMAIL_HOST. Si vide, Django ne tentera pas d'authentification." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Par défaut: 25. Port à utiliser pour le serveur SMTP défini dans EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Par défaut: aucun. Spécifie un délai d'expiration en secondes pour le blocage d'opérations telles que la tentative de connexion." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Confirmer la suppression" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Modifié %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Confirmer" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Détails pour : %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Modifier : %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Créer" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "Saisissez une valeur JSON valide." + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Saisissez une valeur YAML valide." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Entrez un 'nom interne' valide composé de lettres, de chiffres et de soulignement." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "A propos" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Détails des paramètres régionaux de l'utilisateur actuel" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Éditer le détail des paramètres régionaux de l'utilisateur actuel" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Tableau de bord" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Effacer les entrées du journal des erreurs pour : %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Les entrées concernées du journal des erreurs ont été effacées avec succès" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Date et heure" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "Il n'y a pas d'entrées dans le journal des erreurs" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Entrées du journal des erreurs pour : %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Aucune option d'installation disponible." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Aucun résultat ici signifie que vous ne disposez pas des autorisations requises pour effectuer des tâches administratives." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Paramètres de configuration" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Ici vous pouvez configurer tous les aspects du système." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Ces modules sont utilisés pour le système de maintenance." - -#: views.py:240 -msgid "No action selected." -msgstr "Aucune action sélectionnée." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Vous devez sélectionner au moins un élément." diff --git a/mayan/apps/common/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/common/locale/hu/LC_MESSAGES/django.mo index 764a680b81..c4f5beb580 100644 Binary files a/mayan/apps/common/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/hu/LC_MESSAGES/django.po b/mayan/apps/common/locale/hu/LC_MESSAGES/django.po index 21ef452846..e910466ba7 100644 --- a/mayan/apps/common/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -18,31 +18,31 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Általános" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Rendelkezésre álló paraméterek:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "Kiválasztás" msgid "None" msgstr "Semmi" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Levétel" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -139,35 +139,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "beállítás" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Eszköz" @@ -194,29 +194,6 @@ msgstr "Órák" msgid "Minutes" msgstr "Percek" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -233,16 +210,16 @@ msgstr "Műveletek" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Felhasználó" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "" @@ -254,7 +231,7 @@ msgstr "Névtér" msgid "Date time" msgstr "Dátum idő" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Eredmény" @@ -314,17 +291,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Dátum és idő" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Beállítás elemei" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "" diff --git a/mayan/apps/common/locale/id/LC_MESSAGES/django.mo b/mayan/apps/common/locale/id/LC_MESSAGES/django.mo index 042a75cacc..fa8c8f68cc 100644 Binary files a/mayan/apps/common/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/id/LC_MESSAGES/django.po b/mayan/apps/common/locale/id/LC_MESSAGES/django.po index 9bb144488c..d077426c8b 100644 --- a/mayan/apps/common/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -17,31 +17,31 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Nihil" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "tambah" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "hapus" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -138,35 +138,35 @@ msgstr "edit profil lokal" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lisensi" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -193,29 +193,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -232,16 +209,16 @@ msgstr "Aksi" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Pengguna" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "" @@ -253,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "tanggal waktu" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -313,17 +290,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -331,7 +308,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -339,370 +316,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Tentang" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Tanggal dan waktu" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "tidak ada aksi yang dipilih" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "pilih salah satu item" diff --git a/mayan/apps/common/locale/it/LC_MESSAGES/django.mo b/mayan/apps/common/locale/it/LC_MESSAGES/django.mo index 5893cd36c6..d82723932e 100644 Binary files a/mayan/apps/common/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/it/LC_MESSAGES/django.po b/mayan/apps/common/locale/it/LC_MESSAGES/django.po index e3f47c1c94..5678ed3fe7 100644 --- a/mayan/apps/common/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/it/LC_MESSAGES/django.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Marco Camplese \n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,31 +23,31 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Comune" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Attributi disponibili:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Campi disponibili:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Usato per consentire la traduzione offline delle stringhe di testo nel codice." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Ambiente a riga di comando con autocompletamento." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Controlla la corretta formattazione del file README." @@ -59,67 +59,67 @@ msgstr "Selezione" msgid "None" msgstr "Nessuno" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Seleziona le voci da rimuovere. Tieni premuto Ctrl per selezionare più di una voce. Quando hai finito di selezionare, clicca il bottone sotto o fai doppio clic sulla lista per attivare l'azione." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Seleziona le voci da aggiungere. Tieni premuto Ctrl per selezionare più di una voce. Quando hai finito di selezionare, clicca il bottone sotto o fai doppio clic sulla lista per attivare l'azione." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Aggiungi tutto" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Aggiungi" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Rimuovi tutto" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Rimuovi" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Errore dati duplicati: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s non creato, errore: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s creato con successo.." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s non cancellato, errore: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s cancellato con successo.." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s non aggiornato, errore: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s aggiornato con successo." @@ -144,35 +144,35 @@ msgstr "Modifica profilo locale" msgid "Documentation" msgstr "Documentazione" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Errori" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Pulisci tutto" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licenza" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configurazione" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Codice sorgente" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Supporto" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Strumenti" @@ -199,29 +199,6 @@ msgstr "Orario" msgid "Minutes" msgstr "Minuti" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Limita i dati del dump a una specifica app_label o app_label.ModelName." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Il database da cui esportare i dati. Se non specificato, verrà usato il database chiamato \"default\"." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Il database sul quale importare i dati. Se non specificato, verrà usato il database chiamato \"default\"." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Forza la conversione del database anche se il database di destinazione non è vuoto." - #: menus.py:10 msgid "System" msgstr "Sistema" @@ -238,16 +215,16 @@ msgstr "Azioni " msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Utente" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Nessun %(verbose_name)s trovato con questa query" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Oggetto" @@ -259,7 +236,7 @@ msgstr "Namespace" msgid "Date time" msgstr "Date time" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Risultato" @@ -319,17 +296,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "Cancella upload in sospeso" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Abilita automaticamente i log per tutte le app." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Il ritardo per i task in background dipende dalla propagazione del commit su database." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -337,7 +314,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -345,370 +322,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Nome della vista collegata all'ancora brand nel menù principale. Questa è anche la vista alla quale gli utenti verranno reindirizzati dopo il login." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Percorso del file di log su cui verranno scritti gli errori in produzione." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nome da visualizzare nel menù principale." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL dell'installazione o pagina home del progetto." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Un backend di memorizzazione che tutti i lavoratori possono utilizzare per condividere i file." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Una lista di stringhe con i nomi host o nomi di dominio che questo sito può servire. Si tratta di una misura di sicurezza per prevenire attacchi con l'intestazione HTTP Host, che sono possibili in tante configurazioni dei web server anche apparentemente sicure. I valori in questa lista possono essere FQDN (es. 'www.nomesito.it'), nel quale caso verranno confrontati con l'header di richiesta Host in maniera esatta (senza controllo maiuscole e senza la porta). Una stringa che inizi con un punto può essere usata come wildcard per il sottodominio: '.nomesito.it' sarà valido per nomesito.it, www.nomesito.it e qualunque altro sottodominio di nomesito.it. Il valore '*' corrisponde a qualunque sito; in questo caso sei tu responsabile di validare in qualche modo l'intestazione Host (magari in un middleware, in tal caso deve essere il primo della lista MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "La lista dei validatori usati per controllare l'efficacia delle password degli utenti." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Un dizionario che contiene le impostazioni per tutti i database da usare con Django. È un dizionario innestato le cui chiavi sono alias di database e i valori sono i dizionari con le opzioni per ogni database. L'impostazione DATABASES deve contenere un database chiamato 'default'; è possibile poi specificare ulteriori database aggiuntivi." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Conferma la cancellazione" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Conferma" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Dettagli per: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Modifica: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Crea" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Inserisci un valore YAML valido." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Inserisci un 'internal name' valido composto da lettere, numeri e underscore." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Informazioni" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Dettagli del profilo dell'utente attuale" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Modificare i dettagli del profilo corrente dell'utente" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Dashboard" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Data e ora" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Impostazione elementi" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Nessuna azione selezionata" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Devi selezionare un elemento" diff --git a/mayan/apps/common/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/common/locale/lv/LC_MESSAGES/django.mo index cdc80ca84c..f870e41a7f 100644 Binary files a/mayan/apps/common/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/lv/LC_MESSAGES/django.po b/mayan/apps/common/locale/lv/LC_MESSAGES/django.po index a7ddb7470a..ccf390c9a1 100644 --- a/mayan/apps/common/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-04 06:49+0000\n" +"Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,31 +18,31 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Kopīgs" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Pieejamie atribūti: \n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Pieejamie lauki: \n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Izmantots, lai atļautu koda teksta virkņu bezsaistes tulkojumu." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Nodrošina stila pārbaudi." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Komandrindas vide ar automātisko aizpildi." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Pārbauda README faila pareizu formatēšanu." @@ -54,67 +54,67 @@ msgstr "Selekcija" msgid "None" msgstr "Nav neviens" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Atlasiet noņemamos ierakstus. Lai atlasītu vairākus ierakstus, turiet Control taustiņu. Kad atlase ir pabeigta, noklikšķiniet uz zemāk redzamās pogas vai veiciet dubultklikšķi uz saraksta, lai aktivizētu darbību." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Atlasiet pievienojamos ierakstus. Lai atlasītu vairākus ierakstus, turiet Control taustiņu. Kad atlase ir pabeigta, noklikšķiniet uz zemāk redzamās pogas vai veiciet dubultklikšķi uz saraksta, lai aktivizētu darbību." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Pievienot visus" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Pievienot" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Noņemt visus" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Noņemt" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Datu kopijas kļūda: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nav izveidots, kļūda: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s izveidots veiksmīgi." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nav dzēsts, kļūda: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s veiksmīgi izdzēsts." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nav atjaunināts, kļūda: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s veiksmīgi atjaunināts." @@ -125,7 +125,7 @@ msgstr "Par šo" #: links.py:39 msgid "Get the book" -msgstr "" +msgstr "Iegūstiet grāmatu" #: links.py:44 msgid "Locale profile" @@ -139,35 +139,35 @@ msgstr "Rediģēt lokalizācijas profilu" msgid "Documentation" msgstr "Dokumentācija" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Kļūdas" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Iztīrīt visu" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forums" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Setup" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Pirmkods" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Atbalsts" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Rīki" @@ -194,29 +194,6 @@ msgstr "Stundas" msgid "Minutes" msgstr "Minūtes" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Ierobežo izgāztos datus uz norādīto app_label vai app_label.ModelName." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Datu bāze, no kuras tiks eksportēti dati. Ja tas tiks izlaists, tiks izmantota datubāze ar nosaukumu \"default\"." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Datu bāze, uz kuru tiks importēti dati. Ja tas tiks izlaists, tiks izmantota datubāze ar nosaukumu \"default\"." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Piespiest datu bāzes pārveidošanu pat tad, ja saņemošā datu bāze nav tukša." - #: menus.py:10 msgid "System" msgstr "Sistēma" @@ -233,16 +210,16 @@ msgstr "Darbības" msgid "Secondary" msgstr "Sekundārā" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Lietotājs" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "%(verbose_name)s nav atrasts atbilstošs vaicājumam" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objekts" @@ -254,7 +231,7 @@ msgstr "Vārda vieta" msgid "Date time" msgstr "Datums Laiks" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Rezultāts" @@ -314,17 +291,17 @@ msgstr "Kopīgs periodiski" msgid "Delete stale uploads" msgstr "Dzēst nostāvējušās augšupielādes" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Automātiski iespējojiet pierakstīšanos visās lietotnēs." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Laiks uz kādu aizkavēt fona uzdevumus, kas ir atkarīgs no datu bāzes apņemšanās uz izplatīšanu." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "Saraksts ar virknēm, kas apzīmē visas lietojumprogrammas, kuras jānoņem no saraksta, kuras parasti uzstāda Mayan EDMS. Katrai virknei vajadzētu būt punktveida Python ceļam uz: lietojumprogrammas konfigurācijas klasi (vēlams) vai paketi, kurā ir lietojumprogramma." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "Saraksts ar virknēm, kas apzīmē visas lietojumprogrammas, kas ir uzstādītas ārpus tām, ko parasti uzstāda Mayan EDMS. Katrai virknei vajadzētu būt punktveida Python ceļam uz: lietojumprogrammas konfigurācijas klasi (vēlams) vai paketi, kurā ir lietojumprogramma." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Zīmola enkuram pievienotā skata nosaukums galvenajā izvēlnē. Tas ir arī skats, uz kuru pēc pierakstīšanās lietotāji tiks novirzīti." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Objektu skaits, kas tiks rādīti vienā lapā." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Iespējot kļūdu reģistrēšanu ārpus sistēmas kļūdu reģistrēšanas iespējām." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Ceļš uz žurnāla failu, kurā tiks novērotas kļūdas ražošanas laikā." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nosaukums, kas jārāda galvenajā izvēlnē." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "Projekta instalācijas vai mājas lapas URL." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Uzglabāšanas backend, ko visi darbinieki var izmantot, lai koplietotu failus." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Saraksts ar virknēm, kas pārstāv vietnes/domēna vārdus, kurus šī vietne var pasniegt. Šis ir drošības pasākums, lai novērstu HTTP uzņēmēja galvenes uzbrukumus, kas ir iespējami pat daudzās šķietami drošās tīmekļa servera konfigurācijās. Vērtības šajā sarakstā var būt pilnībā kvalificēti vārdi (piemēram, “www.example.com”), un tādā gadījumā tie tiks precīzi saskaņoti ar pieprasījuma Host galvenes virsrakstu (nejūtīga, neietverot portu). Vērtību, kas sākas ar punktu, var izmantot kā apakšdomēna aizstājējzīmi: '.example.com' atbilst example.com, www.example.com un jebkuram citam example.com apakšdomēnam. Vērtība '*' atbilst jebkuram; šajā gadījumā jūs esat atbildīgs par savas galvenes apstiprinājuma apstiprināšanu (varbūt starpprogrammatūrā; ja tā, tad starpprogrammatūra vispirms jānorāda iekš MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Ja iestatījums ir True, un pieprasījuma URL neatbilst nevienam no URLconf modeļiem un tas nenotiek slīpsvītrā, HTTP novirzīšana tiek izdota tam pašam URL ar pievienoto slīpsvītru. Ņemiet vērā, ka novirzīšana var izraisīt jebkādu POST pieprasījumā iesniegto datu pazaudēšanu. Iestatījums APPEND_SLASH tiek izmantots tikai tad, ja ir instalēta CommonMiddleware (sk. Starpprogrammatūra). Skatiet arī PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "Validatoru saraksts, kurus izmanto, lai pārbaudītu lietotāja paroļu stiprumu." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Vārdnīca ar visu Django lietojamo datu bāzu iestatījumiem. Tā ir ligzdota vārdnīca, kuras saturs iezīmē datubāzes aizstājvārdu vārdnīcā, kurā ir atsevišķas datu bāzes iespējas. DATABASES iestatījumam jākonfigurē noklusējuma datu bāze; var norādīt arī jebkuru papildu datu bāzu skaitu." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Noklusējums: 2621440 (ti, 2,5 MB). Maksimālais lielums baitos, ko pieprasīšanas struktūra var būt pirms aizdomīgas darbības (RequestDataTooBig) palielināšanas. Pārbaude tiek veikta, piekļūstot pieprasījumam.body vai request.POST, un tiek aprēķināta pēc kopējā pieprasījuma lieluma, izņemot visus failu augšupielādes datus. To var iestatīt uz Nav, lai izslēgtu pārbaudi. Lietojumprogrammām, kurām sagaidāms, ka tās saņems neparasti lielas veidlapas ziņas, ir jākontrolē šis iestatījums. Pieprasījuma datu apjoms ir saistīts ar atmiņas apjomu, kas nepieciešams, lai apstrādātu pieprasījumu un aizpildītu GET un POST vārdnīcas. Lielus pieprasījumus var izmantot kā pakalpojumu atteikšanas uzbrukuma vektoru, ja tas netiek pārbaudīts. Tā kā tīmekļa serveri parasti neveic dziļu pieprasījumu pārbaudi, nav iespējams veikt līdzīgu pārbaudi šajā līmenī. Skatiet arī FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "Noklusējums: “webmaster@localhost” Noklusējuma e-pasta adrese, ko izmanto dažādai automatizētai sarakstei no vietnes pārvaldnieka (-iem). Tas neietver kļūdas ziņojumus, kas nosūtīti ADMINS un MANAGERS; par to skatiet SERVER_EMAIL." - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "Noklusējums: [] (Tukšs saraksts). Sastādīto regulāro izteiksmes objektu saraksts, kas pārstāv lietotāja-aģentu virknes, kurām nav atļauts apmeklēt jebkuru lapu. Izmantojiet to sliktiem robotiem/rāpuļprogrammām. Tas tiek izmantots tikai tad, ja ir instalēta CommonMiddleware (sk. Starpprogrammatūra)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Noklusējums: “django.core.mail.backends.smtp.EmailBackend”. Backend, ko izmanto e-pasta sūtīšanai." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Noklusējums: “localhost”. Hosts, ko izmanto e-pasta sūtīšanai." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Noklusējums: '' (Tukša virkne). Parole, ko izmantot SMTP serverim, kas definēts vietnē EMAIL_HOST. Šis iestatījums tiek izmantots kopā ar EMAIL_HOST_USER autentificējot SMTP serveri. Ja kāds no šiem iestatījumiem ir tukšs, Django neveic autentifikāciju." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Noklusējums: '' (Tukša virkne). Lietotājvārds, ko izmantot SMTP serverim, kas definēts pakalpojumā EMAIL_HOST. Ja tukšs, Django neizmēģinās autentifikāciju." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Noklusējums: 25. Portu, ko izmantot SMTP serverim, kas definēts EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Noklusējums: nav. Norāda taimautu sekundēs, lai bloķētu darbības, piemēram, savienojuma mēģinājumu." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "Noklusējums: False. Vai lietojat TLS (drošu) savienojumu, runājot ar SMTP serveri. Tas tiek izmantots skaidriem TLS savienojumiem, parasti 587. portā. Ja rodas savienojumi ar kabeļiem, skatiet netiešo TLS iestatījumu EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "Noklusējums: False. Vai, runājot ar SMTP serveri, izmantojiet netiešu TLS (drošu) savienojumu. Vairumā e-pasta dokumentāciju šāda veida TLS savienojums tiek saukts par SSL. To parasti izmanto 465. portā. Ja rodas problēmas, skatiet skaidru TLS iestatījumu EMAIL_USE_TLS. Ņemiet vērā, ka EMAIL_USE_TLS/EMAIL_USE_SSL ir savstarpēji izslēdzoši, tāpēc tikai vienu no šiem iestatījumiem iestatiet uz True." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Noklusējums: 2621440 (ti, 2,5 MB). Maksimālais lielums (baitos), ko augšupielāde būs pirms straumēšanas datņu sistēmā. Papildinformāciju skatiet sadaļā Failu pārvaldīšana. Skatiet arī DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "Noklusējums: '/accounts/login/' URL, kurā pieprasījumi tiek novirzīti, lai pieteiktos, īpaši, ja izmantojat login_required () dekoratoru. Šis iestatījums arī pieņem nosauktos URL modeļus, kurus var izmantot, lai samazinātu konfigurācijas dublēšanos, jo jums nav jādefinē URL divās vietās (iestatījumi un URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "Noklusējums: '/accounts/profile/' URL, kurā pieprasījumi tiek novirzīti pēc pieteikšanās brīdī, kad skats par ieguldījumu.auth.login nesaņem nākamo parametru. To izmanto, piemēram, login_required () dekorētājs. Šis iestatījums arī pieņem nosauktos URL modeļus, kurus var izmantot, lai samazinātu konfigurācijas dublēšanos, jo jums nav jādefinē URL divās vietās (iestatījumi un URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "Noklusējums: nav. URL, kurā pieprasījumi tiek novirzīti pēc tam, kad lietotājs ir pieteicies, izmantojot LogoutView (ja skats nesaņem nākamo lapu argumentu). Ja nav, netiks veikta novirzīšana un tiks atteikts logout skats. Šis iestatījums arī pieņem nosauktos URL modeļus, kurus var izmantot, lai samazinātu konfigurācijas dublēšanos, jo jums nav jādefinē URL divās vietās (iestatījumi un URLconf)." - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "IP adrešu saraksts kā virknes, kas: Ļauj atkļūdošanas () konteksta procesoram pievienot dažus mainīgos veidnes kontekstam. Var izmantot admindocs grāmatzīmes, pat ja nav pieteicies kā personāla lietotājs. Tiek atzīmēti kā \"iekšējie\" (atšķirībā no \"EXTERNAL\") AdminEmailHandler e-pastos." - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "Visu pieejamo valodu saraksts. Sarakstā ir iekļauts divu ierakstu saraksts (valodas kods, valodas nosaukums), piemēram, ('ja', 'japāņu'). Tas norāda, kuras valodas ir pieejamas valodas izvēlei. Parasti pietiek ar noklusējuma vērtību. Iestatiet šo iestatījumu tikai tad, ja vēlaties ierobežot valodu izvēli ar Django sniegto valodu apakškopu." - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "Stringi, kas attēlo šīs instalācijas valodas kodu. Tam jābūt standarta valodas ID formātā. Piemēram, ASV angļu valoda ir \"en-us\". Tas kalpo diviem mērķiem: ja lokālā starpprogrammatūra netiek izmantota, tā nolemj, kurš tulkojums tiek nodrošināts visiem lietotājiem. Ja lokalizācijas starpprogrammatūra ir aktīva, tā nodrošina rezerves valodu, ja lietotāja vēlamo valodu nevar noteikt vai vietne to neatbalsta. Tā arī nodrošina rezerves tulkojumu, ja konkrētā literārā tulkojums nav lietotāja vēlamajai valodai." - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "URL, kas jāizmanto, atsaucoties uz statiskiem failiem, kas atrodas STATIC_ROOT. Piemērs: \"/static/\" vai \"http://static.example.com/\". Ja šī vērtība nav tukša, tā tiks izmantota kā bāzes ceļš aktīvu definīcijām (multivides Media klase) un staticfiles lietotnei. Ja vērtība nav tukša, tai ir jābeidzas ar slīpsvītru." - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "Failu glabāšanas dzinējs, ko izmanto, lai savāktu statiskos failus ar kolektīvās pārvaldības komandu. Šajā iestatījumā definētais glabāšanas backend piemērs ir pieejams vietnē django.contrib.staticfiles.storage.staticfiles_storage." - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "Virkne, kas attēlo šīs instalācijas laika joslu. Ņemiet vērā, ka tas ne vienmēr ir servera laika josla. Piemēram, viens serveris var kalpot vairākām Django darbinātām vietnēm, katra ar atsevišķu laika joslu iestatījumu." - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "Pilns Python ceļš WSGI lietojumprogrammas objektam, ko izmantos Django iebūvētie serveri (piemēram, palaišanas serveris). Django-admin startproject vadības komanda izveidos vienkāršu wsgi.py failu ar tajā pieprasāmo lietojumprogrammu un norādīs šo iestatījumu uz šo programmu." - -#: settings.py:396 -msgid "Celery" -msgstr "Selerijas" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "Noklusējums: \"amqp://\". Noklusējuma starpnieka URL. Tam ir jābūt URL šādā formā: transport://userid:password@hostname:port/virtual_host Nepieciešama tikai shēmas daļa (transport://), pārējais ir neobligāts, un pēc noklusējuma konkrētās transportēšanas noklusējuma vērtības." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "Noklusējums: pēc noklusējuma nav iespējots rezultāts. Backend, ko izmanto uzdevumu rezultātu (kapu pieminekļu) glabāšanai. Skatiet http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Apstipriniet dzēšanu" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Rediģēt %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Apstiprināt" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Sīkāka informācija par: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Rediģēt: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Izveidot" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "Ievadiet derīgu JSON vērtību." + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Ievadiet derīgu YAML vērtību." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Ievadiet derīgu “iekšējo nosaukumu”, kas sastāv no burtiem, cipariem un pasvītrojumiem." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Par" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Pašreizējā lietotāja lokalizācijas profila informācija" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Rediģējiet pašreizējās lietotāja lokalizācijas profila informāciju" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Panelis" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Notīrīt kļūdas žurnāla ierakstus: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Objekta kļūdu žurnāls veiksmīgi notīrīts" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Datums un laiks" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "Šajā skatā tiek parādīts dažādu objektu kļūdu žurnāls. Tukšs saraksts ir laba lieta." + +#: views.py:160 +msgid "There are no error log entries" +msgstr "Nav kļūdu žurnāla ierakstu" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Kļūdu žurnāla ieraksti: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Nav pieejamas iestatīšanas opcijas." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Neviens no rezultātiem šeit nenozīmē, ka nav nepieciešamo atļauju administratīvā uzdevuma veikšanai." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Iestatīšanas vienumi" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Šeit jūs varat konfigurēt visus sistēmas aspektus." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Šie moduļi tiek izmantoti sistēmas uzturēšanai." - -#: views.py:240 -msgid "No action selected." -msgstr "Nav atlasīta neviena darbība." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Jāizvēlas vismaz viens vienums." diff --git a/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.mo index 54b3bee7ed..18b80afb18 100644 Binary files a/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.po index 6b89961701..3a5c84313a 100644 --- a/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/nl_NL/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Evelijn Saaltink \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,31 +20,31 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Gemeenschappelijk" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -56,67 +56,67 @@ msgstr "Selectie" msgid "None" msgstr "Geen" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Voeg toe" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Verwijder" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s niet aangemaakt, foutmelding: %(error)s." -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s succesvol aangemaakt." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s niet verwijderd, foutmelding: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s succesbol verwijderd." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s niet geupdate, foutmelding: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s werden succesvol geupdate." @@ -141,35 +141,35 @@ msgstr "Wijzig landsinstellingen" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licentie" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Setup" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Gereedschappen" @@ -196,29 +196,6 @@ msgstr "Uren" msgid "Minutes" msgstr "Minuten" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -235,16 +212,16 @@ msgstr "Acties" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Gebruiker" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Object" @@ -256,7 +233,7 @@ msgstr "Namespace" msgid "Date time" msgstr "Datum en tijd" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Resultaat" @@ -316,17 +293,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Wachttijd voor achtergrondtaken die afhankelijk zijn van het verbreiden van een database commit." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -334,7 +311,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -342,370 +319,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Een opslagbackend die alle werkers kunnen gebruiken om bestanden te delen." -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Bevestig verwijdering" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Bevestig" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Bewerken: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Maak aan" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Voer een geldige YAML-waarde in." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Informatie" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Details landinstellingen huidige gebruiker" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Wijzig landsinstellingen van de huidige gebruiker" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Dashboard" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Datum en tijd" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Setup items" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Geen acties geselecteerd." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Selecteer minimaal een item." diff --git a/mayan/apps/common/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/common/locale/pl/LC_MESSAGES/django.mo index 7347420953..56190c76bb 100644 Binary files a/mayan/apps/common/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/pl/LC_MESSAGES/django.po b/mayan/apps/common/locale/pl/LC_MESSAGES/django.po index 2fb8392c91..acff14990a 100644 --- a/mayan/apps/common/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/pl/LC_MESSAGES/django.po @@ -16,9 +16,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Wojciech Warczakowski \n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,31 +26,31 @@ msgstr "" "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:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Ustawienia wspólne" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Dostępne atrybuty: \n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Dostępne pola:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Służy do umożliwienia tłumaczenia ciągów tekstowych kodu w trybie offline." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Zapewnia kontrolę stylu." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Środowisko wiersza poleceń z funkcją autouzupełniania." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Sprawdza poprawność formatowania pliku README." @@ -62,67 +62,67 @@ msgstr "Zaznaczenie" msgid "None" msgstr "Brak" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Wybierz wpisy do usunięcia. Przytrzymaj Control, aby wybrać wiele wpisów. Po zakończeniu wyboru kliknij przycisk poniżej lub kliknij dwukrotnie listę, aby aktywować akcję." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Wybierz wpisy do dodania. Przytrzymaj Control, aby wybrać wiele wpisów. Po zakończeniu wyboru kliknij przycisk poniżej lub kliknij dwukrotnie listę, aby aktywować akcję." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Dodaj wszystko" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Dodaj" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Usuń wszystko" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Usuń" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Błąd powielenia danych: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nie utworzono, błąd: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s utworzono pomyślnie." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nie usunięto, błąd: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s usunięto pomyślnie." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nie zaktualizowano, błąd: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s zaktualizowano pomyślnie." @@ -147,35 +147,35 @@ msgstr "Edycja ustawień regionalnych" msgid "Documentation" msgstr "Dokumentacja" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Błędy" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Wyczyść wszystko" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licencja" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Ustawienia" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Kod źródłowy" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Wsparcie" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Narzędzia" @@ -202,29 +202,6 @@ msgstr "Godziny" msgid "Minutes" msgstr "Minuty" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Ogranicza zrzucone dane do podanego app_label lub app_label.ModelName." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Baza danych, z której dane zostaną wyeksportowane. Jeśli zostanie pominięty, zostanie użyta baza danych o nazwie „default”." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Baza danych, do której zostaną zaimportowane dane. Jeśli zostanie pominięty, zostanie użyta baza danych o nazwie „default”." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Wymuś konwersję bazy danych, nawet jeśli docelowa baza danych nie jest pusta." - #: menus.py:10 msgid "System" msgstr "System" @@ -241,16 +218,16 @@ msgstr "Akcje" msgid "Secondary" msgstr "Drugorzędny" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Użytkownik" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Nie znaleziono %(verbose_name)s pasującego do zapytania" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Obiekt" @@ -262,7 +239,7 @@ msgstr "Przestrzeń nazw" msgid "Date time" msgstr "Data i godzina" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Wynik" @@ -322,17 +299,17 @@ msgstr "Wspólne okresy" msgid "Delete stale uploads" msgstr "Usuń nieaktualne pobrane pliki" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Włącz dla wszystkich aplikacji automatyczny zapis zdarzeń." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Czas opóźnienia wykonania zadań zależnych od operacji na bazie danych." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,7 +317,7 @@ msgid "" " containing an application." msgstr "Lista ciągów znaków wskazujących wszystkie aplikacje, które mają zostać usunięte z listy normalnie instalowanej przez Mayan EDMS. Każdy ciąg powinien być kropkowaną ścieżką Pythona do: klasy konfiguracji aplikacji (preferowane) lub pakietu zawierającego aplikację." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -348,370 +325,139 @@ msgid "" " containing an application." msgstr "Lista ciągów oznaczających wszystkie aplikacje, które są instalowane poza tymi, które normalnie instaluje Mayan EDMS. Każdy ciąg powinien być kropkowaną ścieżką Pythona do: klasy konfiguracji aplikacji (preferowane) lub pakietu zawierającego aplikację." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Nazwa widoku dołączonego do marki w menu głównym. Jest to również widok, do którego użytkownicy będą przekierowywani po zalogowaniu." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Liczba obiektów, które będą wyświetlane na stronie." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Włącz rejestrowanie błędów poza systemowym rejestrowaniem błędów." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Ścieżka do pliku dziennika śledzącego błędy w systemie produkcyjnym." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nazwa wyświetlana w menu głównym." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "Adres URL instalacji lub strona główna projektu." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Backend przechowywania umożliwiający wszystkim użytkownikom udostępnianie plików." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Lista ciągów znaków reprezentujących nazwy hosta / domeny, które może obsługiwać ta strona. Jest to środek bezpieczeństwa zapobiegający atakom na nagłówki hosta HTTP, które są możliwe nawet przy wielu pozornie bezpiecznych konfiguracjach serwera WWW. Wartości na tej liście mogą być w pełni kwalifikowanymi nazwami (np. „www.example.com”), w którym to przypadku zostaną one dokładnie dopasowane do nagłówka hosta żądania (bez rozróżniania wielkości liter, bez portu). Wartość zaczynającą się od kropki można wykorzystać jako symbol zastępczy subdomeny: „.example.com” będzie pasował do example.com, www.example.com i każdej innej subdomeny example.com. Wartość „*” pasuje do wszystkiego; w takim przypadku jesteś odpowiedzialny za zapewnienie własnej walidacji nagłówka hosta (być może w oprogramowaniu pośrednim; jeśli tak, to oprogramowanie pośrednie musi być wymienione najpierw w MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Potwierdź usunięcie" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Potwierdź" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Szczegóły dla: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Utwórz" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Wprowadź poprawną wartość YAML." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Podaj prawidłową 'internal name' składającą się z liter, liczb i podkreśleń." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Informacje" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Profil regionalny użytkownika" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Edycja ustawień regionalnych użytkownika" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Strona główna" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Data i godzina" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Wpisy dziennika błędów dla: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Ustawienia" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Nie wybrano żadnego działania" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Musisz wybrać co najmniej jeden element." diff --git a/mayan/apps/common/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/common/locale/pt/LC_MESSAGES/django.mo index bd03e76492..2c56872ed8 100644 Binary files a/mayan/apps/common/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/pt/LC_MESSAGES/django.po b/mayan/apps/common/locale/pt/LC_MESSAGES/django.po index 66eaf93810..c73804f547 100644 --- a/mayan/apps/common/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/pt/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -20,31 +20,31 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -56,67 +56,67 @@ msgstr "Seleção" msgid "None" msgstr "Nenhum" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Adicionar" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Remover" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -141,35 +141,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licença" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configuração" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Ferramentas" @@ -196,29 +196,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -235,16 +212,16 @@ msgstr "Ações" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Utilizador" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objeto" @@ -256,7 +233,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -316,17 +293,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -334,7 +311,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -342,370 +319,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Confirmar eliminação" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Confirmar" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Criar" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Itens de configuração" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Nenhuma ação selecionada." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Deve selecionar pelo menos um item." diff --git a/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.mo index 5d2d05b03b..6e7259ebb7 100644 Binary files a/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.po index dc6d9e2b4c..d2bab21ef7 100644 --- a/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/pt_BR/LC_MESSAGES/django.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Aline Freitas \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,31 +23,31 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Comum" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Atributos disponíveis:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Campos disponíveis:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -59,67 +59,67 @@ msgstr "Seleção" msgid "None" msgstr "Nenhum" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Adicionar" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Remover" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s não criado, erro: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s criado com sucesso." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s não removido, erro: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s removido com sucesso." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s não atualizado, erro: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s atualizado com sucesso." @@ -144,35 +144,35 @@ msgstr "Editar perfil Idioma" msgid "Documentation" msgstr "Documentação" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Erros" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Limpar tudo" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Fórum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licença" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configurações" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Código fonte" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Suporte" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Ferramentas" @@ -199,29 +199,6 @@ msgstr "Hora" msgid "Minutes" msgstr "Minutos" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Restringe os dados exportados para o app_label ou app_label.ModelName especificado." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Base de dados a partir da qual os dados serão exportados. A base de dados \"default\" será utilizada no caso de omissão." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Base de dados para a qual os dados serão importados. A base de dados \"default\" será utilizada no caso de omissão." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Força a conversão da base de dados ainda que a base de dados receptora não esteja vazia." - #: menus.py:10 msgid "System" msgstr "Sistema" @@ -238,16 +215,16 @@ msgstr "Ações" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Usuário" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Objeto" @@ -259,7 +236,7 @@ msgstr "namespace" msgid "Date time" msgstr "Data e hora" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "resultado" @@ -319,17 +296,17 @@ msgstr "Comum periódico" msgid "Delete stale uploads" msgstr "Deletar uploads obsoletos" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Ativar automaticamente o registro de todos os aplicativos." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Tempo para atrasar as tarefas de fundo que dependem da propagação de informação na base de dados." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -337,7 +314,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -345,370 +322,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Habilite registro de erros fora das capacidades do registro de erros do sistema." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Caminho para o arquivo de registro que rastreará erros durante a produção." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Nome a ser mostrado no menu principal." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "URL da instalação ou homepage do projeto." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Um suporte de armazenamento que todos os trabalhadores podem usar para compartilhar arquivos." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "Uma lista de strings representando os nomes de host/domínio que este site pode utilizar. Esta é uma medida de segurança para prevenir ataques virtuais que utilizem Host header do protocolo HTTP, os quais são possíveis mesmo sob configurações aparentemente seguras de servidor web. Valores nesta lista podem ser nomes totalmente qualificados (por exemplo 'www.example.com'), que nestes casos coincidirão exatamente com as requisições do Host header (sem considerar maiúsculas ou minúsculas, não incluindo porta). Valores que começam com ponto podem ser usados como curingas para subdomínios: \".example.com\" coincidirá com \"example.com\", \"www.example.com\" e quaisquer outros subdomínios de \"example.com\". Um valor de '*' coincidirá com qualquer outro; nesse caso você será responsável porfornecer sua própria validação para o Host header (talvez num middleware; assim sendo o middleware deve ser listado primeiro em MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Quando indicado como Verdadeiro, caso a URL requisitada não coincida com os padrões na URLconf e não termine com uma barra, haverá um redirecionamento HTTP para a mesma URL com uma barra adicionada. Note que o redirecionamento pode fazer com que quaisquer dados submetidos numa requisição POST sejam perdidos. A configuração APPEND_SLASH é usada apenas se o CommonMiddleware estiver instalado (veja Middleware). Veja também PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Um dicionário contendo as configurações de todas as bases de dados a serem usadas com Django. Trata-se de um dicionário aninhado cujo conteúdo mapeia pseudônimos de bases de dados para um dicionário contendo as opções para cada base de dados específica. O parâmetro DATABASES deve configurar uma base de dados padrão; qualquer número de bases de dados adicionais deve ser especificado." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Valor padrão: 2621440 (i.e. 2.5MB). O tamanho máximo em bytes que um corpo de requisição pode atingir antes que se gere uma Operação Suspeita (RequestDataTooBig). A checagem é feita quando se acessa request.body ou request.POST e é calculada em relação ao tamanho total da solicitação, excluindo qualquer arquivo de carga de dados. Você pode configurá-la para \"nenhuma\" para desativar a verificação. Aplicações para as quais se esperam publicações de tamanho muito grande devem ajustar esse parâmetro. A quantidade de dados da requisição está correlacionada com a quantidade de memória necessária para processá-la e povoar os dicionários GET e POST. As requisições grandes podem ser usadas como vetor de ataques de negação de serviço - \"denial-of-service\" - caso o parâmetro não seja preenchido. Dado que os servidores webnormalmente não realizam uma inspeção profunda das requisições, não é possível realizar uma verificação similar nesse nível. Veja também FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "Valor padrão: [] (Lista vazia). Lista de objetos de expressões regulares compilados representando strings de User-Agent que não tem permissão para visitar nenhuma página em todo o sistema. Use contra maus robôs/rastradores. Este parâmetro só é usado com o CommonMiddleware instalado (veja Middleware)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Valor padrão: 'django.core.mail.backends.smtp.EmailBackend'. O back-end usado para enviar e-mails." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Valor padrão: 'localhost'. O host usado para enviar e-mail." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Valor padrão: '' (String vazia). Senha utilizada para o servidor SMTP definido em EMAIL_HOST. Este parâmetro é usado junto ao EMAIL_HOST_USER durante a autenticação no servidor SMTP. Se qualquer um desses parâmetros estiver vazio, Django não tentará a autenticação." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Valor padrão '' (String vazia). Nome de usuário utilizado para o servidor SMTP definido em EMAIL_HOST. Se estiver vazio, Django não tentará a autenticação." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Valor padrão: 25. Porta usada para o servidor SMTP definido em EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Valor padrão: Nenhum. Especifica um tempo de espera em segundos para operações de bloqueio, como tentativas de conexão." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "Valor padrão: Falso. Define se deve ser utilizada uma conexão TLS (segura) quando se comunica com o servidor SMTP. Isto é usado para conexões explícitas de TLS, geralmente na porta 587. Se você está experimentando conexões suspensas, consulte o parâmetro de TLS implícita EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "Valor padrão: Falso. Define se deve ser utilizada uma conexão implícita TLS (segura) ao comunicar-se com o servidor SMTP. Na maior parte da documentação de e-mail este tipo de conexão TLS é conhecida como SSL. Geralmente é usada a porta 465. Se você está experimentando problemas, veja o parâmetro de TSL explícita EMAIL_USE_TLS. Tenha em mente que EMAIL_USE_TLS / EMAIL_USE_SSL são mutuamente excludentes, razão pela qual apenas um dos parâmetros pode ser Verdadeiro." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Valor padrão: 2621440 (i.e. 2.5MB). O tamanho máximo (em bytes) que um upload terá antes de ser transmitida ao sistema de arquivos. Veja Administração de arquivos para detalhes. Veja ainda DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "Valor padrão: '/accounts/login/' A URL onde as requisições são redirecionadas para iniciar a sessão, especialmente quando se utiliza o decorador login_required(). Este parâmetro também aceita padrões de URL que podem ser usados para reduzir a duplicação de configuração, uma vez que você não precisa definir a URL em dois lugares (parâmetros e URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "Valor padrão: '/accounts/profile/' A URL para onde são redirecionadas as requisições após o início da sessão quando a vista contrib.auth.login não obtêm o próximo parâmetro. Isto é utilizado pelo decorador login_required() , por exemplo. Este parâmetro também aceita padrões de URL que podem ser usados para reduzir a duplicação de configuração, uma vez que você não precisa definir a URL em dois lugares (parâmetros e URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "Valor padrão: \"amqp://\". URL do intermediário padrão. Deve ser uma URL em forma de: \"transport://userid:password@hostname:port/virtual_host\". Apenas a parte de esquema (transport://) é requerida, o resto é opcional e determina os valores padrão específicos de transportes." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "Valor padrão: Sem back-end de resultado habilitado por padrão. O back-end usado para armazenar resultados de tarefas (tombstones). Consulte http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend. " - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Confirmar Exclusão" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Confirmar" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "detalhes para: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Edita: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Criar" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Entre com um valor YAML válido." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Insira um 'nome interno' válido que contenha letras, números e subtraços." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Sobre" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Detalhes do perfil de localidade do usuário atual" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Editar detalhes do perfil de localização do usuário atual" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Painel de controle" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Limpar entradas de registro de erros para: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "O registro de erros do objeto foi apagado com sucesso." -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Data e hora" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Entradas de registro de erros para: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Não há opções de configuração disponíveis." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Nenhum resultado aqui significa que o usuário não possui as permissões necessárias para realizar tarefas administrativas." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Itens da Configuração" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Nenhuma ação selecionada." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Deve selecionar pelo menos um item." diff --git a/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.mo index 22970a1ae6..1f8b61184b 100644 Binary files a/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.po index db2e9cb8a6..48951da96e 100644 --- a/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/ro_RO/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-21 06:56+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 13:29+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -19,31 +19,31 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Comune" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Atributele disponibile:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "Câmpuri disponibile:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "Folosit pentru a permite traducerea offline a șirurilor de text cod." -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "Oferă verificarea stilului." -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "Mediul liniei de comandă cu autocompletare." -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "Verifică formatarea corectă a fișierului README." @@ -55,67 +55,67 @@ msgstr "Selecţie" msgid "None" msgstr "Nici unul" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Selectați intrările pentru a fi eliminate. Țineți Control pentru a selecta mai multe intrări. După finalizarea selecției, faceți clic pe butonul de mai jos sau faceți dublu clic pe listă pentru a activa acțiunea." -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "Selectați intrările pentru a fi adăugate. Țineți Control pentru a selecta mai multe intrări. După finalizarea selecției, faceți clic pe butonul de mai jos sau faceți dublu clic pe listă pentru a activa acțiunea." -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "Adaugă tot setul" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Adăugți" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "Elimină tot setul" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Eliminați" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Eroare de date duplicat: %(error)s" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "Obiectul tip %(object)s nu a fost creat, eroare: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "Obiectul tip %(object)s a fost creat cu succes." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "Obiectul tip %(object)s nu a fost șters, eroare: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "Obiectul tip %(object)s a fost șters cu succes." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "Obiectul tip %(object)s nu a fost actualizat, eroare: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "Obiectul tip %(object)s a fost actualizat cu succes." @@ -140,35 +140,35 @@ msgstr "Editați profilul localizării" msgid "Documentation" msgstr "Documentație" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Erori" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Curăță tot" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licenţă" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Configurare" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Cod sursă" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Suport tehnic" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Unelte" @@ -195,29 +195,6 @@ msgstr "Ore" msgid "Minutes" msgstr "Minute" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "Restricționează datele care fac obiectul unui dumping la etichetele app_label sau app_label.ModelName specificate." - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "Baza de date din care vor fi exportate datele. Dacă este omisă, va fi utilizată baza de date numită \"default\" ." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "Baza de date în care vor fi importate datele. Dacă este omisă, va fi utilizată baza de date numită \"default\"." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "Forțați conversia bazei de date chiar dacă baza de date de primire nu este goală." - #: menus.py:10 msgid "System" msgstr "Sistem" @@ -234,16 +211,16 @@ msgstr "Acţiuni" msgid "Secondary" msgstr "Secundar" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Utilizator" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Nu am găsit %(verbose_name)s care să corespundă interogării" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Obiect" @@ -255,7 +232,7 @@ msgstr "Spațiu de nume" msgid "Date time" msgstr "Data și ora" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Rezultat" @@ -315,17 +292,17 @@ msgstr "Obșnuite periodice" msgid "Delete stale uploads" msgstr "Ștergeți încărcările învechite" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Activați juranlizarea automată la toate aplicațiile." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Timpul de întârziere pentru sarcini de fundal care depind de propagarea schimbărilor în baza de date." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "O listă de șiruri care desemnează toate aplicațiile care urmează să fie eliminate din lista instalată în mod normal de Mayan EDMS. Fiecare șir ar trebui să fie o cale Python punctată către: o clasă de configurare a aplicației (preferată) sau un pachet care conține o aplicație." -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "O listă de șiruri care desemnează toate aplicațiile instalate dincolo de cele instalate în mod normal de Mayan EDMS. Fiecare șir ar trebui să fie o cale Python punctată către: o clasă de configurare a aplicației (preferată) sau un pachet care conține o aplicație." -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "Numele afișării atașate ancorei de marcă din meniul principal. Aceasta este și perspectiva la care utilizatorii vor fi redirecționați după conectare." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "Obiectele numerice care vor fi afișate pe pagină." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "Activați înregistrarea erorilor în afara capabilităților de înregistrare a erorilor de sistem." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Calea către fișierul jurnal care va urmări erorile în timpul producției." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "Numele care urmează să fie afișat în meniul principal." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "Adresa URL a instalării sau a paginii de pornire a proiectului." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Un backend de stocare pe care toți lucrătorii îl pot folosi pentru partajarea fișierelor." -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "O listă de șiruri reprezentând numele gazdă / domenii pe care acest site le poate difuza. Aceasta este o măsură de securitate pentru a preveni atacurile de antet gazdă HTTP, care sunt posibile chiar și în cazul multor configurații aparent confortabile ale serverului web. Valorile din această listă pot fi nume calificate complet (de exemplu, \"www.example.com\"), caz în care acestea vor fi potrivite exact cu antetul gazdei gazdă (fără majuscule, fără a include portul). O valoare care începe cu o un punct poate fi folosită ca un wildcard subdomeniu: '.example.com' se va potrivi cu example.com, www.example.com și orice alt subdomeniu al example.com. O valoare de '*' se va potrivi cu orice; în acest caz, sunteți responsabil să vă asigurați validarea propriu-zisă a antetului Host (poate într-un middleware, dacă acest lucru trebuie să fie menționat mai întâi în MIDDLEWARE)." - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "Când este setat la True, dacă adresa URL a solicitării nu se potrivește cu niciunul dintre modelele din URLconf și nu se termină într-un / , redirecționarea HTTP se emite aceluiași URL cu / adăugat. Rețineți că redirecționarea poate duce la pierderea datelor transmise într-o solicitare POST. Setarea APPEND_SLASH este utilizată numai dacă este instalat CommonMiddleware (consultați Middleware). Consultați și PREPEND_WWW." - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "Lista de validatori folosită pentru a verifica puterea parolelor utilizatorului." - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "Un dicționar care conține setările pentru toate bazele de date care vor fi utilizate cu Django. Acesta este un dicționar imbricat al cărui conținut alcătuiește un alias de bază de date într-un dicționar care conține opțiunile pentru o bază de date individuală. Setarea DATABASES trebuie să configureze o bază de date implicită; poate fi specificat orice număr de baze de date adiționale." - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Implicit: 2621440 (adică 2,5 MB). Dimensiunea maximă în octeți pe care un corp de solicitare ar putea fi înainte ca o SuspiciousOperation (RequestDataTooBig) să fie ridicată. Verificarea se face când se accesează request.body sau request.POST și se calculează în funcție de dimensiunea totală a solicitării, excluzând datele de încărcare a fișierelor. Puteți seta această opțiune la None pentru a dezactiva verificarea. Aplicațiile care sunt așteptate să primească posturi neobișnuit de mari trebuie să ajusteze această setare. Suma datelor solicitate este corelată cu cantitatea de memorie necesară pentru procesarea solicitării și cu conținutul dicționarelor GET și POST. Solicitările mari ar putea fi folosite ca vector de atac al refuzului de serviciu dacă nu sunt bifate. Întrucât serverele web nu efectuează în mod obișnuit o inspecție profundă a solicitărilor, nu este posibil să efectuați o verificare similară la acel nivel. Consultați și FILE_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "Implicit: 'webmaster @ localhost' Adresa de e-mail implicită pentru a fi utilizată pentru diverse corespondențe automate de la administratorii site-ului. Aceasta nu include mesajele de eroare trimise ADMINS și MANAGERS; pentru asta, vezi SERVER_EMAIL." - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "Implicit: [] (Listă goală). Lista de obiecte de expresie obișnuită compilate care reprezintă șiruri de caractere ale utilizatorilor care nu au permisiunea de a vizita nicio pagină, la nivel de sistem. Utilizați acest lucru pentru roboți / crawlere rele. Acest lucru este folosit numai dacă este instalat CommonMiddleware (consultați Middleware)." - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "Implicit: 'django.core.mail.backends.smtp.EmailBackend'. Backend-ul de utilizat pentru trimiterea de e-mailuri." - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "Implicit: \"localhost\". Gazda de utilizat pentru trimiterea de e-mailuri." - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "Implicit: '' (Șir gol). Parolă de utilizat pentru serverul SMTP definit în EMAIL_HOST. Această setare este utilizată împreună cu EMAIL_HOST_USER atunci când se autentifică la serverul SMTP. Dacă oricare dintre aceste setări este goală, Django nu va încerca autentificarea." - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "Implicit: '' (Șir gol). Utilizator de utilizat pentru serverul SMTP definit în EMAIL_HOST. Dacă este gol, Django nu va încerca autentificarea." - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "Implicit: 25. Portul de utilizat pentru serverul SMTP definit în EMAIL_HOST." - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "Implicit: Niciuna. Specifică un interval de timp în secunde pentru blocarea operațiilor, cum ar fi încercarea de conectare." - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "Implicit: Fals. Dacă să utilizați o conexiune TLS (securizată) atunci când vorbiți cu serverul SMTP. Acesta este utilizat pentru conexiuni TLS explicite, în general pe portul 587. Dacă întâmpinați conexiuni suspendate, consultați setarea implicită TLS EMAIL_USE_SSL." - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "Implicit: Fals. Dacă să utilizați o conexiune implicită TLS (securizată) atunci când vorbiți cu serverul SMTP. În majoritatea documentelor de e-mail, acest tip de conexiune TLS este denumit SSL. În general, este folosit pe portul 465. Dacă întâmpinați probleme, consultați setarea explicită TLS EMAIL_USE_TLS. Rețineți că EMAIL_USE_TLS / EMAIL_USE_SSL se exclud reciproc, deci setați numai una dintre aceste setări la True." - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "Implicit: 2621440 (adică 2,5 MB). Dimensiunea maximă (în octeți) pe care o încărcare va declanșa transmiterea în flux la sistemul de fișiere. Consultați Gestionarea fișierelor pentru detalii. Consultați și DATA_UPLOAD_MAX_MEMORY_SIZE." - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "Implicit: '/ accounts / login /' URL-ul în cazul în care cererile sunt redirecționate pentru autentificare, mai ales când utilizați decoratorul login_required (). Această setare acceptă, de asemenea, șabloanele URL denumite care pot fi utilizate pentru a reduce duplicarea configurației, deoarece nu trebuie să definiți adresa URL în două locuri (setări și URLconf)." - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "Implicit: '/ accounts / profile /' Adresa URL unde cererile sunt redirecționate după autentificare când vizualizarea contrib.auth.login nu primește niciun alt parametru. Acest lucru este folosit, de exemplu, de decoratorul login_required (). Această setare acceptă, de asemenea, șabloanele URL denumite care pot fi utilizate pentru a reduce duplicarea configurației, deoarece nu trebuie să definiți adresa URL în două locuri (setări și URLconf)." - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "Implicit: Niciuna. Adresa URL unde cererile sunt redirecționate după ce un utilizator se deconectează utilizând LogoutView (dacă vizualizarea nu are un argument next_page). Dacă nu există, nu va fi efectuată nicio redirecționare și va fi redată vizualizarea logout. Această setare acceptă, de asemenea, șabloanele URL denumite care pot fi utilizate pentru a reduce duplicarea configurației, deoarece nu trebuie să definiți adresa URL în două locuri (setări și URLconf)." - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "O listă de adrese IP, ca șiruri de caractere, care: Permite procesorului de context debug () să adauge unele variabile în contextul șablonului. Poate utiliza marcajele admindocs chiar dacă nu este logat ca personal utilizator. Sunt marcate ca \"interne\" (spre deosebire de \"EXTERNAL\") în e-mailurile AdminEmailHandler." - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "O listă a tuturor limbilor disponibile. Lista este o listă cu două perechi în format (codul limbii, numele limbii), de exemplu, ('ja', 'japoneză'). Aceasta specifică limbile disponibile pentru selectarea limbii. În general, valoarea implicită ar trebui să fie suficientă. Setați această setare numai dacă doriți să restricționați selectarea limbii pe un subset de limbi furnizate de Django." - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "Un șir reprezentând codul de limbă pentru această instalare. Aceasta ar trebui să fie în format standard de limbă. De exemplu, engleza americană este 'en-us'. Acesta servește două scopuri: dacă middleware-ul locale nu este utilizat, acesta decide ce traducere este servită tuturor utilizatorilor. Dacă middleware-ul local este activ, acesta oferă o limbă de rezervă în cazul în care limba preferată a utilizatorului nu poate fi determinată sau nu este acceptată de site-ul web. De asemenea, oferă traducerea de rezervă atunci când o traducere pentru un cuvânt dat nu există pentru limba preferată a utilizatorului." - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "Adresa URL care trebuie utilizată atunci când se face referire la fișiere statice situate în STATIC_ROOT. Exemplu: \"/static /\" sau \"http://static.example.com/\" Dacă nu este niciunul, acesta va fi folosit ca și cale de bază pentru definirea activelor (clasa Media) și aplicația staticfiles. Trebuie să se încheie într-o bară, dacă este setată la o valoare care nu este goală." - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "Motorul de stocare a fișierelor utilizat la colectarea fișierelor statice cu comanda de gestionare collectstatic. O instanță gata de utilizare a backend-ului de stocare definită în această setare poate fi găsită la django.contrib.staticfiles.storage.staticfiles_storage." - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "Un șir reprezentând fusul orar pentru această instalare. Rețineți că acest lucru nu este neapărat fusul orar al serverului. De exemplu, un server poate servi mai multe site-uri cu putere Django, fiecare având o setare de fus orar separată." - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "Calea completă Python a obiectului aplicației WSGI pe care o vor utiliza serverele încorporate Django (de exemplu, runserver). Comanda django-admin startproject de administrare va crea un simplu fișier wsgi.py cu o aplicație care poate fi apelată în ea și va indica această setare acelei aplicații." - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "Implicit: \"amqp: //\". Adresa URL a brokerului implicit. Aceasta trebuie să fie o adresă URL sub forma: transport://userid:password@hostname:port/virtual_host Este necesar doar partea sistemului (transport: //), restul este opțional și are implicit valorile implicite pentru transport." - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "Implicit: niciun rezultat de backend activat în mod implicit. Backend-ul folosit pentru a stoca rezultatele sarcinilor (pietre funerare). Consultați http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend " - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Confirmă ștergerea" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "Editați %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Confirmă" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "Detalii pentru: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "Editare: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Creează" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "Introduceți o valoare JSON validă." + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Introduceți o valoare validă YAML." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Introduceți un \"nume intern\" valabil format din litere, numere și subliniere." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Despre" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Detaliile profilului locației utilizatorului curent" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Editați detaliile profilului de localizare a utilizatorului actual" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Panou principal" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "Eliminați intrările din jurnalul de erori pentru: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "Jurnalului erorilor de obiecte a fost curățat cu succes" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Data și ora" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "Această vizualizare afișează jurnalul de erori al unui obiect diferit. O listă goală este un lucru bun." + +#: views.py:160 +msgid "There are no error log entries" +msgstr "Nu există înregistrări de jurnal de erori" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "Intrările de eroare pentru: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "Nu sunt disponibile opțiuni de configurare." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "Niciun rezultat aici înseamnă că nu aveți permisiunile necesare pentru a efectua o sarcină administrativă." -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Configurați elemente" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "Aici puteți configura toate aspectele sistemului." -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "Aceste module sunt folosite pentru întreținerea sistemului." - -#: views.py:240 -msgid "No action selected." -msgstr "Nu a fost selectată nici o acţiune." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Trebuie sa selectaţi cel puţin un rând" diff --git a/mayan/apps/common/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/common/locale/ru/LC_MESSAGES/django.mo index 5b23b9de8e..5a38c6f43f 100644 Binary files a/mayan/apps/common/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/ru/LC_MESSAGES/django.po b/mayan/apps/common/locale/ru/LC_MESSAGES/django.po index ceb182a88e..2d7d136417 100644 --- a/mayan/apps/common/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/ru/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: lilo.panic\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,31 +19,31 @@ msgstr "" "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" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Общий" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Доступные атрибуты:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "Выбор" msgid "None" msgstr "Ничего" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Добавить" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Удалить" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s не создан, ошибка: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s успешно создан." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s не удалён, ошибка: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s успешно удалён." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s не обновлён, ошибка: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s успешно обновлён." @@ -140,35 +140,35 @@ msgstr "Редактировать локаль" msgid "Documentation" msgstr "Документация" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "Ошибки" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "Очистить все" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Форум" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Лицензия" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Настройки" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Исходные коды" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Поддержка" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Инструменты" @@ -195,29 +195,6 @@ msgstr "Часов" msgid "Minutes" msgstr "Минут" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "База данных из которой данные будет экспортированы. Будет использована база данных с именем \"default\" если оставить пустым." - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "База данных в которую данные будут импортированы. Будет использована база данных с именем \"default\" если оставить пустым." - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -234,16 +211,16 @@ msgstr "Действия" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Пользователь" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Объект" @@ -255,7 +232,7 @@ msgstr "Пространство имен" msgid "Date time" msgstr "Дата и время" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Результат" @@ -315,17 +292,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Автоматически разрешать всем установленным приложениям делать записи в журнале." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Время задержки фоновых задач зависящих от процесса распространения записанных в БД данных." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Бекенд хранения, который каждый может использовать для хранения файлов." -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Подтвердить удаление" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Подтверждать" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Создать" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "Введите допустимое YAML-значение." + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Инфо" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Настройки локали текущего пользователя" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Редактировать настройки локали текущего пользователя" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Панель управления" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Дата и время" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Элементы настроек" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Никаких действий не выбрано." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Необходимо выбрать хотя бы один элемент." diff --git a/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.mo index b0a8045565..dbb6b2fb7f 100644 Binary files a/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.po index 0f7631284b..3e44e74099 100644 --- a/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -17,31 +17,31 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Brez" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -138,35 +138,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -193,29 +193,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -232,16 +209,16 @@ msgstr "Akcije" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "" @@ -253,7 +230,7 @@ msgstr "Imenski prostor" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -313,17 +290,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -331,7 +308,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -339,370 +316,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Potrdi izbris" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Potrdi" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Ustvari" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr " O programu" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Nadzorna plošča" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "" diff --git a/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.mo index c7e1956ee8..73f3eabbfe 100644 Binary files a/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.po index a5db648e7c..74f98fd9c5 100644 --- a/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/tr_TR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -19,31 +19,31 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "Ortak" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "Kullanılabilir özellikler:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "Seçim" msgid "None" msgstr "Yok" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Ekle" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Çıkar" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s oluşturulamadı, hata: %(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s başarıyla oluşturuldu." -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s silinemedi, hata: %(error)s." -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s başarıyla silindi." -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s güncellenemedi, hata: %(error)s." -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s başarıyla güncellendi." @@ -140,35 +140,35 @@ msgstr "Yerel profili düzenle" msgid "Documentation" msgstr "Belgeleme" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "Forum" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lisans" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "Ayarlar" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "Kaynak kodu" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "Destek" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Araçlar" @@ -195,29 +195,6 @@ msgstr "Saatler" msgid "Minutes" msgstr "Dakikalar" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "Sistem" @@ -234,16 +211,16 @@ msgstr "Eylemler" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Kullanıcı" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Nesne" @@ -255,7 +232,7 @@ msgstr "Alanadı" msgid "Date time" msgstr "Tarih saat" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Sonuç" @@ -315,17 +292,17 @@ msgstr "Ortak periyodik" msgid "Delete stale uploads" msgstr "Eski yüklemeleri sil" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "Tüm uygulamalara günlük kaydını otomatik olarak etkinleştirin." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "Veritabanına bağımlı arka plan görevlerini geciktirme zamanını oluşturmak için kullanılır." -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -333,7 +310,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -341,370 +318,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "Üretim sırasında hataları izleyecek olan günlük dosyasının yolu." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "Tüm çalışanların dosyaları paylaşmak için kullanabileceği bir depolama alanı." -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Silme işlemini onayla" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Onayla" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Oluştur" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "Harfler, rakamlar ve alt çizgilerden oluşan geçerli bir 'dahili ad' girin." -#: views.py:31 +#: views.py:27 msgid "About" msgstr "Hakkında" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "Geçerli kullanıcı yerel ayarları profil ayrıntıları" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "Geçerli kullanıcı yerel ayarları ayrıntılarını düzenle" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "Gösterge Paneli" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "Tarih ve saat" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "Kurulum öğeleri" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "İşlem seçilmedi." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "En az bir öğe seçmelisiniz." diff --git a/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.mo index f65bdd6541..36a0971bc6 100644 Binary files a/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.po index 20f9f5f4f2..508cd2bb70 100644 --- a/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/vi_VN/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -18,31 +18,31 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "Lựa chọn" msgid "None" msgstr "None" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "Thêm" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "Xóa" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -139,35 +139,35 @@ msgstr "" msgid "Documentation" msgstr "" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Bản quyền" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" @@ -194,29 +194,6 @@ msgstr "" msgid "Minutes" msgstr "" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "" - #: menus.py:10 msgid "System" msgstr "" @@ -233,16 +210,16 @@ msgstr "Các thao tác" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Người dùng" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "Đối tượng" @@ -254,7 +231,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -314,17 +291,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "" -#: settings.py:103 -msgid "Django" -msgstr "" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "Xác nhận xóa" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "Xác nhận" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "Tạo" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "Không thao tác nào được chọn." - -#: views.py:250 -msgid "Must select at least one item." -msgstr "Cần chọn ít nhất một phần tử." diff --git a/mayan/apps/common/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/common/locale/zh/LC_MESSAGES/django.mo index 3d20430e3f..757293ba5a 100644 Binary files a/mayan/apps/common/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/common/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/common/locale/zh/LC_MESSAGES/django.po b/mayan/apps/common/locale/zh/LC_MESSAGES/django.po index 6fe7cbfb63..76909f1b7a 100644 --- a/mayan/apps/common/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/zh/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 02:40+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: yulin Gong <540538248@qq.com>\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,31 +18,31 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:88 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" msgstr "常用" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" msgstr "可用属性:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" msgstr "可用字段:\n" -#: dependencies.py:308 +#: dependencies.py:309 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:313 +#: dependencies.py:314 msgid "Provides style checking." msgstr "" -#: dependencies.py:318 +#: dependencies.py:319 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:323 +#: dependencies.py:324 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "选择" msgid "None" msgstr "没有" -#: generics.py:149 +#: generics.py:151 msgid "" "Select entries to be removed. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:154 +#: generics.py:156 msgid "" "Select entries to be added. Hold Control to select multiple entries. Once " "the selection is complete, click the button below or double click the list " "to activate the action." msgstr "" -#: generics.py:287 +#: generics.py:289 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:298 msgid "Add" msgstr "添加" -#: generics.py:306 +#: generics.py:308 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:317 msgid "Remove" msgstr "移除" -#: generics.py:521 +#: generics.py:525 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:547 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s未创建,错误:%(error)s" -#: generics.py:556 +#: generics.py:560 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s创建成功。" -#: generics.py:595 +#: generics.py:599 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s未删除,错误:%(error)s。" -#: generics.py:604 +#: generics.py:608 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s已成功删除。" -#: generics.py:697 +#: generics.py:701 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s未更新,错误:%(error)s。" -#: generics.py:708 +#: generics.py:712 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s已成功更新。" @@ -139,35 +139,35 @@ msgstr "编辑区域配置文件" msgid "Documentation" msgstr "文档" -#: links.py:58 links.py:69 +#: links.py:59 msgid "Errors" msgstr "错误" -#: links.py:63 +#: links.py:65 msgid "Clear all" msgstr "清除所有" -#: links.py:73 +#: links.py:69 msgid "Forum" msgstr "论坛" -#: links.py:77 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "许可" -#: links.py:80 +#: links.py:76 msgid "Setup" msgstr "设置" -#: links.py:83 +#: links.py:79 msgid "Source code" msgstr "源代码" -#: links.py:87 +#: links.py:83 msgid "Support" msgstr "支持" -#: links.py:91 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "工具" @@ -194,29 +194,6 @@ msgstr "时" msgid "Minutes" msgstr "分" -#: management/commands/convertdb.py:40 -msgid "" -"Restricts dumped data to the specified app_label or app_label.ModelName." -msgstr "将转储数据限制为指定的app_label或app_label.ModelName。" - -#: management/commands/convertdb.py:47 -msgid "" -"The database from which data will be exported. If omitted the database named" -" \"default\" will be used." -msgstr "将从中导出数据的数据库。如果省略,将使用名为“default”的数据库。" - -#: management/commands/convertdb.py:54 -msgid "" -"The database to which data will be imported. If omitted the database named " -"\"default\" will be used." -msgstr "要导入数据的数据库。如果省略,将使用名为“default”的数据库。" - -#: management/commands/convertdb.py:61 -msgid "" -"Force the conversion of the database even if the receiving database is not " -"empty." -msgstr "即使接收数据库不为空,也强制转换数据库。" - #: menus.py:10 msgid "System" msgstr "系统" @@ -233,16 +210,16 @@ msgstr "操作" msgid "Secondary" msgstr "" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "用户" -#: mixins.py:222 +#: mixins.py:268 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:343 msgid "Object" msgstr "对象" @@ -254,7 +231,7 @@ msgstr "命名空间" msgid "Date time" msgstr "日期时间" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "结果" @@ -314,17 +291,17 @@ msgstr "" msgid "Delete stale uploads" msgstr "删除旧的上传" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." msgstr "自动启用所有应用程序的日志记录。" -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." msgstr "是时候延迟依赖于数据库提交传播的后台任务了。" -#: settings.py:33 +#: settings.py:36 msgid "" "A list of strings designating all applications that are to be removed from " "the list normally installed by Mayan EDMS. Each string should be a dotted " @@ -332,7 +309,7 @@ msgid "" " containing an application." msgstr "" -#: settings.py:43 +#: settings.py:46 msgid "" "A list of strings designating all applications that are installed beyond " "those normally installed by Mayan EDMS. Each string should be a dotted " @@ -340,370 +317,139 @@ msgid "" " containing an application." msgstr "" -#: settings.py:52 +#: settings.py:55 msgid "" "Name of the view attached to the brand anchor in the main menu. This is also" " the view to which users will be redirected after log in." msgstr "" -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." msgstr "" -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." msgstr "在系统错误日志记录功能之外启用错误日志记录。" -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." msgstr "日志文件的路径,用于跟踪生产期间的错误。" -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." msgstr "要在主菜单中显示的名称。" -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." msgstr "项目的安装或主页的URL。" -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." msgstr "所有工作人员可用于共享文件的存储后端。" -#: settings.py:103 -msgid "Django" -msgstr "Django" - -#: settings.py:108 -msgid "" -"A list of strings representing the host/domain names that this site can " -"serve. This is a security measure to prevent HTTP Host header attacks, which" -" are possible even under many seemingly-safe web server configurations. " -"Values in this list can be fully qualified names (e.g. 'www.example.com'), " -"in which case they will be matched against the request's Host header exactly" -" (case-insensitive, not including port). A value beginning with a period can" -" be used as a subdomain wildcard: '.example.com' will match example.com, " -"www.example.com, and any other subdomain of example.com. A value of '*' will" -" match anything; in this case you are responsible to provide your own " -"validation of the Host header (perhaps in a middleware; if so this " -"middleware must be listed first in MIDDLEWARE)." -msgstr "表示此站点可以提供的主机/域名的字符串列表。这是一种防止HTTP主机头攻击的安全措施,即使在许多看似安全的Web服务器配置下也是如此。此列表中的值可以是完全限定名称(例如“www.example.com”),在这种情况下,它们将与请求的主机标头完全匹配(不区分大小写,不包括端口)。以句点开头的值可用作子域通配符:'.example.com'将匹配example.com,www.example.com和example.com的任何其他子域。值'*'将匹配任何内容;在这种情况下,您有责任提供自己的主机头验证(可能在中间件中;如果是这样,则必须首先在MIDDLEWARE中列出此中间件)。" - -#: settings.py:126 -msgid "" -"When set to True, if the request URL does not match any of the patterns in " -"the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the" -" same URL with a slash appended. Note that the redirect may cause any data " -"submitted in a POST request to be lost. The APPEND_SLASH setting is only " -"used if CommonMiddleware is installed (see Middleware). See also " -"PREPEND_WWW." -msgstr "设置为True时,如果请求URL与URLconf中的任何模式都不匹配,并且不以斜杠结尾,则会向相同的URL发出HTTP重定向,并附加斜杠。请注意,重定向可能导致POST请求中提交的任何数据丢失。 APPEND_SLASH设置仅在安装了CommonMiddleware时使用(请参阅Middleware)。另见PREPEND_WWW。" - -#: settings.py:139 -msgid "" -"The list of validators that are used to check the strength of user's " -"passwords." -msgstr "" - -#: settings.py:146 -msgid "" -"A dictionary containing the settings for all databases to be used with " -"Django. It is a nested dictionary whose contents map a database alias to a " -"dictionary containing the options for an individual database. The DATABASES " -"setting must configure a default database; any number of additional " -"databases may also be specified." -msgstr "包含要与Django一起使用的所有数据库的设置的字典。它是一个嵌套字典,其内容将数据库别名映射到包含单个数据库选项的字典。 DATABASES设置必须配置默认数据库;还可以指定任意数量的附加数据库。" - -#: settings.py:158 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a request " -"body may be before a SuspiciousOperation (RequestDataTooBig) is raised. The " -"check is done when accessing request.body or request.POST and is calculated " -"against the total request size excluding any file upload data. You can set " -"this to None to disable the check. Applications that are expected to receive" -" unusually large form posts should tune this setting. The amount of request " -"data is correlated to the amount of memory needed to process the request and" -" populate the GET and POST dictionaries. Large requests could be used as a " -"denial-of-service attack vector if left unchecked. Since web servers don't " -"typically perform deep request inspection, it's not possible to perform a " -"similar check at that level. See also FILE_UPLOAD_MAX_MEMORY_SIZE." -msgstr "默认值:2621440(即2.5 MB)。引发可疑操作(请求数据太大)之前请求正文的最大大小(以字节为单位)。在访问request.body或request.POST时完成检查,并根据不包括任何文件上传数据的总请求大小计算。您可以将其设置为“无”以禁用检查。预计会收到异常大型表单提交的应用程序应调整此设置。请求数据量与处理请求和填充GET和POST词典所需的内存量相关联。如果不加以检查,大请求可以用作拒绝服务攻击载体。由于Web服务器通常不执行深度请求检查,因此无法在该级别执行类似检查。另请参见FILE_UPLOAD_MAX_MEMORY_SIZE。" - -#: settings.py:178 -msgid "" -"Default: 'webmaster@localhost' Default email address to use for various " -"automated correspondence from the site manager(s). This doesn't include " -"error messages sent to ADMINS and MANAGERS; for that, see SERVER_EMAIL." -msgstr "" - -#: settings.py:188 -msgid "" -"Default: [] (Empty list). List of compiled regular expression objects " -"representing User-Agent strings that are not allowed to visit any page, " -"systemwide. Use this for bad robots/crawlers. This is only used if " -"CommonMiddleware is installed (see Middleware)." -msgstr "默认值:[](空列表)。在系统范围内表示不允许访问任何页面的用户代理字符串的已编译正则表达式对象的列表。用于防范恶意的机器人/爬虫。这仅在安装了CommonMiddleware时使用(请参阅Middleware)。" - -#: settings.py:199 -msgid "" -"Default: 'django.core.mail.backends.smtp.EmailBackend'. The backend to use " -"for sending emails." -msgstr "默认值:'django.core.mail.backends.smtp.EmailBackend'。用于发送电子邮件的后端。" - -#: settings.py:207 -msgid "Default: 'localhost'. The host to use for sending email." -msgstr "默认值:'localhost'。用于发送电子邮件的主机。" - -#: settings.py:214 -msgid "" -"Default: '' (Empty string). Password to use for the SMTP server defined in " -"EMAIL_HOST. This setting is used in conjunction with EMAIL_HOST_USER when " -"authenticating to the SMTP server. If either of these settings is empty, " -"Django won't attempt authentication." -msgstr "默认值:''(空字符串)。用于EMAIL_HOST中定义的SMTP服务器的密码。在向SMTP服务器进行身份验证时,此设置与EMAIL_HOST_USER结合使用。如果这些设置中的任何一个为空,Django将不会尝试身份验证。" - -#: settings.py:225 -msgid "" -"Default: '' (Empty string). Username to use for the SMTP server defined in " -"EMAIL_HOST. If empty, Django won't attempt authentication." -msgstr "默认值:''(空字符串)。用于EMAIL_HOST中定义的SMTP服务器的用户名。如果为空,Django将不会尝试身份验证。" - -#: settings.py:234 -msgid "Default: 25. Port to use for the SMTP server defined in EMAIL_HOST." -msgstr "默认值:25。用于EMAIL_HOST中定义的SMTP服务器的端口。" - -#: settings.py:241 -msgid "" -"Default: None. Specifies a timeout in seconds for blocking operations like " -"the connection attempt." -msgstr "默认值:无。指定阻塞操作(如连接尝试)的超时(以秒为单位)。" - -#: settings.py:249 -msgid "" -"Default: False. Whether to use a TLS (secure) connection when talking to the" -" SMTP server. This is used for explicit TLS connections, generally on port " -"587. If you are experiencing hanging connections, see the implicit TLS " -"setting EMAIL_USE_SSL." -msgstr "默认值:False。与SMTP服务器通信时是否使用TLS(安全)连接。这用于显式TLS连接,通常在端口587上。如果遇到挂起连接,请参阅隐式TLS设置EMAIL_USE_SSL。" - -#: settings.py:259 -msgid "" -"Default: False. Whether to use an implicit TLS (secure) connection when " -"talking to the SMTP server. In most email documentation this type of TLS " -"connection is referred to as SSL. It is generally used on port 465. If you " -"are experiencing problems, see the explicit TLS setting EMAIL_USE_TLS. Note " -"that EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of " -"those settings to True." -msgstr "默认值:False。与SMTP服务器通信时是否使用隐式TLS(安全)连接。在大多数电子邮件文档中,此类型的TLS连接称为SSL。它通常用于端口465.如果遇到问题,请参阅显式TLS设置EMAIL_USE_TLS。请注意,EMAIL_USE_TLS / EMAIL_USE_SSL是互斥的,因此只将其中一个设置为True。" - -#: settings.py:271 -msgid "" -"Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) that an upload " -"will be before it gets streamed to the file system. See Managing files for " -"details. See also DATA_UPLOAD_MAX_MEMORY_SIZE." -msgstr "默认值:2621440(即2.5 MB)。上传在流式传输到文件系统之前的最大大小(以字节为单位)。有关详情,请参阅管理文件。另请参见DATA_UPLOAD_MAX_MEMORY_SIZE。" - -#: settings.py:281 -msgid "" -"Default: '/accounts/login/' The URL where requests are redirected for login," -" especially when using the login_required() decorator. This setting also " -"accepts named URL patterns which can be used to reduce configuration " -"duplication since you don't have to define the URL in two places (settings " -"and URLconf)." -msgstr "默认值:'/ accounts / login /',重定向请求以进行登录的URL,尤其是在使用login_required()装饰器时。此设置还接受命名的URL模式,可用于减少配置重复,因为您不必在两个位置(设置和URLconf)定义URL。" - -#: settings.py:293 -msgid "" -"Default: '/accounts/profile/' The URL where requests are redirected after " -"login when the contrib.auth.login view gets no next parameter. This is used " -"by the login_required() decorator, for example. This setting also accepts " -"named URL patterns which can be used to reduce configuration duplication " -"since you don't have to define the URL in two places (settings and URLconf)." -msgstr "默认值:'/ accounts / profile /',当contrib.auth.login视图没有下一个参数时,登录后重定向请求的URL。例如,login_required()装饰器使用它。此设置还接受命名的URL模式,可用于减少重复配置,因此您不必在两个位置(设置和URLconf)定义URL。" - -#: settings.py:305 -msgid "" -"Default: None. The URL where requests are redirected after a user logs out " -"using LogoutView (if the view doesn't get a next_page argument). If None, no" -" redirect will be performed and the logout view will be rendered. This " -"setting also accepts named URL patterns which can be used to reduce " -"configuration duplication since you don't have to define the URL in two " -"places (settings and URLconf)." -msgstr "" - -#: settings.py:318 -msgid "" -"A list of IP addresses, as strings, that: Allow the debug() context " -"processor to add some variables to the template context. Can use the " -"admindocs bookmarklets even if not logged in as a staff user. Are marked as " -"\"internal\" (as opposed to \"EXTERNAL\") in AdminEmailHandler emails." -msgstr "" - -#: settings.py:329 -msgid "" -"A list of all available languages. The list is a list of two-tuples in the " -"format (language code, language name) for example, ('ja', 'Japanese'). This " -"specifies which languages are available for language selection. Generally, " -"the default value should suffice. Only set this setting if you want to " -"restrict language selection to a subset of the Django-provided languages. " -msgstr "" - -#: settings.py:342 -msgid "" -"A string representing the language code for this installation. This should " -"be in standard language ID format. For example, U.S. English is \"en-us\". " -"It serves two purposes: If the locale middleware isn't in use, it decides " -"which translation is served to all users. If the locale middleware is " -"active, it provides a fallback language in case the user's preferred " -"language can't be determined or is not supported by the website. It also " -"provides the fallback translation when a translation for a given literal " -"doesn't exist for the user's preferred language." -msgstr "" - -#: settings.py:357 -msgid "" -"URL to use when referring to static files located in STATIC_ROOT. Example: " -"\"/static/\" or \"http://static.example.com/\" If not None, this will be " -"used as the base path for asset definitions (the Media class) and the " -"staticfiles app. It must end in a slash if set to a non-empty value." -msgstr "" - -#: settings.py:368 -msgid "" -"The file storage engine to use when collecting static files with the " -"collectstatic management command. A ready-to-use instance of the storage " -"backend defined in this setting can be found at " -"django.contrib.staticfiles.storage.staticfiles_storage." -msgstr "" - -#: settings.py:378 -msgid "" -"A string representing the time zone for this installation. Note that this " -"isn't necessarily the time zone of the server. For example, one server may " -"serve multiple Django-powered sites, each with a separate time zone setting." -msgstr "" - -#: settings.py:388 -msgid "" -"The full Python path of the WSGI application object that Django's built-in " -"servers (e.g. runserver) will use. The django-admin startproject management " -"command will create a simple wsgi.py file with an application callable in " -"it, and point this setting to that application." -msgstr "" - -#: settings.py:396 -msgid "Celery" -msgstr "Celery" - -#: settings.py:401 -msgid "" -"Default: \"amqp://\". Default broker URL. This must be a URL in the form of:" -" transport://userid:password@hostname:port/virtual_host Only the scheme part" -" (transport://) is required, the rest is optional, and defaults to the " -"specific transports default values." -msgstr "默认值:“amqp://”。默认代理URL。这必须是以下形式的URL:transport:// userid:password @ hostname:port / virtual_host只需要方案部分(transport://),其余部分是可选的,默认为特定传输的默认值。" - -#: settings.py:411 -msgid "" -"Default: No result backend enabled by default. The backend used to store " -"task results (tombstones). Refer to " -"http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-" -"backend" -msgstr "默认值:默认情况下未启用结果后端。后端用于存储任务结果(墓碑)。请参阅http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.html#result-backend" - -#: templatetags/common_tags.py:31 +#: templatetags/common_tags.py:28 msgid "Confirm delete" msgstr "确认删除" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" msgstr "" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" msgstr "确认" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" msgstr "" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" msgstr "" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" msgstr "创建" -#: validators.py:29 +#: validators.py:46 +msgid "Enter a valid JSON value." +msgstr "" + +#: validators.py:70 +msgid "Enter a valid YAML value." +msgstr "输入有效的YAML值。" + +#: validators.py:86 msgid "" "Enter a valid 'internal name' consisting of letters, numbers, and " "underscores." msgstr "输入由字母,数字和下划线组成的有效“内部名称”。" -#: views.py:31 +#: views.py:27 msgid "About" msgstr "关于" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" msgstr "当前用户区域配置文件详情" -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" msgstr "编辑当前用户区域配置文件" -#: views.py:100 +#: views.py:96 msgid "Dashboard" msgstr "仪表板" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" msgstr "清除错误日志条目:%s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" msgstr "对象错误日志已成功清除" -#: views.py:154 +#: views.py:150 msgid "Date and time" msgstr "日期和时间" -#: views.py:159 +#: views.py:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." +msgstr "" + +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" msgstr "错误日志条目:%s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." msgstr "没有可用的设置选项。" -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." msgstr "此处没有结果表示没有执行管理任务所需的权限。" -#: views.py:195 +#: views.py:199 msgid "Setup items" msgstr "设置项目" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." msgstr "" -#: views.py:212 +#: views.py:216 msgid "These modules are used to do system maintenance." msgstr "" - -#: views.py:240 -msgid "No action selected." -msgstr "未选择任何操作。" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "必须至少选择一个项目。" diff --git a/mayan/apps/common/management/commands/convertdb.py b/mayan/apps/common/management/commands/convertdb.py deleted file mode 100644 index 30bc2d0e67..0000000000 --- a/mayan/apps/common/management/commands/convertdb.py +++ /dev/null @@ -1,107 +0,0 @@ -from __future__ import unicode_literals - -import errno -import os -import warnings - -from pathlib2 import Path - -from django.conf import settings -from django.core import management -from django.core.management.base import CommandError -from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ - -from mayan.apps.documents.models import DocumentType -from mayan.apps.storage.utils import fs_cleanup - -from ...literals import MESSAGE_DEPRECATION_WARNING -from ...warnings import DeprecationWarning - -CONVERTDB_FOLDER = 'convertdb' -CONVERTDB_OUTPUT_FILENAME = 'migrate.json' - - -class Command(management.BaseCommand): - help = 'Convert from a database backend to another one.' - - def __init__(self, *args, **kwargs): - warnings.warn( - category=DeprecationWarning, - message=force_text(MESSAGE_DEPRECATION_WARNING) - ) - - super(Command, self).__init__(*args, **kwargs) - - def add_arguments(self, parser): - parser.add_argument( - 'args', metavar='app_label[.ModelName]', nargs='*', - help=_( - 'Restricts dumped data to the specified app_label or ' - 'app_label.ModelName.' - ) - ) - parser.add_argument( - '--from', action='store', default='default', dest='from', - help=_( - 'The database from which data will be exported. If omitted ' - 'the database named "default" will be used.' - ), - ) - parser.add_argument( - '--to', action='store', default='default', dest='to', - help=_( - 'The database to which data will be imported. If omitted ' - 'the database named "default" will be used.' - ), - ) - parser.add_argument( - '--force', action='store_true', dest='force', - help=_( - 'Force the conversion of the database even if the receiving ' - 'database is not empty.' - ), - ) - - def handle(self, *app_labels, **options): - # Create the media/convertdb folder - convertdb_folder_path = force_text( - Path( - settings.MEDIA_ROOT, CONVERTDB_FOLDER - ) - ) - - try: - os.makedirs(convertdb_folder_path) - except OSError as exception: - if exception.errno == errno.EEXIST: - pass - - convertdb_file_path = force_text( - Path( - convertdb_folder_path, CONVERTDB_OUTPUT_FILENAME - ) - ) - - management.call_command(command_name='purgeperiodictasks') - - management.call_command( - 'dumpdata', *app_labels, all=True, - database=options['from'], natural_primary=True, - natural_foreign=True, output=convertdb_file_path, - interactive=False, format='json' - ) - - if DocumentType.objects.using(options['to']).count() and not options['force']: - fs_cleanup(convertdb_file_path) - raise CommandError( - 'There is existing data in the database that will be ' - 'used for the import. If you proceed with the conversion ' - 'you might lose data. Please check your settings.' - ) - - management.call_command( - 'loaddata', convertdb_file_path, database=options['to'], interactive=False, - verbosity=3 - ) - fs_cleanup(convertdb_file_path) diff --git a/mayan/apps/common/management/commands/initialsetup.py b/mayan/apps/common/management/commands/initialsetup.py index 0b9755f145..1b68b737f5 100644 --- a/mayan/apps/common/management/commands/initialsetup.py +++ b/mayan/apps/common/management/commands/initialsetup.py @@ -28,8 +28,8 @@ class Command(management.BaseCommand): ) parser.add_argument( - '--no-javascript', action='store_true', dest='no_javascript', - help='Don\'t download the JavaScript dependencies.', + '--no-dependencies', action='store_true', dest='no_dependencies', + help='Don\'t download dependencies.', ) def initialize_system(self, force=False): @@ -88,9 +88,9 @@ class Command(management.BaseCommand): self.initialize_system(force=options.get('force', False)) pre_initial_setup.send(sender=self) - if not options.get('no_javascript', False): + if not options.get('no_dependencies', False): management.call_command( - command_name='installjavascript', interactive=False + command_name='installdependencies', interactive=False ) management.call_command( diff --git a/mayan/apps/common/management/commands/literals.py b/mayan/apps/common/management/commands/literals.py index 7b3864fbac..e69de29bb2 100644 --- a/mayan/apps/common/management/commands/literals.py +++ b/mayan/apps/common/management/commands/literals.py @@ -1,10 +0,0 @@ -from __future__ import unicode_literals - -SETTING_FILE_TEMPLATE = ''' -from __future__ import absolute_import, unicode_literals - -from .base import * - -SECRET_KEY = '{0}' - -''' diff --git a/mayan/apps/common/management/commands/performupgrade.py b/mayan/apps/common/management/commands/performupgrade.py index a0240b2bdb..21ec2b37f8 100644 --- a/mayan/apps/common/management/commands/performupgrade.py +++ b/mayan/apps/common/management/commands/performupgrade.py @@ -11,8 +11,8 @@ class Command(management.BaseCommand): def add_arguments(self, parser): parser.add_argument( - '--no-javascript', action='store_true', dest='no_javascript', - help='Don\'t download the JavaScript dependencies.', + '--no-dependencies', action='store_true', dest='no_dependencies', + help='Don\'t download dependencies.', ) def handle(self, *args, **options): @@ -25,9 +25,9 @@ class Command(management.BaseCommand): ) ) - if not options.get('no_javascript', False): + if not options.get('no_dependencies', False): management.call_command( - command_name='installjavascript', interactive=False + command_name='installdependencies', interactive=False ) try: diff --git a/mayan/apps/common/management/commands/purgeperiodictasks.py b/mayan/apps/common/management/commands/purgeperiodictasks.py index 835e47440d..e750cf2d47 100644 --- a/mayan/apps/common/management/commands/purgeperiodictasks.py +++ b/mayan/apps/common/management/commands/purgeperiodictasks.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.core import management -from djcelery.models import IntervalSchedule, PeriodicTask +from django_celery_beat.models import IntervalSchedule, PeriodicTask class Command(management.BaseCommand): diff --git a/mayan/apps/common/menus.py b/mayan/apps/common/menus.py index c25064cb40..d1c39545a5 100644 --- a/mayan/apps/common/menus.py +++ b/mayan/apps/common/menus.py @@ -17,6 +17,7 @@ menu_object = Menu(label=_('Actions'), name='object') menu_secondary = Menu(label=_('Secondary'), name='secondary') menu_setup = Menu(name='setup') menu_tools = Menu(name='tools') +menu_topbar = Menu(name='topbar') menu_user = Menu( icon_class=icon_menu_user, name='user', label=_('User') ) diff --git a/mayan/apps/common/migrations/0012_auto_20190711_0548.py b/mayan/apps/common/migrations/0012_auto_20190711_0548.py new file mode 100644 index 0000000000..9915d05e2c --- /dev/null +++ b/mayan/apps/common/migrations/0012_auto_20190711_0548.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.22 on 2019-07-11 05:48 +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.common.models +import mayan.apps.storage.classes + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0011_auto_20180429_0758'), + ] + + operations = [ + migrations.AlterField( + model_name='shareduploadedfile', + name='file', + field=models.FileField(storage=mayan.apps.storage.classes.FakeStorageSubclass(), upload_to=mayan.apps.common.models.upload_to, verbose_name='File'), + ), + migrations.AlterField( + model_name='userlocaleprofile', + name='language', + field=models.CharField(choices=[('ar', 'Arabic'), ('bg', 'Bulgarian'), ('bs', 'Bosnian'), ('cs', 'Czech'), ('da', 'Danish'), ('de', 'German'), ('el', 'Greek'), ('en', 'English'), ('es', 'Spanish'), ('fa', 'Persian'), ('fr', 'French'), ('hu', 'Hungarian'), ('id', 'Indonesian'), ('it', 'Italian'), ('lv', 'Latvian'), ('nl', 'Dutch'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Portuguese (Brazil)'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sl', 'Slovenian'), ('tr', 'Turkish'), ('vi', 'Vietnamese'), ('zh', 'Chinese')], max_length=8, verbose_name='Language'), + ), + migrations.AlterField( + model_name='userlocaleprofile', + name='timezone', + field=models.CharField(choices=[(b'Africa/Abidjan', b'Africa/Abidjan'), (b'Africa/Accra', b'Africa/Accra'), (b'Africa/Addis_Ababa', b'Africa/Addis_Ababa'), (b'Africa/Algiers', b'Africa/Algiers'), (b'Africa/Asmara', b'Africa/Asmara'), (b'Africa/Bamako', b'Africa/Bamako'), (b'Africa/Bangui', b'Africa/Bangui'), (b'Africa/Banjul', b'Africa/Banjul'), (b'Africa/Bissau', b'Africa/Bissau'), (b'Africa/Blantyre', b'Africa/Blantyre'), (b'Africa/Brazzaville', b'Africa/Brazzaville'), (b'Africa/Bujumbura', b'Africa/Bujumbura'), (b'Africa/Cairo', b'Africa/Cairo'), (b'Africa/Casablanca', b'Africa/Casablanca'), (b'Africa/Ceuta', b'Africa/Ceuta'), (b'Africa/Conakry', b'Africa/Conakry'), (b'Africa/Dakar', b'Africa/Dakar'), (b'Africa/Dar_es_Salaam', b'Africa/Dar_es_Salaam'), (b'Africa/Djibouti', b'Africa/Djibouti'), (b'Africa/Douala', b'Africa/Douala'), (b'Africa/El_Aaiun', b'Africa/El_Aaiun'), (b'Africa/Freetown', b'Africa/Freetown'), (b'Africa/Gaborone', b'Africa/Gaborone'), (b'Africa/Harare', b'Africa/Harare'), (b'Africa/Johannesburg', b'Africa/Johannesburg'), (b'Africa/Juba', b'Africa/Juba'), (b'Africa/Kampala', b'Africa/Kampala'), (b'Africa/Khartoum', b'Africa/Khartoum'), (b'Africa/Kigali', b'Africa/Kigali'), (b'Africa/Kinshasa', b'Africa/Kinshasa'), (b'Africa/Lagos', b'Africa/Lagos'), (b'Africa/Libreville', b'Africa/Libreville'), (b'Africa/Lome', b'Africa/Lome'), (b'Africa/Luanda', b'Africa/Luanda'), (b'Africa/Lubumbashi', b'Africa/Lubumbashi'), (b'Africa/Lusaka', b'Africa/Lusaka'), (b'Africa/Malabo', b'Africa/Malabo'), (b'Africa/Maputo', b'Africa/Maputo'), (b'Africa/Maseru', b'Africa/Maseru'), (b'Africa/Mbabane', b'Africa/Mbabane'), (b'Africa/Mogadishu', b'Africa/Mogadishu'), (b'Africa/Monrovia', b'Africa/Monrovia'), (b'Africa/Nairobi', b'Africa/Nairobi'), (b'Africa/Ndjamena', b'Africa/Ndjamena'), (b'Africa/Niamey', b'Africa/Niamey'), (b'Africa/Nouakchott', b'Africa/Nouakchott'), (b'Africa/Ouagadougou', b'Africa/Ouagadougou'), (b'Africa/Porto-Novo', b'Africa/Porto-Novo'), (b'Africa/Sao_Tome', b'Africa/Sao_Tome'), (b'Africa/Tripoli', b'Africa/Tripoli'), (b'Africa/Tunis', b'Africa/Tunis'), (b'Africa/Windhoek', b'Africa/Windhoek'), (b'America/Adak', b'America/Adak'), (b'America/Anchorage', b'America/Anchorage'), (b'America/Anguilla', b'America/Anguilla'), (b'America/Antigua', b'America/Antigua'), (b'America/Araguaina', b'America/Araguaina'), (b'America/Argentina/Buenos_Aires', b'America/Argentina/Buenos_Aires'), (b'America/Argentina/Catamarca', b'America/Argentina/Catamarca'), (b'America/Argentina/Cordoba', b'America/Argentina/Cordoba'), (b'America/Argentina/Jujuy', b'America/Argentina/Jujuy'), (b'America/Argentina/La_Rioja', b'America/Argentina/La_Rioja'), (b'America/Argentina/Mendoza', b'America/Argentina/Mendoza'), (b'America/Argentina/Rio_Gallegos', b'America/Argentina/Rio_Gallegos'), (b'America/Argentina/Salta', b'America/Argentina/Salta'), (b'America/Argentina/San_Juan', b'America/Argentina/San_Juan'), (b'America/Argentina/San_Luis', b'America/Argentina/San_Luis'), (b'America/Argentina/Tucuman', b'America/Argentina/Tucuman'), (b'America/Argentina/Ushuaia', b'America/Argentina/Ushuaia'), (b'America/Aruba', b'America/Aruba'), (b'America/Asuncion', b'America/Asuncion'), (b'America/Atikokan', b'America/Atikokan'), (b'America/Bahia', b'America/Bahia'), (b'America/Bahia_Banderas', b'America/Bahia_Banderas'), (b'America/Barbados', b'America/Barbados'), (b'America/Belem', b'America/Belem'), (b'America/Belize', b'America/Belize'), (b'America/Blanc-Sablon', b'America/Blanc-Sablon'), (b'America/Boa_Vista', b'America/Boa_Vista'), (b'America/Bogota', b'America/Bogota'), (b'America/Boise', b'America/Boise'), (b'America/Cambridge_Bay', b'America/Cambridge_Bay'), (b'America/Campo_Grande', b'America/Campo_Grande'), (b'America/Cancun', b'America/Cancun'), (b'America/Caracas', b'America/Caracas'), (b'America/Cayenne', b'America/Cayenne'), (b'America/Cayman', b'America/Cayman'), (b'America/Chicago', b'America/Chicago'), (b'America/Chihuahua', b'America/Chihuahua'), (b'America/Costa_Rica', b'America/Costa_Rica'), (b'America/Creston', b'America/Creston'), (b'America/Cuiaba', b'America/Cuiaba'), (b'America/Curacao', b'America/Curacao'), (b'America/Danmarkshavn', b'America/Danmarkshavn'), (b'America/Dawson', b'America/Dawson'), (b'America/Dawson_Creek', b'America/Dawson_Creek'), (b'America/Denver', b'America/Denver'), (b'America/Detroit', b'America/Detroit'), (b'America/Dominica', b'America/Dominica'), (b'America/Edmonton', b'America/Edmonton'), (b'America/Eirunepe', b'America/Eirunepe'), (b'America/El_Salvador', b'America/El_Salvador'), (b'America/Fort_Nelson', b'America/Fort_Nelson'), (b'America/Fortaleza', b'America/Fortaleza'), (b'America/Glace_Bay', b'America/Glace_Bay'), (b'America/Godthab', b'America/Godthab'), (b'America/Goose_Bay', b'America/Goose_Bay'), (b'America/Grand_Turk', b'America/Grand_Turk'), (b'America/Grenada', b'America/Grenada'), (b'America/Guadeloupe', b'America/Guadeloupe'), (b'America/Guatemala', b'America/Guatemala'), (b'America/Guayaquil', b'America/Guayaquil'), (b'America/Guyana', b'America/Guyana'), (b'America/Halifax', b'America/Halifax'), (b'America/Havana', b'America/Havana'), (b'America/Hermosillo', b'America/Hermosillo'), (b'America/Indiana/Indianapolis', b'America/Indiana/Indianapolis'), (b'America/Indiana/Knox', b'America/Indiana/Knox'), (b'America/Indiana/Marengo', b'America/Indiana/Marengo'), (b'America/Indiana/Petersburg', b'America/Indiana/Petersburg'), (b'America/Indiana/Tell_City', b'America/Indiana/Tell_City'), (b'America/Indiana/Vevay', b'America/Indiana/Vevay'), (b'America/Indiana/Vincennes', b'America/Indiana/Vincennes'), (b'America/Indiana/Winamac', b'America/Indiana/Winamac'), (b'America/Inuvik', b'America/Inuvik'), (b'America/Iqaluit', b'America/Iqaluit'), (b'America/Jamaica', b'America/Jamaica'), (b'America/Juneau', b'America/Juneau'), (b'America/Kentucky/Louisville', b'America/Kentucky/Louisville'), (b'America/Kentucky/Monticello', b'America/Kentucky/Monticello'), (b'America/Kralendijk', b'America/Kralendijk'), (b'America/La_Paz', b'America/La_Paz'), (b'America/Lima', b'America/Lima'), (b'America/Los_Angeles', b'America/Los_Angeles'), (b'America/Lower_Princes', b'America/Lower_Princes'), (b'America/Maceio', b'America/Maceio'), (b'America/Managua', b'America/Managua'), (b'America/Manaus', b'America/Manaus'), (b'America/Marigot', b'America/Marigot'), (b'America/Martinique', b'America/Martinique'), (b'America/Matamoros', b'America/Matamoros'), (b'America/Mazatlan', b'America/Mazatlan'), (b'America/Menominee', b'America/Menominee'), (b'America/Merida', b'America/Merida'), (b'America/Metlakatla', b'America/Metlakatla'), (b'America/Mexico_City', b'America/Mexico_City'), (b'America/Miquelon', b'America/Miquelon'), (b'America/Moncton', b'America/Moncton'), (b'America/Monterrey', b'America/Monterrey'), (b'America/Montevideo', b'America/Montevideo'), (b'America/Montserrat', b'America/Montserrat'), (b'America/Nassau', b'America/Nassau'), (b'America/New_York', b'America/New_York'), (b'America/Nipigon', b'America/Nipigon'), (b'America/Nome', b'America/Nome'), (b'America/Noronha', b'America/Noronha'), (b'America/North_Dakota/Beulah', b'America/North_Dakota/Beulah'), (b'America/North_Dakota/Center', b'America/North_Dakota/Center'), (b'America/North_Dakota/New_Salem', b'America/North_Dakota/New_Salem'), (b'America/Ojinaga', b'America/Ojinaga'), (b'America/Panama', b'America/Panama'), (b'America/Pangnirtung', b'America/Pangnirtung'), (b'America/Paramaribo', b'America/Paramaribo'), (b'America/Phoenix', b'America/Phoenix'), (b'America/Port-au-Prince', b'America/Port-au-Prince'), (b'America/Port_of_Spain', b'America/Port_of_Spain'), (b'America/Porto_Velho', b'America/Porto_Velho'), (b'America/Puerto_Rico', b'America/Puerto_Rico'), (b'America/Punta_Arenas', b'America/Punta_Arenas'), (b'America/Rainy_River', b'America/Rainy_River'), (b'America/Rankin_Inlet', b'America/Rankin_Inlet'), (b'America/Recife', b'America/Recife'), (b'America/Regina', b'America/Regina'), (b'America/Resolute', b'America/Resolute'), (b'America/Rio_Branco', b'America/Rio_Branco'), (b'America/Santarem', b'America/Santarem'), (b'America/Santiago', b'America/Santiago'), (b'America/Santo_Domingo', b'America/Santo_Domingo'), (b'America/Sao_Paulo', b'America/Sao_Paulo'), (b'America/Scoresbysund', b'America/Scoresbysund'), (b'America/Sitka', b'America/Sitka'), (b'America/St_Barthelemy', b'America/St_Barthelemy'), (b'America/St_Johns', b'America/St_Johns'), (b'America/St_Kitts', b'America/St_Kitts'), (b'America/St_Lucia', b'America/St_Lucia'), (b'America/St_Thomas', b'America/St_Thomas'), (b'America/St_Vincent', b'America/St_Vincent'), (b'America/Swift_Current', b'America/Swift_Current'), (b'America/Tegucigalpa', b'America/Tegucigalpa'), (b'America/Thule', b'America/Thule'), (b'America/Thunder_Bay', b'America/Thunder_Bay'), (b'America/Tijuana', b'America/Tijuana'), (b'America/Toronto', b'America/Toronto'), (b'America/Tortola', b'America/Tortola'), (b'America/Vancouver', b'America/Vancouver'), (b'America/Whitehorse', b'America/Whitehorse'), (b'America/Winnipeg', b'America/Winnipeg'), (b'America/Yakutat', b'America/Yakutat'), (b'America/Yellowknife', b'America/Yellowknife'), (b'Antarctica/Casey', b'Antarctica/Casey'), (b'Antarctica/Davis', b'Antarctica/Davis'), (b'Antarctica/DumontDUrville', b'Antarctica/DumontDUrville'), (b'Antarctica/Macquarie', b'Antarctica/Macquarie'), (b'Antarctica/Mawson', b'Antarctica/Mawson'), (b'Antarctica/McMurdo', b'Antarctica/McMurdo'), (b'Antarctica/Palmer', b'Antarctica/Palmer'), (b'Antarctica/Rothera', b'Antarctica/Rothera'), (b'Antarctica/Syowa', b'Antarctica/Syowa'), (b'Antarctica/Troll', b'Antarctica/Troll'), (b'Antarctica/Vostok', b'Antarctica/Vostok'), (b'Arctic/Longyearbyen', b'Arctic/Longyearbyen'), (b'Asia/Aden', b'Asia/Aden'), (b'Asia/Almaty', b'Asia/Almaty'), (b'Asia/Amman', b'Asia/Amman'), (b'Asia/Anadyr', b'Asia/Anadyr'), (b'Asia/Aqtau', b'Asia/Aqtau'), (b'Asia/Aqtobe', b'Asia/Aqtobe'), (b'Asia/Ashgabat', b'Asia/Ashgabat'), (b'Asia/Atyrau', b'Asia/Atyrau'), (b'Asia/Baghdad', b'Asia/Baghdad'), (b'Asia/Bahrain', b'Asia/Bahrain'), (b'Asia/Baku', b'Asia/Baku'), (b'Asia/Bangkok', b'Asia/Bangkok'), (b'Asia/Barnaul', b'Asia/Barnaul'), (b'Asia/Beirut', b'Asia/Beirut'), (b'Asia/Bishkek', b'Asia/Bishkek'), (b'Asia/Brunei', b'Asia/Brunei'), (b'Asia/Chita', b'Asia/Chita'), (b'Asia/Choibalsan', b'Asia/Choibalsan'), (b'Asia/Colombo', b'Asia/Colombo'), (b'Asia/Damascus', b'Asia/Damascus'), (b'Asia/Dhaka', b'Asia/Dhaka'), (b'Asia/Dili', b'Asia/Dili'), (b'Asia/Dubai', b'Asia/Dubai'), (b'Asia/Dushanbe', b'Asia/Dushanbe'), (b'Asia/Famagusta', b'Asia/Famagusta'), (b'Asia/Gaza', b'Asia/Gaza'), (b'Asia/Hebron', b'Asia/Hebron'), (b'Asia/Ho_Chi_Minh', b'Asia/Ho_Chi_Minh'), (b'Asia/Hong_Kong', b'Asia/Hong_Kong'), (b'Asia/Hovd', b'Asia/Hovd'), (b'Asia/Irkutsk', b'Asia/Irkutsk'), (b'Asia/Jakarta', b'Asia/Jakarta'), (b'Asia/Jayapura', b'Asia/Jayapura'), (b'Asia/Jerusalem', b'Asia/Jerusalem'), (b'Asia/Kabul', b'Asia/Kabul'), (b'Asia/Kamchatka', b'Asia/Kamchatka'), (b'Asia/Karachi', b'Asia/Karachi'), (b'Asia/Kathmandu', b'Asia/Kathmandu'), (b'Asia/Khandyga', b'Asia/Khandyga'), (b'Asia/Kolkata', b'Asia/Kolkata'), (b'Asia/Krasnoyarsk', b'Asia/Krasnoyarsk'), (b'Asia/Kuala_Lumpur', b'Asia/Kuala_Lumpur'), (b'Asia/Kuching', b'Asia/Kuching'), (b'Asia/Kuwait', b'Asia/Kuwait'), (b'Asia/Macau', b'Asia/Macau'), (b'Asia/Magadan', b'Asia/Magadan'), (b'Asia/Makassar', b'Asia/Makassar'), (b'Asia/Manila', b'Asia/Manila'), (b'Asia/Muscat', b'Asia/Muscat'), (b'Asia/Nicosia', b'Asia/Nicosia'), (b'Asia/Novokuznetsk', b'Asia/Novokuznetsk'), (b'Asia/Novosibirsk', b'Asia/Novosibirsk'), (b'Asia/Omsk', b'Asia/Omsk'), (b'Asia/Oral', b'Asia/Oral'), (b'Asia/Phnom_Penh', b'Asia/Phnom_Penh'), (b'Asia/Pontianak', b'Asia/Pontianak'), (b'Asia/Pyongyang', b'Asia/Pyongyang'), (b'Asia/Qatar', b'Asia/Qatar'), (b'Asia/Qostanay', b'Asia/Qostanay'), (b'Asia/Qyzylorda', b'Asia/Qyzylorda'), (b'Asia/Riyadh', b'Asia/Riyadh'), (b'Asia/Sakhalin', b'Asia/Sakhalin'), (b'Asia/Samarkand', b'Asia/Samarkand'), (b'Asia/Seoul', b'Asia/Seoul'), (b'Asia/Shanghai', b'Asia/Shanghai'), (b'Asia/Singapore', b'Asia/Singapore'), (b'Asia/Srednekolymsk', b'Asia/Srednekolymsk'), (b'Asia/Taipei', b'Asia/Taipei'), (b'Asia/Tashkent', b'Asia/Tashkent'), (b'Asia/Tbilisi', b'Asia/Tbilisi'), (b'Asia/Tehran', b'Asia/Tehran'), (b'Asia/Thimphu', b'Asia/Thimphu'), (b'Asia/Tokyo', b'Asia/Tokyo'), (b'Asia/Tomsk', b'Asia/Tomsk'), (b'Asia/Ulaanbaatar', b'Asia/Ulaanbaatar'), (b'Asia/Urumqi', b'Asia/Urumqi'), (b'Asia/Ust-Nera', b'Asia/Ust-Nera'), (b'Asia/Vientiane', b'Asia/Vientiane'), (b'Asia/Vladivostok', b'Asia/Vladivostok'), (b'Asia/Yakutsk', b'Asia/Yakutsk'), (b'Asia/Yangon', b'Asia/Yangon'), (b'Asia/Yekaterinburg', b'Asia/Yekaterinburg'), (b'Asia/Yerevan', b'Asia/Yerevan'), (b'Atlantic/Azores', b'Atlantic/Azores'), (b'Atlantic/Bermuda', b'Atlantic/Bermuda'), (b'Atlantic/Canary', b'Atlantic/Canary'), (b'Atlantic/Cape_Verde', b'Atlantic/Cape_Verde'), (b'Atlantic/Faroe', b'Atlantic/Faroe'), (b'Atlantic/Madeira', b'Atlantic/Madeira'), (b'Atlantic/Reykjavik', b'Atlantic/Reykjavik'), (b'Atlantic/South_Georgia', b'Atlantic/South_Georgia'), (b'Atlantic/St_Helena', b'Atlantic/St_Helena'), (b'Atlantic/Stanley', b'Atlantic/Stanley'), (b'Australia/Adelaide', b'Australia/Adelaide'), (b'Australia/Brisbane', b'Australia/Brisbane'), (b'Australia/Broken_Hill', b'Australia/Broken_Hill'), (b'Australia/Currie', b'Australia/Currie'), (b'Australia/Darwin', b'Australia/Darwin'), (b'Australia/Eucla', b'Australia/Eucla'), (b'Australia/Hobart', b'Australia/Hobart'), (b'Australia/Lindeman', b'Australia/Lindeman'), (b'Australia/Lord_Howe', b'Australia/Lord_Howe'), (b'Australia/Melbourne', b'Australia/Melbourne'), (b'Australia/Perth', b'Australia/Perth'), (b'Australia/Sydney', b'Australia/Sydney'), (b'Canada/Atlantic', b'Canada/Atlantic'), (b'Canada/Central', b'Canada/Central'), (b'Canada/Eastern', b'Canada/Eastern'), (b'Canada/Mountain', b'Canada/Mountain'), (b'Canada/Newfoundland', b'Canada/Newfoundland'), (b'Canada/Pacific', b'Canada/Pacific'), (b'Europe/Amsterdam', b'Europe/Amsterdam'), (b'Europe/Andorra', b'Europe/Andorra'), (b'Europe/Astrakhan', b'Europe/Astrakhan'), (b'Europe/Athens', b'Europe/Athens'), (b'Europe/Belgrade', b'Europe/Belgrade'), (b'Europe/Berlin', b'Europe/Berlin'), (b'Europe/Bratislava', b'Europe/Bratislava'), (b'Europe/Brussels', b'Europe/Brussels'), (b'Europe/Bucharest', b'Europe/Bucharest'), (b'Europe/Budapest', b'Europe/Budapest'), (b'Europe/Busingen', b'Europe/Busingen'), (b'Europe/Chisinau', b'Europe/Chisinau'), (b'Europe/Copenhagen', b'Europe/Copenhagen'), (b'Europe/Dublin', b'Europe/Dublin'), (b'Europe/Gibraltar', b'Europe/Gibraltar'), (b'Europe/Guernsey', b'Europe/Guernsey'), (b'Europe/Helsinki', b'Europe/Helsinki'), (b'Europe/Isle_of_Man', b'Europe/Isle_of_Man'), (b'Europe/Istanbul', b'Europe/Istanbul'), (b'Europe/Jersey', b'Europe/Jersey'), (b'Europe/Kaliningrad', b'Europe/Kaliningrad'), (b'Europe/Kiev', b'Europe/Kiev'), (b'Europe/Kirov', b'Europe/Kirov'), (b'Europe/Lisbon', b'Europe/Lisbon'), (b'Europe/Ljubljana', b'Europe/Ljubljana'), (b'Europe/London', b'Europe/London'), (b'Europe/Luxembourg', b'Europe/Luxembourg'), (b'Europe/Madrid', b'Europe/Madrid'), (b'Europe/Malta', b'Europe/Malta'), (b'Europe/Mariehamn', b'Europe/Mariehamn'), (b'Europe/Minsk', b'Europe/Minsk'), (b'Europe/Monaco', b'Europe/Monaco'), (b'Europe/Moscow', b'Europe/Moscow'), (b'Europe/Oslo', b'Europe/Oslo'), (b'Europe/Paris', b'Europe/Paris'), (b'Europe/Podgorica', b'Europe/Podgorica'), (b'Europe/Prague', b'Europe/Prague'), (b'Europe/Riga', b'Europe/Riga'), (b'Europe/Rome', b'Europe/Rome'), (b'Europe/Samara', b'Europe/Samara'), (b'Europe/San_Marino', b'Europe/San_Marino'), (b'Europe/Sarajevo', b'Europe/Sarajevo'), (b'Europe/Saratov', b'Europe/Saratov'), (b'Europe/Simferopol', b'Europe/Simferopol'), (b'Europe/Skopje', b'Europe/Skopje'), (b'Europe/Sofia', b'Europe/Sofia'), (b'Europe/Stockholm', b'Europe/Stockholm'), (b'Europe/Tallinn', b'Europe/Tallinn'), (b'Europe/Tirane', b'Europe/Tirane'), (b'Europe/Ulyanovsk', b'Europe/Ulyanovsk'), (b'Europe/Uzhgorod', b'Europe/Uzhgorod'), (b'Europe/Vaduz', b'Europe/Vaduz'), (b'Europe/Vatican', b'Europe/Vatican'), (b'Europe/Vienna', b'Europe/Vienna'), (b'Europe/Vilnius', b'Europe/Vilnius'), (b'Europe/Volgograd', b'Europe/Volgograd'), (b'Europe/Warsaw', b'Europe/Warsaw'), (b'Europe/Zagreb', b'Europe/Zagreb'), (b'Europe/Zaporozhye', b'Europe/Zaporozhye'), (b'Europe/Zurich', b'Europe/Zurich'), (b'GMT', b'GMT'), (b'Indian/Antananarivo', b'Indian/Antananarivo'), (b'Indian/Chagos', b'Indian/Chagos'), (b'Indian/Christmas', b'Indian/Christmas'), (b'Indian/Cocos', b'Indian/Cocos'), (b'Indian/Comoro', b'Indian/Comoro'), (b'Indian/Kerguelen', b'Indian/Kerguelen'), (b'Indian/Mahe', b'Indian/Mahe'), (b'Indian/Maldives', b'Indian/Maldives'), (b'Indian/Mauritius', b'Indian/Mauritius'), (b'Indian/Mayotte', b'Indian/Mayotte'), (b'Indian/Reunion', b'Indian/Reunion'), (b'Pacific/Apia', b'Pacific/Apia'), (b'Pacific/Auckland', b'Pacific/Auckland'), (b'Pacific/Bougainville', b'Pacific/Bougainville'), (b'Pacific/Chatham', b'Pacific/Chatham'), (b'Pacific/Chuuk', b'Pacific/Chuuk'), (b'Pacific/Easter', b'Pacific/Easter'), (b'Pacific/Efate', b'Pacific/Efate'), (b'Pacific/Enderbury', b'Pacific/Enderbury'), (b'Pacific/Fakaofo', b'Pacific/Fakaofo'), (b'Pacific/Fiji', b'Pacific/Fiji'), (b'Pacific/Funafuti', b'Pacific/Funafuti'), (b'Pacific/Galapagos', b'Pacific/Galapagos'), (b'Pacific/Gambier', b'Pacific/Gambier'), (b'Pacific/Guadalcanal', b'Pacific/Guadalcanal'), (b'Pacific/Guam', b'Pacific/Guam'), (b'Pacific/Honolulu', b'Pacific/Honolulu'), (b'Pacific/Kiritimati', b'Pacific/Kiritimati'), (b'Pacific/Kosrae', b'Pacific/Kosrae'), (b'Pacific/Kwajalein', b'Pacific/Kwajalein'), (b'Pacific/Majuro', b'Pacific/Majuro'), (b'Pacific/Marquesas', b'Pacific/Marquesas'), (b'Pacific/Midway', b'Pacific/Midway'), (b'Pacific/Nauru', b'Pacific/Nauru'), (b'Pacific/Niue', b'Pacific/Niue'), (b'Pacific/Norfolk', b'Pacific/Norfolk'), (b'Pacific/Noumea', b'Pacific/Noumea'), (b'Pacific/Pago_Pago', b'Pacific/Pago_Pago'), (b'Pacific/Palau', b'Pacific/Palau'), (b'Pacific/Pitcairn', b'Pacific/Pitcairn'), (b'Pacific/Pohnpei', b'Pacific/Pohnpei'), (b'Pacific/Port_Moresby', b'Pacific/Port_Moresby'), (b'Pacific/Rarotonga', b'Pacific/Rarotonga'), (b'Pacific/Saipan', b'Pacific/Saipan'), (b'Pacific/Tahiti', b'Pacific/Tahiti'), (b'Pacific/Tarawa', b'Pacific/Tarawa'), (b'Pacific/Tongatapu', b'Pacific/Tongatapu'), (b'Pacific/Wake', b'Pacific/Wake'), (b'Pacific/Wallis', b'Pacific/Wallis'), (b'US/Alaska', b'US/Alaska'), (b'US/Arizona', b'US/Arizona'), (b'US/Central', b'US/Central'), (b'US/Eastern', b'US/Eastern'), (b'US/Hawaii', b'US/Hawaii'), (b'US/Mountain', b'US/Mountain'), (b'US/Pacific', b'US/Pacific'), (b'UTC', b'UTC')], max_length=48, verbose_name='Timezone'), + ), + ] diff --git a/mayan/apps/common/migrations/0013_auto_20190725_0452.py b/mayan/apps/common/migrations/0013_auto_20190725_0452.py new file mode 100644 index 0000000000..1a8d0b92cd --- /dev/null +++ b/mayan/apps/common/migrations/0013_auto_20190725_0452.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-07-25 04:52 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0012_auto_20190711_0548'), + ] + + operations = [ + migrations.AlterField( + model_name='userlocaleprofile', + name='timezone', + field=models.CharField(choices=[('Africa/Abidjan', 'Africa/Abidjan'), ('Africa/Accra', 'Africa/Accra'), ('Africa/Addis_Ababa', 'Africa/Addis_Ababa'), ('Africa/Algiers', 'Africa/Algiers'), ('Africa/Asmara', 'Africa/Asmara'), ('Africa/Bamako', 'Africa/Bamako'), ('Africa/Bangui', 'Africa/Bangui'), ('Africa/Banjul', 'Africa/Banjul'), ('Africa/Bissau', 'Africa/Bissau'), ('Africa/Blantyre', 'Africa/Blantyre'), ('Africa/Brazzaville', 'Africa/Brazzaville'), ('Africa/Bujumbura', 'Africa/Bujumbura'), ('Africa/Cairo', 'Africa/Cairo'), ('Africa/Casablanca', 'Africa/Casablanca'), ('Africa/Ceuta', 'Africa/Ceuta'), ('Africa/Conakry', 'Africa/Conakry'), ('Africa/Dakar', 'Africa/Dakar'), ('Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), ('Africa/Djibouti', 'Africa/Djibouti'), ('Africa/Douala', 'Africa/Douala'), ('Africa/El_Aaiun', 'Africa/El_Aaiun'), ('Africa/Freetown', 'Africa/Freetown'), ('Africa/Gaborone', 'Africa/Gaborone'), ('Africa/Harare', 'Africa/Harare'), ('Africa/Johannesburg', 'Africa/Johannesburg'), ('Africa/Juba', 'Africa/Juba'), ('Africa/Kampala', 'Africa/Kampala'), ('Africa/Khartoum', 'Africa/Khartoum'), ('Africa/Kigali', 'Africa/Kigali'), ('Africa/Kinshasa', 'Africa/Kinshasa'), ('Africa/Lagos', 'Africa/Lagos'), ('Africa/Libreville', 'Africa/Libreville'), ('Africa/Lome', 'Africa/Lome'), ('Africa/Luanda', 'Africa/Luanda'), ('Africa/Lubumbashi', 'Africa/Lubumbashi'), ('Africa/Lusaka', 'Africa/Lusaka'), ('Africa/Malabo', 'Africa/Malabo'), ('Africa/Maputo', 'Africa/Maputo'), ('Africa/Maseru', 'Africa/Maseru'), ('Africa/Mbabane', 'Africa/Mbabane'), ('Africa/Mogadishu', 'Africa/Mogadishu'), ('Africa/Monrovia', 'Africa/Monrovia'), ('Africa/Nairobi', 'Africa/Nairobi'), ('Africa/Ndjamena', 'Africa/Ndjamena'), ('Africa/Niamey', 'Africa/Niamey'), ('Africa/Nouakchott', 'Africa/Nouakchott'), ('Africa/Ouagadougou', 'Africa/Ouagadougou'), ('Africa/Porto-Novo', 'Africa/Porto-Novo'), ('Africa/Sao_Tome', 'Africa/Sao_Tome'), ('Africa/Tripoli', 'Africa/Tripoli'), ('Africa/Tunis', 'Africa/Tunis'), ('Africa/Windhoek', 'Africa/Windhoek'), ('America/Adak', 'America/Adak'), ('America/Anchorage', 'America/Anchorage'), ('America/Anguilla', 'America/Anguilla'), ('America/Antigua', 'America/Antigua'), ('America/Araguaina', 'America/Araguaina'), ('America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), ('America/Argentina/Catamarca', 'America/Argentina/Catamarca'), ('America/Argentina/Cordoba', 'America/Argentina/Cordoba'), ('America/Argentina/Jujuy', 'America/Argentina/Jujuy'), ('America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), ('America/Argentina/Mendoza', 'America/Argentina/Mendoza'), ('America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), ('America/Argentina/Salta', 'America/Argentina/Salta'), ('America/Argentina/San_Juan', 'America/Argentina/San_Juan'), ('America/Argentina/San_Luis', 'America/Argentina/San_Luis'), ('America/Argentina/Tucuman', 'America/Argentina/Tucuman'), ('America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), ('America/Aruba', 'America/Aruba'), ('America/Asuncion', 'America/Asuncion'), ('America/Atikokan', 'America/Atikokan'), ('America/Bahia', 'America/Bahia'), ('America/Bahia_Banderas', 'America/Bahia_Banderas'), ('America/Barbados', 'America/Barbados'), ('America/Belem', 'America/Belem'), ('America/Belize', 'America/Belize'), ('America/Blanc-Sablon', 'America/Blanc-Sablon'), ('America/Boa_Vista', 'America/Boa_Vista'), ('America/Bogota', 'America/Bogota'), ('America/Boise', 'America/Boise'), ('America/Cambridge_Bay', 'America/Cambridge_Bay'), ('America/Campo_Grande', 'America/Campo_Grande'), ('America/Cancun', 'America/Cancun'), ('America/Caracas', 'America/Caracas'), ('America/Cayenne', 'America/Cayenne'), ('America/Cayman', 'America/Cayman'), ('America/Chicago', 'America/Chicago'), ('America/Chihuahua', 'America/Chihuahua'), ('America/Costa_Rica', 'America/Costa_Rica'), ('America/Creston', 'America/Creston'), ('America/Cuiaba', 'America/Cuiaba'), ('America/Curacao', 'America/Curacao'), ('America/Danmarkshavn', 'America/Danmarkshavn'), ('America/Dawson', 'America/Dawson'), ('America/Dawson_Creek', 'America/Dawson_Creek'), ('America/Denver', 'America/Denver'), ('America/Detroit', 'America/Detroit'), ('America/Dominica', 'America/Dominica'), ('America/Edmonton', 'America/Edmonton'), ('America/Eirunepe', 'America/Eirunepe'), ('America/El_Salvador', 'America/El_Salvador'), ('America/Fort_Nelson', 'America/Fort_Nelson'), ('America/Fortaleza', 'America/Fortaleza'), ('America/Glace_Bay', 'America/Glace_Bay'), ('America/Godthab', 'America/Godthab'), ('America/Goose_Bay', 'America/Goose_Bay'), ('America/Grand_Turk', 'America/Grand_Turk'), ('America/Grenada', 'America/Grenada'), ('America/Guadeloupe', 'America/Guadeloupe'), ('America/Guatemala', 'America/Guatemala'), ('America/Guayaquil', 'America/Guayaquil'), ('America/Guyana', 'America/Guyana'), ('America/Halifax', 'America/Halifax'), ('America/Havana', 'America/Havana'), ('America/Hermosillo', 'America/Hermosillo'), ('America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), ('America/Indiana/Knox', 'America/Indiana/Knox'), ('America/Indiana/Marengo', 'America/Indiana/Marengo'), ('America/Indiana/Petersburg', 'America/Indiana/Petersburg'), ('America/Indiana/Tell_City', 'America/Indiana/Tell_City'), ('America/Indiana/Vevay', 'America/Indiana/Vevay'), ('America/Indiana/Vincennes', 'America/Indiana/Vincennes'), ('America/Indiana/Winamac', 'America/Indiana/Winamac'), ('America/Inuvik', 'America/Inuvik'), ('America/Iqaluit', 'America/Iqaluit'), ('America/Jamaica', 'America/Jamaica'), ('America/Juneau', 'America/Juneau'), ('America/Kentucky/Louisville', 'America/Kentucky/Louisville'), ('America/Kentucky/Monticello', 'America/Kentucky/Monticello'), ('America/Kralendijk', 'America/Kralendijk'), ('America/La_Paz', 'America/La_Paz'), ('America/Lima', 'America/Lima'), ('America/Los_Angeles', 'America/Los_Angeles'), ('America/Lower_Princes', 'America/Lower_Princes'), ('America/Maceio', 'America/Maceio'), ('America/Managua', 'America/Managua'), ('America/Manaus', 'America/Manaus'), ('America/Marigot', 'America/Marigot'), ('America/Martinique', 'America/Martinique'), ('America/Matamoros', 'America/Matamoros'), ('America/Mazatlan', 'America/Mazatlan'), ('America/Menominee', 'America/Menominee'), ('America/Merida', 'America/Merida'), ('America/Metlakatla', 'America/Metlakatla'), ('America/Mexico_City', 'America/Mexico_City'), ('America/Miquelon', 'America/Miquelon'), ('America/Moncton', 'America/Moncton'), ('America/Monterrey', 'America/Monterrey'), ('America/Montevideo', 'America/Montevideo'), ('America/Montserrat', 'America/Montserrat'), ('America/Nassau', 'America/Nassau'), ('America/New_York', 'America/New_York'), ('America/Nipigon', 'America/Nipigon'), ('America/Nome', 'America/Nome'), ('America/Noronha', 'America/Noronha'), ('America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), ('America/North_Dakota/Center', 'America/North_Dakota/Center'), ('America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), ('America/Ojinaga', 'America/Ojinaga'), ('America/Panama', 'America/Panama'), ('America/Pangnirtung', 'America/Pangnirtung'), ('America/Paramaribo', 'America/Paramaribo'), ('America/Phoenix', 'America/Phoenix'), ('America/Port-au-Prince', 'America/Port-au-Prince'), ('America/Port_of_Spain', 'America/Port_of_Spain'), ('America/Porto_Velho', 'America/Porto_Velho'), ('America/Puerto_Rico', 'America/Puerto_Rico'), ('America/Punta_Arenas', 'America/Punta_Arenas'), ('America/Rainy_River', 'America/Rainy_River'), ('America/Rankin_Inlet', 'America/Rankin_Inlet'), ('America/Recife', 'America/Recife'), ('America/Regina', 'America/Regina'), ('America/Resolute', 'America/Resolute'), ('America/Rio_Branco', 'America/Rio_Branco'), ('America/Santarem', 'America/Santarem'), ('America/Santiago', 'America/Santiago'), ('America/Santo_Domingo', 'America/Santo_Domingo'), ('America/Sao_Paulo', 'America/Sao_Paulo'), ('America/Scoresbysund', 'America/Scoresbysund'), ('America/Sitka', 'America/Sitka'), ('America/St_Barthelemy', 'America/St_Barthelemy'), ('America/St_Johns', 'America/St_Johns'), ('America/St_Kitts', 'America/St_Kitts'), ('America/St_Lucia', 'America/St_Lucia'), ('America/St_Thomas', 'America/St_Thomas'), ('America/St_Vincent', 'America/St_Vincent'), ('America/Swift_Current', 'America/Swift_Current'), ('America/Tegucigalpa', 'America/Tegucigalpa'), ('America/Thule', 'America/Thule'), ('America/Thunder_Bay', 'America/Thunder_Bay'), ('America/Tijuana', 'America/Tijuana'), ('America/Toronto', 'America/Toronto'), ('America/Tortola', 'America/Tortola'), ('America/Vancouver', 'America/Vancouver'), ('America/Whitehorse', 'America/Whitehorse'), ('America/Winnipeg', 'America/Winnipeg'), ('America/Yakutat', 'America/Yakutat'), ('America/Yellowknife', 'America/Yellowknife'), ('Antarctica/Casey', 'Antarctica/Casey'), ('Antarctica/Davis', 'Antarctica/Davis'), ('Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), ('Antarctica/Macquarie', 'Antarctica/Macquarie'), ('Antarctica/Mawson', 'Antarctica/Mawson'), ('Antarctica/McMurdo', 'Antarctica/McMurdo'), ('Antarctica/Palmer', 'Antarctica/Palmer'), ('Antarctica/Rothera', 'Antarctica/Rothera'), ('Antarctica/Syowa', 'Antarctica/Syowa'), ('Antarctica/Troll', 'Antarctica/Troll'), ('Antarctica/Vostok', 'Antarctica/Vostok'), ('Arctic/Longyearbyen', 'Arctic/Longyearbyen'), ('Asia/Aden', 'Asia/Aden'), ('Asia/Almaty', 'Asia/Almaty'), ('Asia/Amman', 'Asia/Amman'), ('Asia/Anadyr', 'Asia/Anadyr'), ('Asia/Aqtau', 'Asia/Aqtau'), ('Asia/Aqtobe', 'Asia/Aqtobe'), ('Asia/Ashgabat', 'Asia/Ashgabat'), ('Asia/Atyrau', 'Asia/Atyrau'), ('Asia/Baghdad', 'Asia/Baghdad'), ('Asia/Bahrain', 'Asia/Bahrain'), ('Asia/Baku', 'Asia/Baku'), ('Asia/Bangkok', 'Asia/Bangkok'), ('Asia/Barnaul', 'Asia/Barnaul'), ('Asia/Beirut', 'Asia/Beirut'), ('Asia/Bishkek', 'Asia/Bishkek'), ('Asia/Brunei', 'Asia/Brunei'), ('Asia/Chita', 'Asia/Chita'), ('Asia/Choibalsan', 'Asia/Choibalsan'), ('Asia/Colombo', 'Asia/Colombo'), ('Asia/Damascus', 'Asia/Damascus'), ('Asia/Dhaka', 'Asia/Dhaka'), ('Asia/Dili', 'Asia/Dili'), ('Asia/Dubai', 'Asia/Dubai'), ('Asia/Dushanbe', 'Asia/Dushanbe'), ('Asia/Famagusta', 'Asia/Famagusta'), ('Asia/Gaza', 'Asia/Gaza'), ('Asia/Hebron', 'Asia/Hebron'), ('Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), ('Asia/Hong_Kong', 'Asia/Hong_Kong'), ('Asia/Hovd', 'Asia/Hovd'), ('Asia/Irkutsk', 'Asia/Irkutsk'), ('Asia/Jakarta', 'Asia/Jakarta'), ('Asia/Jayapura', 'Asia/Jayapura'), ('Asia/Jerusalem', 'Asia/Jerusalem'), ('Asia/Kabul', 'Asia/Kabul'), ('Asia/Kamchatka', 'Asia/Kamchatka'), ('Asia/Karachi', 'Asia/Karachi'), ('Asia/Kathmandu', 'Asia/Kathmandu'), ('Asia/Khandyga', 'Asia/Khandyga'), ('Asia/Kolkata', 'Asia/Kolkata'), ('Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), ('Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), ('Asia/Kuching', 'Asia/Kuching'), ('Asia/Kuwait', 'Asia/Kuwait'), ('Asia/Macau', 'Asia/Macau'), ('Asia/Magadan', 'Asia/Magadan'), ('Asia/Makassar', 'Asia/Makassar'), ('Asia/Manila', 'Asia/Manila'), ('Asia/Muscat', 'Asia/Muscat'), ('Asia/Nicosia', 'Asia/Nicosia'), ('Asia/Novokuznetsk', 'Asia/Novokuznetsk'), ('Asia/Novosibirsk', 'Asia/Novosibirsk'), ('Asia/Omsk', 'Asia/Omsk'), ('Asia/Oral', 'Asia/Oral'), ('Asia/Phnom_Penh', 'Asia/Phnom_Penh'), ('Asia/Pontianak', 'Asia/Pontianak'), ('Asia/Pyongyang', 'Asia/Pyongyang'), ('Asia/Qatar', 'Asia/Qatar'), ('Asia/Qostanay', 'Asia/Qostanay'), ('Asia/Qyzylorda', 'Asia/Qyzylorda'), ('Asia/Riyadh', 'Asia/Riyadh'), ('Asia/Sakhalin', 'Asia/Sakhalin'), ('Asia/Samarkand', 'Asia/Samarkand'), ('Asia/Seoul', 'Asia/Seoul'), ('Asia/Shanghai', 'Asia/Shanghai'), ('Asia/Singapore', 'Asia/Singapore'), ('Asia/Srednekolymsk', 'Asia/Srednekolymsk'), ('Asia/Taipei', 'Asia/Taipei'), ('Asia/Tashkent', 'Asia/Tashkent'), ('Asia/Tbilisi', 'Asia/Tbilisi'), ('Asia/Tehran', 'Asia/Tehran'), ('Asia/Thimphu', 'Asia/Thimphu'), ('Asia/Tokyo', 'Asia/Tokyo'), ('Asia/Tomsk', 'Asia/Tomsk'), ('Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), ('Asia/Urumqi', 'Asia/Urumqi'), ('Asia/Ust-Nera', 'Asia/Ust-Nera'), ('Asia/Vientiane', 'Asia/Vientiane'), ('Asia/Vladivostok', 'Asia/Vladivostok'), ('Asia/Yakutsk', 'Asia/Yakutsk'), ('Asia/Yangon', 'Asia/Yangon'), ('Asia/Yekaterinburg', 'Asia/Yekaterinburg'), ('Asia/Yerevan', 'Asia/Yerevan'), ('Atlantic/Azores', 'Atlantic/Azores'), ('Atlantic/Bermuda', 'Atlantic/Bermuda'), ('Atlantic/Canary', 'Atlantic/Canary'), ('Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), ('Atlantic/Faroe', 'Atlantic/Faroe'), ('Atlantic/Madeira', 'Atlantic/Madeira'), ('Atlantic/Reykjavik', 'Atlantic/Reykjavik'), ('Atlantic/South_Georgia', 'Atlantic/South_Georgia'), ('Atlantic/St_Helena', 'Atlantic/St_Helena'), ('Atlantic/Stanley', 'Atlantic/Stanley'), ('Australia/Adelaide', 'Australia/Adelaide'), ('Australia/Brisbane', 'Australia/Brisbane'), ('Australia/Broken_Hill', 'Australia/Broken_Hill'), ('Australia/Currie', 'Australia/Currie'), ('Australia/Darwin', 'Australia/Darwin'), ('Australia/Eucla', 'Australia/Eucla'), ('Australia/Hobart', 'Australia/Hobart'), ('Australia/Lindeman', 'Australia/Lindeman'), ('Australia/Lord_Howe', 'Australia/Lord_Howe'), ('Australia/Melbourne', 'Australia/Melbourne'), ('Australia/Perth', 'Australia/Perth'), ('Australia/Sydney', 'Australia/Sydney'), ('Canada/Atlantic', 'Canada/Atlantic'), ('Canada/Central', 'Canada/Central'), ('Canada/Eastern', 'Canada/Eastern'), ('Canada/Mountain', 'Canada/Mountain'), ('Canada/Newfoundland', 'Canada/Newfoundland'), ('Canada/Pacific', 'Canada/Pacific'), ('Europe/Amsterdam', 'Europe/Amsterdam'), ('Europe/Andorra', 'Europe/Andorra'), ('Europe/Astrakhan', 'Europe/Astrakhan'), ('Europe/Athens', 'Europe/Athens'), ('Europe/Belgrade', 'Europe/Belgrade'), ('Europe/Berlin', 'Europe/Berlin'), ('Europe/Bratislava', 'Europe/Bratislava'), ('Europe/Brussels', 'Europe/Brussels'), ('Europe/Bucharest', 'Europe/Bucharest'), ('Europe/Budapest', 'Europe/Budapest'), ('Europe/Busingen', 'Europe/Busingen'), ('Europe/Chisinau', 'Europe/Chisinau'), ('Europe/Copenhagen', 'Europe/Copenhagen'), ('Europe/Dublin', 'Europe/Dublin'), ('Europe/Gibraltar', 'Europe/Gibraltar'), ('Europe/Guernsey', 'Europe/Guernsey'), ('Europe/Helsinki', 'Europe/Helsinki'), ('Europe/Isle_of_Man', 'Europe/Isle_of_Man'), ('Europe/Istanbul', 'Europe/Istanbul'), ('Europe/Jersey', 'Europe/Jersey'), ('Europe/Kaliningrad', 'Europe/Kaliningrad'), ('Europe/Kiev', 'Europe/Kiev'), ('Europe/Kirov', 'Europe/Kirov'), ('Europe/Lisbon', 'Europe/Lisbon'), ('Europe/Ljubljana', 'Europe/Ljubljana'), ('Europe/London', 'Europe/London'), ('Europe/Luxembourg', 'Europe/Luxembourg'), ('Europe/Madrid', 'Europe/Madrid'), ('Europe/Malta', 'Europe/Malta'), ('Europe/Mariehamn', 'Europe/Mariehamn'), ('Europe/Minsk', 'Europe/Minsk'), ('Europe/Monaco', 'Europe/Monaco'), ('Europe/Moscow', 'Europe/Moscow'), ('Europe/Oslo', 'Europe/Oslo'), ('Europe/Paris', 'Europe/Paris'), ('Europe/Podgorica', 'Europe/Podgorica'), ('Europe/Prague', 'Europe/Prague'), ('Europe/Riga', 'Europe/Riga'), ('Europe/Rome', 'Europe/Rome'), ('Europe/Samara', 'Europe/Samara'), ('Europe/San_Marino', 'Europe/San_Marino'), ('Europe/Sarajevo', 'Europe/Sarajevo'), ('Europe/Saratov', 'Europe/Saratov'), ('Europe/Simferopol', 'Europe/Simferopol'), ('Europe/Skopje', 'Europe/Skopje'), ('Europe/Sofia', 'Europe/Sofia'), ('Europe/Stockholm', 'Europe/Stockholm'), ('Europe/Tallinn', 'Europe/Tallinn'), ('Europe/Tirane', 'Europe/Tirane'), ('Europe/Ulyanovsk', 'Europe/Ulyanovsk'), ('Europe/Uzhgorod', 'Europe/Uzhgorod'), ('Europe/Vaduz', 'Europe/Vaduz'), ('Europe/Vatican', 'Europe/Vatican'), ('Europe/Vienna', 'Europe/Vienna'), ('Europe/Vilnius', 'Europe/Vilnius'), ('Europe/Volgograd', 'Europe/Volgograd'), ('Europe/Warsaw', 'Europe/Warsaw'), ('Europe/Zagreb', 'Europe/Zagreb'), ('Europe/Zaporozhye', 'Europe/Zaporozhye'), ('Europe/Zurich', 'Europe/Zurich'), ('GMT', 'GMT'), ('Indian/Antananarivo', 'Indian/Antananarivo'), ('Indian/Chagos', 'Indian/Chagos'), ('Indian/Christmas', 'Indian/Christmas'), ('Indian/Cocos', 'Indian/Cocos'), ('Indian/Comoro', 'Indian/Comoro'), ('Indian/Kerguelen', 'Indian/Kerguelen'), ('Indian/Mahe', 'Indian/Mahe'), ('Indian/Maldives', 'Indian/Maldives'), ('Indian/Mauritius', 'Indian/Mauritius'), ('Indian/Mayotte', 'Indian/Mayotte'), ('Indian/Reunion', 'Indian/Reunion'), ('Pacific/Apia', 'Pacific/Apia'), ('Pacific/Auckland', 'Pacific/Auckland'), ('Pacific/Bougainville', 'Pacific/Bougainville'), ('Pacific/Chatham', 'Pacific/Chatham'), ('Pacific/Chuuk', 'Pacific/Chuuk'), ('Pacific/Easter', 'Pacific/Easter'), ('Pacific/Efate', 'Pacific/Efate'), ('Pacific/Enderbury', 'Pacific/Enderbury'), ('Pacific/Fakaofo', 'Pacific/Fakaofo'), ('Pacific/Fiji', 'Pacific/Fiji'), ('Pacific/Funafuti', 'Pacific/Funafuti'), ('Pacific/Galapagos', 'Pacific/Galapagos'), ('Pacific/Gambier', 'Pacific/Gambier'), ('Pacific/Guadalcanal', 'Pacific/Guadalcanal'), ('Pacific/Guam', 'Pacific/Guam'), ('Pacific/Honolulu', 'Pacific/Honolulu'), ('Pacific/Kiritimati', 'Pacific/Kiritimati'), ('Pacific/Kosrae', 'Pacific/Kosrae'), ('Pacific/Kwajalein', 'Pacific/Kwajalein'), ('Pacific/Majuro', 'Pacific/Majuro'), ('Pacific/Marquesas', 'Pacific/Marquesas'), ('Pacific/Midway', 'Pacific/Midway'), ('Pacific/Nauru', 'Pacific/Nauru'), ('Pacific/Niue', 'Pacific/Niue'), ('Pacific/Norfolk', 'Pacific/Norfolk'), ('Pacific/Noumea', 'Pacific/Noumea'), ('Pacific/Pago_Pago', 'Pacific/Pago_Pago'), ('Pacific/Palau', 'Pacific/Palau'), ('Pacific/Pitcairn', 'Pacific/Pitcairn'), ('Pacific/Pohnpei', 'Pacific/Pohnpei'), ('Pacific/Port_Moresby', 'Pacific/Port_Moresby'), ('Pacific/Rarotonga', 'Pacific/Rarotonga'), ('Pacific/Saipan', 'Pacific/Saipan'), ('Pacific/Tahiti', 'Pacific/Tahiti'), ('Pacific/Tarawa', 'Pacific/Tarawa'), ('Pacific/Tongatapu', 'Pacific/Tongatapu'), ('Pacific/Wake', 'Pacific/Wake'), ('Pacific/Wallis', 'Pacific/Wallis'), ('US/Alaska', 'US/Alaska'), ('US/Arizona', 'US/Arizona'), ('US/Central', 'US/Central'), ('US/Eastern', 'US/Eastern'), ('US/Hawaii', 'US/Hawaii'), ('US/Mountain', 'US/Mountain'), ('US/Pacific', 'US/Pacific'), ('UTC', 'UTC')], max_length=48, verbose_name='Timezone'), + ), + ] diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index a014542bc1..861b75df93 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals from django.contrib import messages +from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ImproperlyConfigured, PermissionDenied from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404 @@ -8,6 +9,7 @@ from django.urls import reverse from django.utils.translation import ungettext, ugettext_lazy as _ from django.views.generic.detail import SingleObjectMixin +from mayan.apps.acls.classes import ModelPermission from mayan.apps.acls.models import AccessControlList from mayan.apps.permissions import Permission @@ -17,6 +19,28 @@ from .literals import PK_LIST_SEPARATOR from .settings import setting_home_view +class ContentTypeViewMixin(object): + """ + This mixin makes it easier for views to retrieve a content type from + the URL pattern. + """ + content_type_url_kw_args = { + 'app_label': 'app_label', + 'model_name': 'model' + } + + def get_content_type(self): + return get_object_or_404( + klass=ContentType, + app_label=self.kwargs[ + self.content_type_url_kw_args['app_label'] + ], + model=self.kwargs[ + self.content_type_url_kw_args['model_name'] + ] + ) + + class DeleteExtraDataMixin(object): """ Mixin to populate the extra data needed for delete views @@ -103,7 +127,15 @@ class ExternalObjectMixin(object): 'get_external_object_queryset() method.' ) - return self.external_object_queryset or self.external_object_class.objects.all() + queryset = self.external_object_queryset + + if not queryset: + manager = ModelPermission.get_manager( + model=self.external_object_class + ) + queryset = manager.all() + + return queryset def get_external_object_queryset_filtered(self): queryset = self.get_external_object_queryset() @@ -118,6 +150,20 @@ class ExternalObjectMixin(object): return queryset +class ExternalContentTypeObjectMixin(ContentTypeViewMixin, ExternalObjectMixin): + """ + Mixin to retrieve an external object by content type from the URL pattern. + """ + external_object_pk_url_kwarg = 'object_id' + + def get_external_object_queryset(self): + content_type = self.get_content_type() + self.external_object_class = content_type.model_class() + return super( + ExternalContentTypeObjectMixin, self + ).get_external_object_queryset() + + class FormExtraKwargsMixin(object): """ Mixin that allows a view to pass extra keyword arguments to forms @@ -250,9 +296,9 @@ class ObjectActionMixin(object): def get_success_message(self, count): return ungettext( - self.success_message, - self.success_message_plural, - count + singular=self.success_message, + plural=self.success_message_plural, + number=count ) % { 'count': count, } @@ -271,14 +317,15 @@ class ObjectActionMixin(object): pass except ActionError: messages.error( - self.request, self.error_message % {'instance': instance} + message=self.error_message % {'instance': instance}, + request=self.request ) else: self.action_count += 1 messages.success( - self.request, - self.get_success_message(count=self.action_count) + message=self.get_success_message(count=self.action_count), + request=self.request ) @@ -383,6 +430,21 @@ class RestrictedQuerysetMixin(object): object_permission = None source_queryset = None + def get_object_permission(self): + return self.object_permission + + def get_queryset(self): + queryset = self.get_source_queryset() + object_permission = self.get_object_permission() + + if object_permission: + queryset = AccessControlList.objects.restrict_queryset( + permission=object_permission, queryset=queryset, + user=self.request.user + ) + + return queryset + def get_source_queryset(self): if self.source_queryset is None: if self.model: @@ -398,17 +460,6 @@ class RestrictedQuerysetMixin(object): return self.source_queryset.all() - def get_queryset(self): - queryset = self.get_source_queryset() - - if self.object_permission: - queryset = AccessControlList.objects.restrict_queryset( - permission=self.object_permission, queryset=queryset, - user=self.request.user - ) - - return queryset - class ViewPermissionCheckMixin(object): """ @@ -420,11 +471,16 @@ class ViewPermissionCheckMixin(object): view_permission = None def dispatch(self, request, *args, **kwargs): - if self.view_permission: + view_permission = self.get_view_permission() + if view_permission: Permission.check_user_permissions( - permissions=(self.view_permission,), user=self.request.user + permissions=(view_permission,), + user=self.request.user ) return super( ViewPermissionCheckMixin, self ).dispatch(request, *args, **kwargs) + + def get_view_permission(self): + return self.view_permission diff --git a/mayan/apps/common/serialization.py b/mayan/apps/common/serialization.py new file mode 100644 index 0000000000..27f9b52c06 --- /dev/null +++ b/mayan/apps/common/serialization.py @@ -0,0 +1,22 @@ +from __future__ import unicode_literals + +import yaml + +try: + from yaml import CSafeLoader as SafeLoader, CSafeDumper as SafeDumper +except ImportError: + from yaml import SafeLoader, SafeDumper + + +def yaml_dump(*args, **kwargs): + defaults = {'Dumper': SafeDumper} + defaults.update(kwargs) + + return yaml.dump(*args, **defaults) + + +def yaml_load(*args, **kwargs): + defaults = {'Loader': SafeLoader} + defaults.update(kwargs) + + return yaml.load(*args, **defaults) diff --git a/mayan/apps/common/setting_migrations.py b/mayan/apps/common/setting_migrations.py new file mode 100644 index 0000000000..4bf1332f9c --- /dev/null +++ b/mayan/apps/common/setting_migrations.py @@ -0,0 +1,16 @@ +from __future__ import unicode_literals + +from mayan.apps.smart_settings.classes import NamespaceMigration + +from .serialization import yaml_load + + +class CommonSettingMigration(NamespaceMigration): + """ + From version 0001 to 0002 backend arguments are no longer quoted + but YAML valid too. Changed in version 3.3. + """ + def common_shared_storage_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) diff --git a/mayan/apps/common/settings.py b/mayan/apps/common/settings.py index 84009fe170..aff78fc20c 100644 --- a/mayan/apps/common/settings.py +++ b/mayan/apps/common/settings.py @@ -9,9 +9,12 @@ import mayan from mayan.apps.smart_settings.classes import Namespace from .literals import DEFAULT_COMMON_HOME_VIEW +from .setting_migrations import CommonSettingMigration - -namespace = Namespace(label=_('Common'), name='common') +namespace = Namespace( + label=_('Common'), migration_class=CommonSettingMigration, + name='common', version='0002' +) setting_auto_logging = namespace.add_setting( global_name='COMMON_AUTO_LOGGING', @@ -95,322 +98,5 @@ setting_shared_storage = namespace.add_setting( ) setting_shared_storage_arguments = namespace.add_setting( global_name='COMMON_SHARED_STORAGE_ARGUMENTS', - default='{{location: {}}}'.format( - os.path.join(settings.MEDIA_ROOT, 'shared_files') - ), quoted=True -) - -namespace = Namespace(label=_('Django'), name='django') - -setting_django_allowed_hosts = namespace.add_setting( - global_name='ALLOWED_HOSTS', default=settings.ALLOWED_HOSTS, - help_text=_( - 'A list of strings representing the host/domain names that this site ' - 'can serve. This is a security measure to prevent HTTP Host header ' - 'attacks, which are possible even under many seemingly-safe web ' - 'server configurations. Values in this list can be ' - 'fully qualified names (e.g. \'www.example.com\'), in which case ' - 'they will be matched against the request\'s Host header exactly ' - '(case-insensitive, not including port). A value beginning with a ' - 'period can be used as a subdomain wildcard: \'.example.com\' will ' - 'match example.com, www.example.com, and any other subdomain of ' - 'example.com. A value of \'*\' will match anything; in this case you ' - 'are responsible to provide your own validation of the Host header ' - '(perhaps in a middleware; if so this middleware must be listed ' - 'first in MIDDLEWARE).' - ), -) -setting_django_append_slash = namespace.add_setting( - global_name='APPEND_SLASH', default=settings.APPEND_SLASH, - help_text=_( - 'When set to True, if the request URL does not match any of the ' - 'patterns in the URLconf and it doesn\'t end in a slash, an HTTP ' - 'redirect is issued to the same URL with a slash appended. Note ' - 'that the redirect may cause any data submitted in a POST request ' - 'to be lost. The APPEND_SLASH setting is only used if ' - 'CommonMiddleware is installed (see Middleware). See also ' - 'PREPEND_WWW.' - ) -) -setting_django_auth_password_validators = namespace.add_setting( - global_name='AUTH_PASSWORD_VALIDATORS', - default=settings.AUTH_PASSWORD_VALIDATORS, - help_text=_( - 'The list of validators that are used to check the strength of ' - 'user\'s passwords.' - ) -) -setting_django_databases = namespace.add_setting( - global_name='DATABASES', default=settings.DATABASES, - help_text=_( - 'A dictionary containing the settings for all databases to be used ' - 'with Django. It is a nested dictionary whose contents map a ' - 'database alias to a dictionary containing the options for an ' - 'individual database. The DATABASES setting must configure a ' - 'default database; any number of additional databases may also ' - 'be specified.' - ), -) -setting_django_data_upload_max_memory_size = namespace.add_setting( - global_name='DATA_UPLOAD_MAX_MEMORY_SIZE', - default=settings.DATA_UPLOAD_MAX_MEMORY_SIZE, - help_text=_( - 'Default: 2621440 (i.e. 2.5 MB). The maximum size in bytes that a ' - 'request body may be before a SuspiciousOperation ' - '(RequestDataTooBig) is raised. The check is done when accessing ' - 'request.body or request.POST and is calculated against the total ' - 'request size excluding any file upload data. You can set this to ' - 'None to disable the check. Applications that are expected to ' - 'receive unusually large form posts should tune this setting. The ' - 'amount of request data is correlated to the amount of memory ' - 'needed to process the request and populate the GET and POST ' - 'dictionaries. Large requests could be used as a ' - 'denial-of-service attack vector if left unchecked. Since web ' - 'servers don\'t typically perform deep request inspection, it\'s ' - 'not possible to perform a similar check at that level. See also ' - 'FILE_UPLOAD_MAX_MEMORY_SIZE.' - ), -) -setting_django_default_from_email = namespace.add_setting( - global_name='DEFAULT_FROM_EMAIL', - default=settings.DEFAULT_FROM_EMAIL, - help_text=_( - 'Default: \'webmaster@localhost\' ' - 'Default email address to use for various automated correspondence ' - 'from the site manager(s). This doesn\'t include error messages sent ' - 'to ADMINS and MANAGERS; for that, see SERVER_EMAIL.' - ), -) -setting_django_disallowed_user_agents = namespace.add_setting( - global_name='DISALLOWED_USER_AGENTS', - default=settings.DISALLOWED_USER_AGENTS, - help_text=_( - 'Default: [] (Empty list). List of compiled regular expression ' - 'objects representing User-Agent strings that are not allowed to ' - 'visit any page, systemwide. Use this for bad robots/crawlers. ' - 'This is only used if CommonMiddleware is installed ' - '(see Middleware).' - ), -) -setting_django_email_backend = namespace.add_setting( - global_name='EMAIL_BACKEND', - default=settings.EMAIL_BACKEND, - help_text=_( - 'Default: \'django.core.mail.backends.smtp.EmailBackend\'. The ' - 'backend to use for sending emails.' - ), -) -setting_django_email_host = namespace.add_setting( - global_name='EMAIL_HOST', - default=settings.EMAIL_HOST, - help_text=_( - 'Default: \'localhost\'. The host to use for sending email.' - ), -) -setting_django_email_host_password = namespace.add_setting( - global_name='EMAIL_HOST_PASSWORD', - default=settings.EMAIL_HOST_PASSWORD, - help_text=_( - 'Default: \'\' (Empty string). Password to use for the SMTP ' - 'server defined in EMAIL_HOST. This setting is used in ' - 'conjunction with EMAIL_HOST_USER when authenticating to the ' - 'SMTP server. If either of these settings is empty, ' - 'Django won\'t attempt authentication.' - ), -) -setting_django_email_host_user = namespace.add_setting( - global_name='EMAIL_HOST_USER', - default=settings.EMAIL_HOST_USER, - help_text=_( - 'Default: \'\' (Empty string). Username to use for the SMTP ' - 'server defined in EMAIL_HOST. If empty, Django won\'t attempt ' - 'authentication.' - ), -) -setting_django_email_port = namespace.add_setting( - global_name='EMAIL_PORT', - default=settings.EMAIL_PORT, - help_text=_( - 'Default: 25. Port to use for the SMTP server defined in EMAIL_HOST.' - ), -) -setting_django_email_timeout = namespace.add_setting( - global_name='EMAIL_TIMEOUT', - default=settings.EMAIL_TIMEOUT, - help_text=_( - 'Default: None. Specifies a timeout in seconds for blocking ' - 'operations like the connection attempt.' - ), -) -setting_django_email_user_tls = namespace.add_setting( - global_name='EMAIL_USE_TLS', - default=settings.EMAIL_USE_TLS, - help_text=_( - 'Default: False. Whether to use a TLS (secure) connection when ' - 'talking to the SMTP server. This is used for explicit TLS ' - 'connections, generally on port 587. If you are experiencing ' - 'hanging connections, see the implicit TLS setting EMAIL_USE_SSL.' - ), -) -setting_django_email_user_ssl = namespace.add_setting( - global_name='EMAIL_USE_SSL', - default=settings.EMAIL_USE_SSL, - help_text=_( - 'Default: False. Whether to use an implicit TLS (secure) connection ' - 'when talking to the SMTP server. In most email documentation this ' - 'type of TLS connection is referred to as SSL. It is generally used ' - 'on port 465. If you are experiencing problems, see the explicit ' - 'TLS setting EMAIL_USE_TLS. Note that EMAIL_USE_TLS/EMAIL_USE_SSL ' - 'are mutually exclusive, so only set one of those settings to True.' - ), -) -setting_django_file_upload_max_memory_size = namespace.add_setting( - global_name='FILE_UPLOAD_MAX_MEMORY_SIZE', - default=settings.FILE_UPLOAD_MAX_MEMORY_SIZE, - help_text=_( - 'Default: 2621440 (i.e. 2.5 MB). The maximum size (in bytes) ' - 'that an upload will be before it gets streamed to the file ' - 'system. See Managing files for details. See also ' - 'DATA_UPLOAD_MAX_MEMORY_SIZE.' - ), -) -setting_django_login_url = namespace.add_setting( - global_name='LOGIN_URL', - default=settings.LOGIN_URL, - help_text=_( - 'Default: \'/accounts/login/\' The URL where requests are ' - 'redirected for login, especially when using the login_required() ' - 'decorator. This setting also accepts named URL patterns which ' - 'can be used to reduce configuration duplication since you ' - 'don\'t have to define the URL in two places (settings ' - 'and URLconf).' - ) -) -setting_django_login_redirect_url = namespace.add_setting( - global_name='LOGIN_REDIRECT_URL', - default=settings.LOGIN_REDIRECT_URL, - help_text=_( - 'Default: \'/accounts/profile/\' The URL where requests are ' - 'redirected after login when the contrib.auth.login view gets no ' - 'next parameter. This is used by the login_required() decorator, ' - 'for example. This setting also accepts named URL patterns which ' - 'can be used to reduce configuration duplication since you don\'t ' - 'have to define the URL in two places (settings and URLconf).' - ), -) -setting_django_logout_redirect_url = namespace.add_setting( - global_name='LOGOUT_REDIRECT_URL', - default=settings.LOGOUT_REDIRECT_URL, - help_text=_( - 'Default: None. The URL where requests are redirected after a user ' - 'logs out using LogoutView (if the view doesn\'t get a next_page ' - 'argument). If None, no redirect will be performed and the logout ' - 'view will be rendered. This setting also accepts named URL ' - 'patterns which can be used to reduce configuration duplication ' - 'since you don\'t have to define the URL in two places (settings ' - 'and URLconf).' - ) -) -setting_django_internal_ips = namespace.add_setting( - global_name='INTERNAL_IPS', - default=settings.INTERNAL_IPS, - help_text=_( - 'A list of IP addresses, as strings, that: Allow the debug() ' - 'context processor to add some variables to the template context. ' - 'Can use the admindocs bookmarklets even if not logged in as a ' - 'staff user. Are marked as "internal" (as opposed to "EXTERNAL") ' - 'in AdminEmailHandler emails.' - ), -) -setting_django_languages = namespace.add_setting( - global_name='LANGUAGES', - default=settings.LANGUAGES, - help_text=_( - 'A list of all available languages. The list is a list of ' - 'two-tuples in the format (language code, language name) ' - 'for example, (\'ja\', \'Japanese\'). This specifies which ' - 'languages are available for language selection. ' - 'Generally, the default value should suffice. Only set this ' - 'setting if you want to restrict language selection to a ' - 'subset of the Django-provided languages. ' - ), -) -setting_django_language_code = namespace.add_setting( - global_name='LANGUAGE_CODE', - default=settings.LANGUAGE_CODE, - help_text=_( - 'A string representing the language code for this installation. ' - 'This should be in standard language ID format. For example, U.S. ' - 'English is "en-us". It serves two purposes: If the locale ' - 'middleware isn\'t in use, it decides which translation is served ' - 'to all users. If the locale middleware is active, it provides a ' - 'fallback language in case the user\'s preferred language can\'t ' - 'be determined or is not supported by the website. It also provides ' - 'the fallback translation when a translation for a given literal ' - 'doesn\'t exist for the user\'s preferred language.' - ), -) -setting_django_static_url = namespace.add_setting( - global_name='STATIC_URL', - default=settings.STATIC_URL, - help_text=_( - 'URL to use when referring to static files located in STATIC_ROOT. ' - 'Example: "/static/" or "http://static.example.com/" ' - 'If not None, this will be used as the base path for asset ' - 'definitions (the Media class) and the staticfiles app. ' - 'It must end in a slash if set to a non-empty value.' - ), -) -setting_django_staticfiles_storage = namespace.add_setting( - global_name='STATICFILES_STORAGE', - default=settings.STATICFILES_STORAGE, - help_text=_( - 'The file storage engine to use when collecting static files with ' - 'the collectstatic management command. A ready-to-use instance of ' - 'the storage backend defined in this setting can be found at ' - 'django.contrib.staticfiles.storage.staticfiles_storage.' - ), -) -setting_django_time_zone = namespace.add_setting( - global_name='TIME_ZONE', - default=settings.TIME_ZONE, - help_text=_( - 'A string representing the time zone for this installation. ' - 'Note that this isn\'t necessarily the time zone of the server. ' - 'For example, one server may serve multiple Django-powered sites, ' - 'each with a separate time zone setting.' - ), -) -setting_django_wsgi_application = namespace.add_setting( - global_name='WSGI_APPLICATION', - default=settings.WSGI_APPLICATION, - help_text=_( - 'The full Python path of the WSGI application object that Django\'s ' - 'built-in servers (e.g. runserver) will use. The django-admin ' - 'startproject management command will create a simple wsgi.py ' - 'file with an application callable in it, and point this setting ' - 'to that application.' - ), -) - -namespace = Namespace(label=_('Celery'), name='celery') - -setting_celery_broker_url = namespace.add_setting( - global_name='BROKER_URL', default=settings.BROKER_URL, - help_text=_( - 'Default: "amqp://". Default broker URL. This must be a URL in ' - 'the form of: transport://userid:password@hostname:port/virtual_host ' - 'Only the scheme part (transport://) is required, the rest is ' - 'optional, and defaults to the specific transports default values.' - ), -) -setting_celery_result_backend = namespace.add_setting( - global_name='CELERY_RESULT_BACKEND', - default=settings.CELERY_RESULT_BACKEND, - help_text=_( - 'Default: No result backend enabled by default. The backend used ' - 'to store task results (tombstones). Refer to ' - 'http://docs.celeryproject.org/en/v4.1.0/userguide/configuration.' - 'html#result-backend' - ) + default={'location': os.path.join(settings.MEDIA_ROOT, 'shared_files')} ) diff --git a/mayan/apps/common/storages.py b/mayan/apps/common/storages.py index ded073d4e8..422b20682a 100644 --- a/mayan/apps/common/storages.py +++ b/mayan/apps/common/storages.py @@ -1,23 +1,11 @@ from __future__ import unicode_literals -import yaml - -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader - -from django.utils.module_loading import import_string +from mayan.apps.storage.utils import get_storage_subclass from .settings import ( setting_shared_storage, setting_shared_storage_arguments ) -storage_sharedupload = import_string( +storage_sharedupload = get_storage_subclass( dotted_path=setting_shared_storage.value -)( - **yaml.load( - stream=setting_shared_storage_arguments.value or '{}', - Loader=SafeLoader - ) -) +)(**setting_shared_storage_arguments.value) diff --git a/mayan/apps/common/templatetags/common_tags.py b/mayan/apps/common/templatetags/common_tags.py index e515001c18..b652b6d989 100644 --- a/mayan/apps/common/templatetags/common_tags.py +++ b/mayan/apps/common/templatetags/common_tags.py @@ -1,7 +1,5 @@ from __future__ import unicode_literals -from json import dumps - from django.template import Context, Library from django.template.defaultfilters import truncatechars from django.template.loader import get_template @@ -12,7 +10,6 @@ from django.utils.translation import ugettext_lazy as _ import mayan from mayan.apps.appearance.settings import setting_max_title_length -from ..classes import Collection from ..literals import MESSAGE_SQLITE_WARNING from ..utils import check_for_sqlite, return_attrib @@ -70,36 +67,23 @@ def common_get_object_verbose_name(obj): return type(obj) -@register.simple_tag -def get_collections(): - return Collection.get_all() - - @register.filter -def get_encoded_parameter(item, parameters_dict): - result = {} - for attrib_name, attrib in parameters_dict.items(): - result[attrib_name] = return_attrib(item, attrib) - return dumps(result) - - -@register.filter -def get_type(value): +def common_get_type(value): return force_text(type(value)) @register.filter -def object_property(value, arg): +def common_object_property(value, arg): return return_attrib(value, arg) @register.simple_tag -def project_information(attribute_name): +def common_project_information(attribute_name): return getattr(mayan, attribute_name) @register.simple_tag(takes_context=True) -def render_subtemplate(context, template_name, template_context): +def common_render_subtemplate(context, template_name, template_context): """ Renders the specified template with the mixed parent and subtemplate contexts diff --git a/mayan/apps/common/tests/__init__.py b/mayan/apps/common/tests/__init__.py index 94b5479a25..e69de29bb2 100644 --- a/mayan/apps/common/tests/__init__.py +++ b/mayan/apps/common/tests/__init__.py @@ -1,2 +0,0 @@ -from .base import BaseTestCase, GenericViewTestCase # NOQA -from .decorators import skip_file_descriptor_check # NOQA diff --git a/mayan/apps/common/tests/base.py b/mayan/apps/common/tests/base.py index 1a49c23867..d92d2168ec 100644 --- a/mayan/apps/common/tests/base.py +++ b/mayan/apps/common/tests/base.py @@ -5,8 +5,11 @@ from django.test import TestCase from django_downloadview import assert_download_response from mayan.apps.acls.tests.mixins import ACLTestCaseMixin +from mayan.apps.converter.tests.mixins import LayerTestCaseMixin from mayan.apps.permissions.tests.mixins import PermissionTestCaseMixin from mayan.apps.smart_settings.tests.mixins import SmartSettingsTestCaseMixin + + from mayan.apps.user_management.tests.mixins import UserTestMixin from .mixins import ( @@ -19,7 +22,7 @@ from .mixins import ( class BaseTestCase( - SilenceLoggerTestCaseMixin, ConnectionsCheckTestCaseMixin, + LayerTestCaseMixin, SilenceLoggerTestCaseMixin, ConnectionsCheckTestCaseMixin, RandomPrimaryKeyModelMonkeyPatchMixin, ACLTestCaseMixin, ModelTestCaseMixin, OpenFileCheckTestCaseMixin, PermissionTestCaseMixin, SmartSettingsTestCaseMixin, TempfileCheckTestCasekMixin, UserTestMixin, diff --git a/mayan/apps/common/tests/http_adapters.py b/mayan/apps/common/tests/http_adapters.py new file mode 100644 index 0000000000..59b38928b6 --- /dev/null +++ b/mayan/apps/common/tests/http_adapters.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, unicode_literals + +import requests + +from django.utils.six import BytesIO + + +class TestClientAdapter(requests.adapters.BaseAdapter): + def __init__(self, test_case): + self.test_case = test_case + + def build_response(self, request, django_response): + """ + Build a requests response from a Django response + """ + response = requests.Response() + + # Fallback to None if there's no status_code, for whatever reason. + response.status_code = getattr( + django_response, 'status_code', None + ) + + # Make headers case-insensitive. + response.headers = requests.structures.CaseInsensitiveDict( + getattr(django_response, 'headers', {}) + ) + + # Set encoding. + response.encoding = requests.utils.get_encoding_from_headers( + headers=response.headers + ) + response.raw = BytesIO(django_response.getvalue()) + + response.reason = django_response.reason_phrase + + if isinstance(request.url, bytes): + response.url = request.url.decode('utf-8') + else: + response.url = request.url + + # Add new cookies from the server. + requests.cookies.extract_cookies_to_jar( + jar=response.cookies, request=request, + response=django_response + ) + + # Give the Response some context. + response.request = django_response + response.connection = self + + return response + + def close(self): + """ + No connection needs to be closed, but the method must exists + or a NotImplementedError is raised. + """ + + def send( + self, request=None, stream=False, timeout=None, verify=True, + cert=None, proxies=None + ): + """Craft a Django request based on the attribute of + requests' request object. + """ + return self.build_response( + request=request, django_response=self.test_case.generic( + data=request.body, + headers=request.headers, + method=request.method, + viewname=self.test_case.test_view_name, + ) + ) diff --git a/mayan/apps/common/tests/literals.py b/mayan/apps/common/tests/literals.py index 3cfb7ca5fd..0f96e2cf0a 100644 --- a/mayan/apps/common/tests/literals.py +++ b/mayan/apps/common/tests/literals.py @@ -43,3 +43,6 @@ TEST_TAR_GZ_FILE_PATH = os.path.join( TEST_ZIP_FILE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'common', 'tests', 'contrib', TEST_ZIP_FILE ) + +TEST_SERVER_HOST = 'testserver' +TEST_SERVER_SCHEME = 'http' diff --git a/mayan/apps/common/tests/mixins.py b/mayan/apps/common/tests/mixins.py index 83013acaf8..c6b2eb5527 100644 --- a/mayan/apps/common/tests/mixins.py +++ b/mayan/apps/common/tests/mixins.py @@ -21,9 +21,12 @@ from django.urls import clear_url_caches, reverse from django.utils.encoding import force_bytes from django.utils.six import PY3 +from mayan.apps.acls.classes import ModelPermission from mayan.apps.storage.settings import setting_temporary_directory -from .literals import TEST_VIEW_NAME, TEST_VIEW_URL +from .literals import ( + TEST_SERVER_HOST, TEST_SERVER_SCHEME, TEST_VIEW_NAME, TEST_VIEW_URL +) if getattr(settings, 'COMMON_TEST_FILE_HANDLES', False): @@ -35,6 +38,7 @@ class ClientMethodsTestCaseMixin(object): data = kwargs.pop('data', {}) follow = kwargs.pop('follow', False) query = kwargs.pop('query', {}) + headers = kwargs.pop('headers', {}) if viewname: path = reverse(viewname=viewname, *args, **kwargs) @@ -42,7 +46,9 @@ class ClientMethodsTestCaseMixin(object): path = furl(url=path) path.args.update(query) - return {'follow': follow, 'data': data, 'path': path.tostr()} + result = {'follow': follow, 'data': data, 'path': path.tostr()} + result.update(headers) + return result def delete(self, viewname=None, path=None, *args, **kwargs): return self.client.delete( @@ -51,6 +57,13 @@ class ClientMethodsTestCaseMixin(object): ) ) + def generic(self, method, viewname=None, path=None, *args, **kwargs): + return self.client.generic( + method=method, **self._build_verb_kwargs( + path=path, viewname=viewname, *args, **kwargs + ) + ) + def get(self, viewname=None, path=None, *args, **kwargs): return self.client.get( **self._build_verb_kwargs( @@ -128,6 +141,22 @@ class ContentTypeCheckTestCaseMixin(object): self.client = CustomClient() +class EnvironmentTestCaseMixin(object): + def setUp(self): + super(EnvironmentTestCaseMixin, self).setUp() + self._test_environment_variables = [] + + def tearDown(self): + for name in self._test_environment_variables: + os.environ.pop(name) + + super(EnvironmentTestCaseMixin, self).tearDown() + + def _set_environment_variable(self, name, value): + self._test_environment_variables.append(name) + os.environ[name] = value + + class ModelTestCaseMixin(object): def _model_instance_to_dictionary(self, instance): return instance._meta.model._default_manager.filter( @@ -311,29 +340,36 @@ class TempfileCheckTestCasekMixin(object): class TestModelTestMixin(object): _test_models = [] - def _create_test_model(self, fields=None, model_name='TestModel', options=None): + def tearDown(self): + # Delete the test models' content type entries and deregister the + # permissions, this avoids their Content Type from being looked up + # in subsequent tests where they don't exists due to the database + # transaction rollback. + for model in self._test_models: + content_type = ContentType.objects.get_for_model(model=model) + if content_type.pk: + content_type.delete() + ModelPermission.deregister(model=model) - if connection.vendor == 'mysql': - self.skipTest( - reason='MySQL doesn\'t support schema changes inside an ' - 'atomic block.' - ) + super(TestModelTestMixin, self).tearDown() - # Obtain the app_config and app_label from the test's module path - app_config = apps.get_containing_app_config( - object_name=self.__class__.__module__ + def _get_test_model_meta(self): + self.db_table = '{}_{}'.format( + self.app_config.label, self.model_name.lower() ) - app_label = app_config.label - class Meta: - pass + class Meta(object): + app_label = self.app_config.label + db_table = self.db_table + verbose_name = self.model_name - setattr(Meta, 'app_label', app_label) - - if options is not None: - for key, value in options.items(): + if self.options: + for key, value in self.options.items(): setattr(Meta, key, value) + return Meta + + def _get_test_model_save_method(self): def save(instance, *args, **kwargs): # Custom .save() method to use random primary key values. if instance.pk: @@ -345,9 +381,29 @@ class TestModelTestMixin(object): instance.id = instance.pk return instance.save_base(force_insert=True) + return save + + def _create_test_model( + self, base_class=models.Model, fields=None, model_name=None, + options=None + ): + self.model_name = model_name or 'TestModel' + self.options = options + # Obtain the app_config and app_label from the test's module path + self.app_config = apps.get_containing_app_config( + object_name=self.__class__.__module__ + ) + + if connection.vendor == 'mysql': + self.skipTest( + reason='MySQL doesn\'t support schema changes inside an ' + 'atomic block.' + ) attrs = { - '__module__': self.__class__.__module__, 'save': save, 'Meta': Meta + '__module__': self.__class__.__module__, + 'save': self._get_test_model_save_method(), + 'Meta': self._get_test_model_meta(), } if fields: @@ -356,33 +412,64 @@ class TestModelTestMixin(object): # Clear previous model registration before re-registering it again to # avoid conflict with test models with the same name, in the same app # but from another test module. - apps.all_models[app_label].pop(model_name.lower(), None) + apps.all_models[self.app_config.label].pop(self.model_name.lower(), None) if PY3: - TestModel = type( - model_name, (models.Model,), attrs + model = type( + self.model_name, (base_class,), attrs ) else: - TestModel = type( - force_bytes(model_name), (models.Model,), attrs + model = type( + force_bytes(self.model_name), (base_class,), attrs ) - setattr(self, model_name, TestModel) - self._test_models.append(TestModel) - - with connection.schema_editor() as schema_editor: - schema_editor.create_model(model=TestModel) + if not model._meta.proxy: + with connection.schema_editor() as schema_editor: + schema_editor.create_model(model=model) + self._test_models.append(model) ContentType.objects.clear_cache() - def _create_test_object(self, model_name='TestModel', **kwargs): - TestModel = getattr(self, model_name) + return model - self.test_object = TestModel.objects.create(**kwargs) + +class TestServerTestCaseMixin(object): + def setUp(self): + super(TestServerTestCaseMixin, self).setUp() + self.testserver_prefix = self.get_testserver_prefix() + self.testserver_url = self.get_testserver_url() + self.test_view_request = None + + def _test_view_factory(self, test_object=None): + def test_view(request): + self.test_view_request = request + return HttpResponse() + + return test_view + + def get_testserver_prefix(self): + return furl( + scheme=TEST_SERVER_SCHEME, host=TEST_SERVER_HOST, + ).tostr() + + def get_testserver_url(self): + return furl( + scheme=TEST_SERVER_SCHEME, host=TEST_SERVER_HOST, + path=self.test_view_url + ).tostr() class TestViewTestCaseMixin(object): + auto_add_test_view = False has_test_view = False + test_view_object = None + test_view_name = TEST_VIEW_NAME + test_view_url = TEST_VIEW_URL + + def setUp(self): + super(TestViewTestCaseMixin, self).setUp() + if self.auto_add_test_view: + self.add_test_view(test_object=self.test_view_object) def tearDown(self): urlconf = importlib.import_module(settings.ROOT_URLCONF) @@ -392,9 +479,7 @@ class TestViewTestCaseMixin(object): urlconf.urlpatterns.pop(0) super(TestViewTestCaseMixin, self).tearDown() - def add_test_view(self, test_object): - urlconf = importlib.import_module(settings.ROOT_URLCONF) - + def _test_view_factory(self, test_object=None): def test_view(request): template = Template('{{ object }}') context = Context( @@ -402,12 +487,23 @@ class TestViewTestCaseMixin(object): ) return HttpResponse(template.render(context=context)) - urlconf.urlpatterns.insert(0, url(TEST_VIEW_URL, test_view, name=TEST_VIEW_NAME)) + return test_view + + def add_test_view(self, test_object=None): + urlconf = importlib.import_module(settings.ROOT_URLCONF) + + urlconf.urlpatterns.insert( + 0, url( + regex=self.test_view_url, view=self._test_view_factory( + test_object=test_object + ), name=self.test_view_name + ) + ) clear_url_caches() self.has_test_view = True def get_test_view(self): - response = self.get(TEST_VIEW_NAME) + response = self.get(viewname=self.test_view_name) if isinstance(response.context, ContextList): # template widget rendering causes test client response to be # ContextList rather than RequestContext. Typecast to dictionary @@ -416,5 +512,6 @@ class TestViewTestCaseMixin(object): result.update({'request': response.wsgi_request}) return Context(result) else: - response.context.update({'request': response.wsgi_request}) - return Context(response.context) + result = response.context or {} + result.update({'request': response.wsgi_request}) + return Context(result) diff --git a/mayan/apps/common/tests/mocks.py b/mayan/apps/common/tests/mocks.py new file mode 100644 index 0000000000..d2f5c356c9 --- /dev/null +++ b/mayan/apps/common/tests/mocks.py @@ -0,0 +1,17 @@ +from __future__ import unicode_literals + +import requests + +from .http_adapters import TestClientAdapter + + +def request_method_factory(test_case): + def request(method, url, **kwargs): + with requests.sessions.Session() as session: + session.mount( + prefix=test_case.testserver_prefix, + adapter=TestClientAdapter(test_case=test_case) + ) + return session.request(method=method, url=url, **kwargs) + + return request diff --git a/mayan/apps/common/tests/test_api.py b/mayan/apps/common/tests/test_api.py index 8484f565b4..8c5ae7a0aa 100644 --- a/mayan/apps/common/tests/test_api.py +++ b/mayan/apps/common/tests/test_api.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.test import override_settings -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..classes import Template diff --git a/mayan/apps/common/tests/test_compressed_files.py b/mayan/apps/common/tests/test_compressed_files.py index cc78d7f7ac..18d2071a17 100644 --- a/mayan/apps/common/tests/test_compressed_files.py +++ b/mayan/apps/common/tests/test_compressed_files.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..compressed_files import Archive, TarArchive, ZipArchive diff --git a/mayan/apps/common/tests/test_setting_migrations.py b/mayan/apps/common/tests/test_setting_migrations.py new file mode 100644 index 0000000000..07d73ecbbd --- /dev/null +++ b/mayan/apps/common/tests/test_setting_migrations.py @@ -0,0 +1,35 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.utils.encoding import force_bytes + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.storage.utils import NamedTemporaryFile + +from ..settings import setting_shared_storage_arguments + + +class CommonSettingMigrationTestCase(EnvironmentTestCaseMixin, BaseTestCase): + def test_common_shared_storage_arguments_0001_migration(self): + + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'COMMON_SHARED_STORAGE_ARGUMENTS', + '"{}"'.format(Setting.serialize_value(value=test_value)) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_shared_storage_arguments.value, + test_value + ) diff --git a/mayan/apps/common/urls.py b/mayan/apps/common/urls.py index 13fd7e3fac..26d1c317e4 100644 --- a/mayan/apps/common/urls.py +++ b/mayan/apps/common/urls.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.conf.urls import url -from django.views.i18n import JavaScriptCatalog, set_language +from django.views.i18n import JavaScriptCatalog from .api_views import ( APIContentTypeList, APITemplateDetailView, APITemplateListView @@ -10,30 +10,10 @@ from .views import ( AboutView, CurrentUserLocaleProfileDetailsView, CurrentUserLocaleProfileEditView, FaviconRedirectView, HomeView, LicenseView, ObjectErrorLogEntryListClearView, ObjectErrorLogEntryListView, - RootView, SetupListView, ToolsListView, multi_object_action_view + RootView, SetupListView, ToolsListView ) -urlpatterns = [ - url(regex=r'^$', view=RootView.as_view(), name='root'), - url(regex=r'^home/$', view=HomeView.as_view(), name='home'), - url(regex=r'^about/$', view=AboutView.as_view(), name='about_view'), - url(regex=r'^license/$', view=LicenseView.as_view(), name='license_view'), - url( - regex=r'^object/multiple/action/$', view=multi_object_action_view, - name='multi_object_action_view' - ), - url(regex=r'^setup/$', view=SetupListView.as_view(), name='setup_list'), - url(regex=r'^tools/$', view=ToolsListView.as_view(), name='tools_list'), - url( - regex=r'^user/locale/$', - view=CurrentUserLocaleProfileDetailsView.as_view(), - name='current_user_locale_profile_details' - ), - url( - regex=r'^user/locale/edit/$', - view=CurrentUserLocaleProfileEditView.as_view(), - name='current_user_locale_profile_edit' - ), +urlpatterns_error_logs = [ url( regex=r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/errors/$', view=ObjectErrorLogEntryListView.as_view(), name='object_error_list' @@ -45,7 +25,20 @@ urlpatterns = [ ), ] -urlpatterns += [ +urlpatterns_user_locale = [ + url( + regex=r'^user/locale/$', + view=CurrentUserLocaleProfileDetailsView.as_view(), + name='current_user_locale_profile_details' + ), + url( + regex=r'^user/locale/edit/$', + view=CurrentUserLocaleProfileEditView.as_view(), + name='current_user_locale_profile_edit' + ), +] + +urlpatterns_misc = [ url( regex=r'^favicon\.ico$', view=FaviconRedirectView.as_view() ), @@ -53,11 +46,21 @@ urlpatterns += [ regex=r'^jsi18n/(?P\S+?)/$', view=JavaScriptCatalog.as_view(), name='javascript_catalog' ), - url( - regex=r'^set_language/$', view=set_language, name='set_language' - ), ] +urlpatterns = [ + url(regex=r'^$', view=RootView.as_view(), name='root'), + url(regex=r'^home/$', view=HomeView.as_view(), name='home'), + url(regex=r'^about/$', view=AboutView.as_view(), name='about_view'), + url(regex=r'^license/$', view=LicenseView.as_view(), name='license_view'), + url(regex=r'^setup/$', view=SetupListView.as_view(), name='setup_list'), + url(regex=r'^tools/$', view=ToolsListView.as_view(), name='tools_list'), +] + +urlpatterns.extend(urlpatterns_error_logs) +urlpatterns.extend(urlpatterns_misc) +urlpatterns.extend(urlpatterns_user_locale) + api_urls = [ url( regex=r'^content_types/$', view=APIContentTypeList.as_view(), diff --git a/mayan/apps/common/utils.py b/mayan/apps/common/utils.py index 2d76f17d43..85447e2813 100644 --- a/mayan/apps/common/utils.py +++ b/mayan/apps/common/utils.py @@ -21,14 +21,6 @@ def check_for_sqlite(): return settings.DATABASES['default']['ENGINE'] == DJANGO_SQLITE_BACKEND and settings.DEBUG is False -def encapsulate(function): - # Workaround Django ticket 15791 - # Changeset 16045 - # http://stackoverflow.com/questions/6861601/ - # cannot-resolve-callable-context-variable/6955045#6955045 - return lambda: function - - def get_related_field(model, related_field_name): try: local_field_name, remaining_field_path = related_field_name.split( diff --git a/mayan/apps/common/validators.py b/mayan/apps/common/validators.py index 84ff982615..97a4db3326 100644 --- a/mayan/apps/common/validators.py +++ b/mayan/apps/common/validators.py @@ -1,9 +1,18 @@ from __future__ import unicode_literals +import json import re +import yaml +try: + from yaml import CSafeLoader as SafeLoader +except ImportError: + from yaml import SafeLoader + +from django.core.exceptions import ValidationError from django.core.validators import RegexValidator from django.utils import six +from django.utils.deconstruct import deconstructible from django.utils.functional import SimpleLazyObject from django.utils.translation import ugettext_lazy as _ @@ -23,6 +32,54 @@ def _lazy_re_compile(regex, flags=0): return SimpleLazyObject(_compile) +@deconstructible +class JSONValidator(object): + """ + Validates that the input is JSON compliant. + """ + def __call__(self, value): + value = value.strip() + try: + json.loads(stream=value) + except ValueError: + raise ValidationError( + _('Enter a valid JSON value.'), + code='invalid' + ) + + def __eq__(self, other): + return ( + isinstance(other, JSONValidator) + ) + + def __ne__(self, other): + return not (self == other) + + +@deconstructible +class YAMLValidator(object): + """ + Validates that the input is YAML compliant. + """ + def __call__(self, value): + value = value.strip() + try: + yaml.load(stream=value, Loader=SafeLoader) + except yaml.error.YAMLError: + raise ValidationError( + _('Enter a valid YAML value.'), + code='invalid' + ) + + def __eq__(self, other): + return ( + isinstance(other, YAMLValidator) + ) + + def __ne__(self, other): + return not (self == other) + + internal_name_re = _lazy_re_compile(r'^[a-zA-Z0-9_]+\Z') validate_internal_name = RegexValidator( internal_name_re, _( diff --git a/mayan/apps/common/views.py b/mayan/apps/common/views.py index 426109fe1b..b78a0483c8 100644 --- a/mayan/apps/common/views.py +++ b/mayan/apps/common/views.py @@ -1,15 +1,11 @@ from __future__ import absolute_import, unicode_literals -from json import dumps - from django.conf import settings from django.contrib import messages from django.contrib.contenttypes.models import ContentType -from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 -from django.urls import reverse, reverse_lazy +from django.urls import reverse_lazy from django.utils import timezone, translation -from django.utils.http import urlencode from django.utils.translation import ugettext_lazy as _ from django.views.generic import RedirectView @@ -21,7 +17,7 @@ from .forms import ( from .generics import ( ConfirmView, SingleObjectEditView, SingleObjectListView, SimpleView ) -from .icons import icon_setup +from .icons import icon_object_errors, icon_setup from .menus import menu_tools, menu_setup from .permissions_runtime import permission_error_log_view from .settings import setting_home_view @@ -155,6 +151,14 @@ class ObjectErrorLogEntryListView(SingleObjectListView): {'name': _('Result'), 'attribute': 'result'}, ), 'hide_object': True, + 'no_results_icon': icon_object_errors, + 'no_results_text': _( + 'This view displays the error log of different object. ' + 'An empty list is a good thing.' + ), + 'no_results_title': _( + 'There are no error log entries' + ), 'object': self.get_object(), 'title': _('Error log entries for: %s' % self.get_object()), } @@ -212,67 +216,3 @@ class ToolsListView(SimpleView): 'These modules are used to do system maintenance.' ) } - - -def multi_object_action_view(request): - """ - Proxy view called first when using a multi object action, which - then redirects to the appropriate specialized view - """ - next = request.POST.get( - 'next', request.GET.get( - 'next', request.META.get( - 'HTTP_REFERER', reverse(setting_home_view.value) - ) - ) - ) - - action = request.GET.get('action', None) - id_list = ','.join( - [key[3:] for key in request.GET.keys() if key.startswith('pk_')] - ) - items_property_list = [ - (key[11:]) for key in request.GET.keys() if key.startswith('properties_') - ] - - if not action: - messages.error( - message=_('No action selected.'), request=request - ) - return HttpResponseRedirect( - redirect_to=request.META.get( - 'HTTP_REFERER', reverse(setting_home_view.value) - ) - ) - - if not id_list and not items_property_list: - messages.error( - message=_('Must select at least one item.'), - request=request - ) - return HttpResponseRedirect( - redirect_to=request.META.get( - 'HTTP_REFERER', reverse(setting_home_view.value) - ) - ) - - # Separate redirects to keep backwards compatibility with older - # functions that don't expect a properties_list parameter - if items_property_list: - return HttpResponseRedirect( - redirect_to='%s?%s' % ( - action, - urlencode( - { - 'items_property_list': dumps(items_property_list), - 'next': next - } - ) - ) - ) - else: - return HttpResponseRedirect( - redirect_to='%s?%s' % ( - action, urlencode({'id_list': id_list, 'next': next}) - ) - ) diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index c13c7239e0..b8921a96c3 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -3,13 +3,14 @@ from __future__ import unicode_literals from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ +from mayan.apps.acls.classes import ModelPermission from mayan.apps.common.apps import MayanAppConfig from mayan.apps.common.menus import menu_object, menu_secondary from mayan.apps.navigation.classes import SourceColumn from .links import ( - link_transformation_create, link_transformation_delete, - link_transformation_edit + link_transformation_delete, link_transformation_edit, + link_transformation_select ) @@ -23,26 +24,31 @@ class ConverterApp(MayanAppConfig): def ready(self): super(ConverterApp, self).ready() - Transformation = self.get_model(model_name='Transformation') + LayerTransformation = self.get_model(model_name='LayerTransformation') - SourceColumn(attribute='order', source=Transformation) + ModelPermission.register_inheritance( + model=LayerTransformation, + related='object_layer__content_object', + ) + + SourceColumn(attribute='order', source=LayerTransformation) SourceColumn( - source=Transformation, label=_('Transformation'), + source=LayerTransformation, label=_('Transformation'), func=lambda context: force_text(context['object']) ) SourceColumn( - attribute='arguments', source=Transformation + attribute='arguments', source=LayerTransformation ) menu_object.bind_links( links=(link_transformation_edit, link_transformation_delete), - sources=(Transformation,) + sources=(LayerTransformation,) ) menu_secondary.bind_links( - links=(link_transformation_create,), sources=(Transformation,) + links=(link_transformation_select,), sources=(LayerTransformation,) ) menu_secondary.bind_links( - links=(link_transformation_create,), + links=(link_transformation_select,), sources=( 'converter:transformation_create', 'converter:transformation_list' diff --git a/mayan/apps/converter/backends/python.py b/mayan/apps/converter/backends/python.py index 672997f879..700ad2a381 100644 --- a/mayan/apps/converter/backends/python.py +++ b/mayan/apps/converter/backends/python.py @@ -7,11 +7,6 @@ import shutil from PIL import Image import PyPDF2 import sh -import yaml -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ @@ -20,16 +15,14 @@ from mayan.apps.storage.utils import NamedTemporaryFile from ..classes import ConverterBase from ..exceptions import PageCountError -from ..settings import setting_graphics_backend_config +from ..settings import setting_graphics_backend_arguments from ..literals import ( DEFAULT_PDFTOPPM_DPI, DEFAULT_PDFTOPPM_FORMAT, DEFAULT_PDFTOPPM_PATH, DEFAULT_PDFINFO_PATH ) -pdftoppm_path = yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader -).get( +pdftoppm_path = setting_graphics_backend_arguments.value.get( 'pdftoppm_path', DEFAULT_PDFTOPPM_PATH ) @@ -39,26 +32,20 @@ except sh.CommandNotFound: pdftoppm = None else: pdftoppm_format = '-{}'.format( - yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader - ).get( + setting_graphics_backend_arguments.value.get( 'pdftoppm_format', DEFAULT_PDFTOPPM_FORMAT ) ) pdftoppm_dpi = format( - yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader - ).get( + setting_graphics_backend_arguments.value.get( 'pdftoppm_dpi', DEFAULT_PDFTOPPM_DPI ) ) pdftoppm = pdftoppm.bake(pdftoppm_format, '-r', pdftoppm_dpi) -pdfinfo_path = yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader -).get( +pdfinfo_path = setting_graphics_backend_arguments.value.get( 'pdfinfo_path', DEFAULT_PDFINFO_PATH ) diff --git a/mayan/apps/converter/classes.py b/mayan/apps/converter/classes.py index 517b04ac51..e99b464438 100644 --- a/mayan/apps/converter/classes.py +++ b/mayan/apps/converter/classes.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import copy from io import BytesIO import logging import os @@ -7,16 +8,17 @@ import shutil from PIL import Image import sh -import yaml - -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader +from django.apps import apps +from django.core.exceptions import ImproperlyConfigured +from django.db import transaction +from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ +from mayan.apps.appearance.classes import Icon from mayan.apps.mimetype.api import get_mimetype +from mayan.apps.navigation.classes import Link from mayan.apps.storage.settings import setting_temporary_directory from mayan.apps.storage.utils import ( NamedTemporaryFile, fs_cleanup, mkdtemp @@ -27,16 +29,14 @@ from .literals import ( CONVERTER_OFFICE_FILE_MIMETYPES, DEFAULT_LIBREOFFICE_PATH, DEFAULT_PAGE_NUMBER, DEFAULT_PILLOW_FORMAT ) -from .settings import setting_graphics_backend_config +from .settings import setting_graphics_backend_arguments -logger = logging.getLogger(__name__) -BACKEND_CONFIG = yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader -) -libreoffice_path = BACKEND_CONFIG.get( +libreoffice_path = setting_graphics_backend_arguments.value.get( 'libreoffice_path', DEFAULT_LIBREOFFICE_PATH ) +logger = logging.getLogger(__name__) + class ConverterBase(object): def __init__(self, file_object, mime_type=None): @@ -62,9 +62,7 @@ class ConverterBase(object): pass def get_page(self, output_format=None): - output_format = output_format or yaml.load( - stream=setting_graphics_backend_config.value, Loader=SafeLoader - ).get( + output_format = output_format or setting_graphics_backend_arguments.value.get( 'pillow_format', DEFAULT_PILLOW_FORMAT ) @@ -156,7 +154,7 @@ class ConverterBase(object): logger.error('Exception launching Libre Office; %s', exception) raise finally: - fs_cleanup(libreoffice_home_directory) + fs_cleanup(filename=libreoffice_home_directory) # LibreOffice return a PDF file with the same name as the input # provided but with the .pdf extension. @@ -190,7 +188,7 @@ class ConverterBase(object): shutil.copyfileobj( fsrc=converted_file_object, fdst=temporary_converted_file_object ) - fs_cleanup(converted_file_path) + fs_cleanup(filename=converted_file_path) temporary_converted_file_object.seek(0) return temporary_converted_file_object @@ -212,3 +210,228 @@ class ConverterBase(object): for transformation in transformations: self.image = transformation.execute_on(image=self.image) + + +@python_2_unicode_compatible +class Layer(object): + _registry = {} + + @classmethod + def all(cls): + return cls._registry.values() + + @classmethod + def get(cls, name): + return cls._registry[name] + + @classmethod + def get_by_value(cls, key, value): + for name, layer in cls._registry.items(): + if getattr(layer, key) == value: + return layer + + @classmethod + def invalidate_cache(cls): + for layer in cls.all(): + layer.__dict__.pop('stored_layer', None) + + @classmethod + def update(cls): + for layer in cls.all(): + layer.stored_layer + + def __init__( + self, label, name, order, permissions, default=False, + empty_results_text=None, symbol=None, + ): + """ + access_permission is the permission necessary to view the layer. + exclude_permission is the permission necessary to discard the layer. + """ + self.default = default + self.empty_results_text = empty_results_text + self.label = label + self.name = name + self.order = order + self.permissions = permissions + self.symbol = symbol + + # Check order + layer = self.__class__.get_by_value(key='order', value=self.order) + + if layer: + raise ImproperlyConfigured( + 'Layer "{}" already has order "{}" requested by layer "{}"'.format( + layer.name, order, self.name + ) + ) + + # Check default + if default: + layer = self.__class__.get_by_value(key='default', value=True) + if layer: + raise ImproperlyConfigured( + 'Layer "{}" is already the default layer; "{}"'.format( + layer.name, self.name + ) + ) + + self.__class__._registry[name] = self + + def get_permission(self, name): + return self.permissions.get(name, None) + + def __str__(self): + return force_text(self.label) + + def add_transformation_to(self, obj, transformation_class, arguments=None): + ContentType = apps.get_model( + app_label='contenttypes', model_name='ContentType' + ) + content_type = ContentType.objects.get_for_model(model=obj) + object_layer, created = self.stored_layer.object_layers.get_or_create( + content_type=content_type, object_id=obj.pk + ) + object_layer.transformations.create( + name=transformation_class.name, arguments=arguments + ) + + def copy_transformations(self, source, targets): + """ + Copy transformation from source to all targets + """ + ContentType = apps.get_model( + app_label='contenttypes', model_name='ContentType' + ) + + transformations = self.get_transformations_for(obj=source) + + with transaction.atomic(): + for target in targets: + content_type = ContentType.objects.get_for_model(model=target) + object_layer, created = self.stored_layer.object_layers.get_or_create( + content_type=content_type, object_id=target.pk + ) + for transformation in transformations: + object_layer.transformations.create( + order=transformation.order, + name=transformation.name, + arguments=transformation.arguments, + ) + + def get_empty_results_text(self): + if self.empty_results_text: + return self.empty_results_text + else: + return _( + 'Transformations allow changing the visual appearance ' + 'of documents without making permanent changes to the ' + 'document file themselves.' + ) + + def get_icon(self): + return Icon(driver_name='fontawesome', symbol=self.symbol) + + def get_model_instance(self): + StoredLayer = apps.get_model( + app_label='converter', model_name='StoredLayer' + ) + stored_layer, created = StoredLayer.objects.update_or_create( + name=self.name, defaults={'order': self.order} + ) + + return stored_layer + + def get_transformations_for(self, obj, as_classes=False): + """ + as_classes == True returns the transformation classes from .classes + ready to be feed to the converter class + """ + LayerTransformation = apps.get_model( + app_label='converter', model_name='LayerTransformation' + ) + + return LayerTransformation.objects.get_for_object( + obj=obj, as_classes=as_classes, + only_stored_layer=self.stored_layer + ) + + @cached_property + def stored_layer(self): + return self.get_model_instance() + + +class LayerLink(Link): + @staticmethod + def set_icon(instance, layer): + if instance.action == 'list': + if layer.symbol: + instance.icon_class = layer.get_icon() + + def __init__(self, action, layer, object_name=None, **kwargs): + super(LayerLink, self).__init__(**kwargs) + self.action = action + self.layer = layer + self.object_name = object_name or _('transformation') + + permission = layer.permissions.get(action, None) + if permission: + self.permissions = (permission,) + + if action == 'list': + self.kwargs = LayerLinkKwargsFactory( + layer_name=layer.name + ).get_kwargs_function() + + if action in ('create', 'select'): + self.kwargs = LayerLinkKwargsFactory().get_kwargs_function() + + LayerLink.set_icon(instance=self, layer=layer) + + def copy(self, layer): + result = copy.copy(self) + result.kwargs = LayerLinkKwargsFactory( + layer_name=layer.name + ).get_kwargs_function() + result._layer_name = layer.name + + LayerLink.set_icon(instance=result, layer=layer) + + return result + + @cached_property + def layer_name(self): + return getattr( + self, '_layer_name', Layer.get_by_value( + key='default', value=True + ).name + ) + + +class LayerLinkKwargsFactory(object): + def __init__(self, layer_name=None, variable_name='resolved_object'): + self.layer_name = layer_name + self.variable_name = variable_name + + def get_kwargs_function(self): + def get_kwargs(context): + ContentType = apps.get_model( + app_label='contenttypes', model_name='ContentType' + ) + + content_type = ContentType.objects.get_for_model( + context[self.variable_name] + ) + default_layer = Layer.get_by_value(key='default', value=True) + return { + 'app_label': '"{}"'.format(content_type.app_label), + 'model': '"{}"'.format(content_type.model), + 'object_id': '{}.pk'.format(self.variable_name), + 'layer_name': '"{}"'.format( + self.layer_name or context.get( + 'layer_name', default_layer.name + ) + ) + } + + return get_kwargs diff --git a/mayan/apps/converter/forms.py b/mayan/apps/converter/forms.py index 73749d2897..72de022c1a 100644 --- a/mayan/apps/converter/forms.py +++ b/mayan/apps/converter/forms.py @@ -2,26 +2,59 @@ from __future__ import unicode_literals import yaml -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader - from django import forms from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ -from .models import Transformation +from mayan.apps.common.serialization import yaml_load + +from .models import LayerTransformation +from .transformations import BaseTransformation -class TransformationForm(forms.ModelForm): +class LayerTransformationSelectForm(forms.Form): + def __init__(self, *args, **kwargs): + layer = kwargs.pop('layer') + super(LayerTransformationSelectForm, self).__init__(*args, **kwargs) + self.fields[ + 'transformation' + ].choices = BaseTransformation.get_transformation_choices(layer=layer) + + transformation = forms.ChoiceField( + choices=(), help_text=_('Available transformations for this layer.'), + label=_('Transformation'), + ) + + +class LayerTransformationForm(forms.ModelForm): class Meta: - fields = ('name', 'arguments', 'order') - model = Transformation + fields = ('arguments', 'order') + model = LayerTransformation + + def __init__(self, *args, **kwargs): + transformation_name = kwargs.pop('transformation_name', None) + super(LayerTransformationForm, self).__init__(*args, **kwargs) + + if not transformation_name: + # Get the template name when the transformation is being edited. + template_name = getattr( + self.instance.get_transformation_class(), 'template_name', + None + ) + else: + # Get the template name when the transformation is being created + template_name = getattr( + BaseTransformation.get(name=transformation_name), + 'template_name', None + ) + + if template_name: + self.fields['arguments'].widget.attrs['class'] = 'hidden' + self.fields['order'].widget.attrs['class'] = 'hidden' def clean(self): try: - yaml.load(stream=self.cleaned_data['arguments'], Loader=SafeLoader) + yaml_load(stream=self.cleaned_data['arguments']) except yaml.YAMLError: raise ValidationError( _( diff --git a/mayan/apps/converter/icons.py b/mayan/apps/converter/icons.py index f91d1a9d13..9eaa5d928e 100644 --- a/mayan/apps/converter/icons.py +++ b/mayan/apps/converter/icons.py @@ -4,10 +4,7 @@ from mayan.apps.appearance.classes import Icon icon_transformations = Icon(driver_name='fontawesome', symbol='crop') -icon_transformation_create = Icon( - driver_name='fontawesome-dual', primary_symbol='crop', - secondary_symbol='plus' -) icon_transformation_delete = Icon(driver_name='fontawesome', symbol='times') icon_transformation_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_transformation_list = icon_transformations +icon_transformation_select = Icon(driver_name='fontawesome', symbol='plus') diff --git a/mayan/apps/converter/layers.py b/mayan/apps/converter/layers.py new file mode 100644 index 0000000000..892b00c15c --- /dev/null +++ b/mayan/apps/converter/layers.py @@ -0,0 +1,20 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from .classes import Layer +from .permissions import ( + permission_transformation_create, permission_transformation_delete, + permission_transformation_edit, permission_transformation_view +) + +layer_saved_transformations = Layer( + default=True, label=_('Saved transformations'), + name='saved_transformations', order=100, permissions={ + 'create': permission_transformation_create, + 'delete': permission_transformation_delete, + 'edit': permission_transformation_edit, + 'select': permission_transformation_create, + 'view': permission_transformation_view, + }, symbol='crop' +) diff --git a/mayan/apps/converter/links.py b/mayan/apps/converter/links.py index b69074fd9f..f325dd269b 100644 --- a/mayan/apps/converter/links.py +++ b/mayan/apps/converter/links.py @@ -1,55 +1,37 @@ from __future__ import unicode_literals -from django.apps import apps from django.utils.translation import ugettext_lazy as _ -from mayan.apps.navigation.classes import Link - -from .permissions import ( - permission_transformation_create, permission_transformation_delete, - permission_transformation_edit, permission_transformation_view -) +from .classes import LayerLink +from .layers import layer_saved_transformations -def get_kwargs_factory(variable_name): - def get_kwargs(context): - ContentType = apps.get_model( - app_label='contenttypes', model_name='ContentType' - ) - - content_type = ContentType.objects.get_for_model( - context[variable_name] - ) - return { - 'app_label': '"{}"'.format(content_type.app_label), - 'model': '"{}"'.format(content_type.model), - 'object_id': '{}.pk'.format(variable_name) - } - - return get_kwargs +def conditional_active(context, resolved_link): + return resolved_link.link.view == resolved_link.current_view_name and context.get('layer_name', None) == resolved_link.link.layer_name -link_transformation_create = Link( - icon_class_path='mayan.apps.converter.icons.icon_transformation_create', - kwargs=get_kwargs_factory('content_object'), - permissions=(permission_transformation_create,), - text=_('Create new transformation'), view='converter:transformation_create' -) -link_transformation_delete = Link( - args='resolved_object.pk', +link_transformation_delete = LayerLink( + action='delete', + kwargs={'layer_name': 'layer_name', 'pk': 'resolved_object.pk'}, icon_class_path='mayan.apps.converter.icons.icon_transformation_delete', - permissions=(permission_transformation_delete,), + layer=layer_saved_transformations, tags='dangerous', text=_('Delete'), view='converter:transformation_delete' ) -link_transformation_edit = Link( - args='resolved_object.pk', +link_transformation_edit = LayerLink( + action='edit', + kwargs={'layer_name': 'layer_name', 'pk': 'resolved_object.pk'}, icon_class_path='mayan.apps.converter.icons.icon_transformation_edit', - permissions=(permission_transformation_edit,), + layer=layer_saved_transformations, text=_('Edit'), view='converter:transformation_edit' ) -link_transformation_list = Link( - icon_class_path='mayan.apps.converter.icons.icon_transformation_list', - kwargs=get_kwargs_factory('resolved_object'), - permissions=(permission_transformation_view,), text=_('Transformations'), +link_transformation_list = LayerLink( + action='list', conditional_active=conditional_active, + layer=layer_saved_transformations, text=_('Transformations'), view='converter:transformation_list' ) +link_transformation_select = LayerLink( + action='select', + icon_class_path='mayan.apps.converter.icons.icon_transformation_select', + layer=layer_saved_transformations, text=_('Select new transformation'), + view='converter:transformation_select' +) diff --git a/mayan/apps/converter/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/ar/LC_MESSAGES/django.mo index 92e5736442..c49095fe27 100644 Binary files a/mayan/apps/converter/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/ar/LC_MESSAGES/django.po b/mayan/apps/converter/locale/ar/LC_MESSAGES/django.po index d6accc7d58..03aa6edc4f 100644 --- a/mayan/apps/converter/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,32 +18,42 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformation" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "حذف" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "تحرير" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "اسم" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "مفعل" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "اسم" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -115,92 +161,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "تغيير حجم" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "تدوير" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "التكبير" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Select" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/bg/LC_MESSAGES/django.mo index 0bb8dfb93b..0a2db5697d 100644 Binary files a/mayan/apps/converter/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po b/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po index bb76bbe3f9..3161a51880 100644 --- a/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-10-16 14:15+0000\n" -"Last-Translator: Lyudmil Antonov \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,32 +19,42 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Конвертор" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Трансформация" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Изключение, определящо броя на PDF страниците; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Изключение, определящо броя на страниците с използване на Възглавница; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice не е инсталиран или не е намерен." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Не е във формат на офис файл" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Трансформациите позволяват промяна на външния вид на документите, без да се правят постоянни промени в самия файл на документа." + +#: classes.py:375 +msgid "transformation" +msgstr "трансформация" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Помощна програма от пакета poppler-utils, използвана за проверка на PDF файлове." @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "Помощна програма от пакета popper-utils, използвана за извличане на страници от PDF файлове в изображения във формат PPM." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "Налични трансформации за този слой." + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr ""%s" не е валиден запис." -#: links.py:36 -msgid "Create new transformation" -msgstr "Създайте нова трансформация" +#: layers.py:12 +msgid "Saved transformations" +msgstr "Запазени трансформации" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Изтрийте" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Редактиране" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Трансформации" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "Изберете нова трансформация" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Име" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Поръчка" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "Съхранен слой" + +#: models.py:35 +msgid "Stored layers" +msgstr "Съхранени слоеве" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Активиран" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "Обектен слой" + +#: models.py:57 +msgid "Object layers" +msgstr "Обектни слоеве" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Ред, в който ще бъдат извършени трансформациите. Ако остане непроменено, ще бъде назначена автоматична стойност на поръчката." -#: models.py:39 -msgid "Order" -msgstr "Поръчка" - -#: models.py:43 -msgid "Name" -msgstr "Име" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Въведете аргументите за преобразуването като YAML речник. т.е.: {"градуси": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Аргументи" +#: models.py:100 +msgid "Layer transformation" +msgstr "Трансформация на слоеве" + +#: models.py:101 +msgid "Layer transformations" +msgstr "Трансформации на слоеве" + #: permissions.py:10 msgid "Create new transformations" msgstr "Създайте нови трансформации" @@ -116,92 +162,115 @@ msgstr "Редактиране на трансформации" msgid "View existing transformations" msgstr "Преглед на съществуващите трансформации" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Използван бекенд за преобразуване на графики." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Опции за конфигуриране на бекенда за графично преобразуване" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Изрязване" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "Начертайте правоъгълник" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "Начертайте правоъгълник (процентни координати)" + +#: transformations.py:377 msgid "Flip" msgstr "Преобръщане" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Гаусово замъгляване" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Графично изкуство" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Огледало" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Преоразмеряване" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Завъртане" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Завъртане на 90 градуса" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Въртене на 180 градуса" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Въртене на 270 градуса" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Размазващо маскиране" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Увеличаване" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Въведете валидна YAML стойност." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Създайте нова трансформация за: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "Създайте слой "%(layer)s" трансформация "%(transformation)s" за: %(object)s" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Да се изтрие трансформацията „%(transformation)s“ за: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Редактиране на трансформацията „%(transformation)s“ за: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Трансформациите позволяват промяна на външния вид на документите, без да се правят постоянни промени в самия файл на документа." - -#: views.py:231 -msgid "No transformations" -msgstr "Няма трансформации" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Трансформации за: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "Няма записи за слой "%(layer_name)s"" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "Трансформации на слой "%(layer)s" за: %(object)s" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Изберете" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "Изберете нова трансформация на слой "%(layer)s" за: %(object)s" diff --git a/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.mo index 4479549b47..4953fdfa60 100644 Binary files a/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.po index b9a079bc3f..8aaaef58f8 100644 --- a/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/bs_BA/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -19,32 +19,42 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformacija" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Izuzetak određivanje broja stranice PDF-a;%s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Izuzetak određivanje broja stranice koristeć1 Pillow;%s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice nije instaliran ili nije pronađen." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Nije format kancelarijskog fajla." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformacija" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Kreirajte novu transformaciju" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Obriši" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Urediti" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformacije" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Ime" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Sortiraj" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Omogućeno" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Red u kojem će se transformacije izvršiti. Ako je ostalo nepromenjeno, biće dodeljena automatska vrijednost porudžbine." -#: models.py:39 -msgid "Order" -msgstr "Sortiraj" - -#: models.py:43 -msgid "Name" -msgstr "Ime" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Unesite argumente za transformaciju kao IAML rečnik. npr .: {\"stepeni\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumenti" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Kreiraj nove transformacije" @@ -116,92 +162,115 @@ msgstr "Edituj transformacije" msgid "View existing transformations" msgstr "Pogledajte postojeće transformacije" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Grafička pretvorba grafike za upotrebu." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opcije konfiguracije za backend konverziju grafike." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Crop" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Flip" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gaussian blur" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Ogledalo" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Promjeni veličinu" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Rotiraj" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Rotirati 90 stepeni" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Rotirati 180 stepeni" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Rotirati 270 stepeni" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Neoštećeno maskiranje" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Uvećaj" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Unesite važeći IAML" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Kreiraj novu transformaciju za:%s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Izbriši transformaciju \"%(transformation)s\" za:%(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Edituj transformaciju \"%(transformation)s\" za:%(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformacije za:%s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Odabrati" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/cs/LC_MESSAGES/django.mo index 8ad5e7a38f..4035302947 100644 Binary files a/mayan/apps/converter/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po b/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po index 4bc136b6de..d9fbd61627 100644 --- a/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-10-15 16:46+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,32 +18,42 @@ msgstr "" "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:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konvertor" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformace" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Výjimka určující počet stránek PDF; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Výjimka určující počet stránek pomocí Pillow; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice není nainstalován nebo nebyl nalezen." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Nemá formát kancelářského souboru." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Transformace umožňují změnu vizuálního vzhledu dokumentů bez provedení trvalých změn v samotném souboru dokumentu." + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Obslužný program z balíčku poppler-utils používaný k prohlížení souborů PDF." @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "Obslužný program z balíčku popper-utils používaný k extrahování stránek ze souborů PDF do obrázků ve formátu PPM." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr ""%s" není platná položka." -#: links.py:36 -msgid "Create new transformation" -msgstr "Vytvořit novou transformaci" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Odstranit" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Editovat" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformace" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "název" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Třídění" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Povoleno" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Pořadí, ve kterém budou provedeny transformace. Pokud zůstane nezměněna, bude přiřazena hodnota automatického třídění." -#: models.py:39 -msgid "Order" -msgstr "Třídění" - -#: models.py:43 -msgid "Name" -msgstr "název" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Zadejte argumenty pro transformaci jako slovník YAML. tj .: {"stupně": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumenty" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Vytvořit nové transformace" @@ -115,92 +161,115 @@ msgstr "Upravit transformace" msgid "View existing transformations" msgstr "Zobrazit existující transformace" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Grafické převody backend-u k použití." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Možnosti konfigurace pro backend grafické konverze." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Oříznutí" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Překlopit" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gaussovské rozostření" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Kresba tužkou" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Zrcadlo" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Změnit velikost" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Otočit" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Otočit o 90 stupňů" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Otočit o 180 stupňů" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Otočit o 270 stupňů" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Neostré maskování " -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Zadejte platnou hodnotu YAML." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Vytvořit novou transformaci pro: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Smazat transformaci "%(transformation)s" pro: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Upravit transformaci "%(transformation)s" pro: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Transformace umožňují změnu vizuálního vzhledu dokumentů bez provedení trvalých změn v samotném souboru dokumentu." - -#: views.py:231 -msgid "No transformations" -msgstr "Žádné transformace" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformace pro: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.mo index 16fa062915..5fb35aaecd 100644 Binary files a/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.po index b2d8b59f55..9fba789fcd 100644 --- a/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -17,32 +17,42 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Slet" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Rediger" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Navn" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "Navn" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -114,92 +160,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.mo index dab9549f8a..dbf9dbc0cd 100644 Binary files a/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.po index e2167018ed..cd336a4447 100644 --- a/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/de_DE/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-08 22:15+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,32 +22,42 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformation" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Ausnahme bei der Ermittlung der PDF-Seitenanzahl: %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Fehler bei der Ermittlung der Seitenanzahl; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "Libre Office ist nicht installiert oder wurde nicht gefunden." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Kein Office-Dateiformat" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Transformationen erlauben Veränderungen in der visuellen Darstellung eines Dokuments ohne diese im Dokument selbst zu speichern." + +#: classes.py:375 +msgid "transformation" +msgstr "Transformation" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Programm aus dem poppler-utils Paket für die Inspektion von PDF Dateien." @@ -58,51 +68,87 @@ msgid "" "into PPM format images." msgstr "Programm aus dem poppler-utils Paket für die Extraktion von Seiten aus PDF-Dateien in PPM-Bilder." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" ist kein gültiger Eintrag." -#: links.py:36 -msgid "Create new transformation" -msgstr "Neue Transformation erstellen" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Löschen" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Bearbeiten" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformationen" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Name" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Reihenfolge" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Aktiviert" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Reihenfolge in der die Transformationen ausgeführt werden. Ohne Eintrag wird automatisch eine Reihenfolge zugewiesen." -#: models.py:39 -msgid "Order" -msgstr "Reihenfolge" - -#: models.py:43 -msgid "Name" -msgstr "Name" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Argumemte für die Transformation als YAML dictionary eingeben, z.B: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumente" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Neue Transformationen erstellen" @@ -119,92 +165,115 @@ msgstr "Transformationen bearbeiten" msgid "View existing transformations" msgstr "Transformationen anzeigen" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Zu benutzendes Bildverarbeitungs-Backend" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Einstellungsmöglichkeiten für das Konvertierungsbackend." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Zuschneiden" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Drehen" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gaußsche Unschärfe" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Liniengrafik" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Spiegeln" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Größe ändern" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Drehen" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Um 90° drehen" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Um 180° drehen" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Um 270° drehen" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Unscharf maskieren" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Einen gültigen YAML Wert eingeben" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Transformation erstellen für %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Transformation \"%(transformation)s\" für %(content_object)s wirklich löschen?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Transformation \"%(transformation)s\" für %(content_object)s bearbeiten" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Transformationen erlauben Veränderungen in der visuellen Darstellung eines Dokuments ohne diese im Dokument selbst zu speichern." - -#: views.py:231 -msgid "No transformations" -msgstr "Keine Transformationen" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformationen von %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Auswählen" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/el/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/el/LC_MESSAGES/django.mo index 1257663a52..70c8b7084c 100644 Binary files a/mayan/apps/converter/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/el/LC_MESSAGES/django.po b/mayan/apps/converter/locale/el/LC_MESSAGES/django.po index c5abecab59..fd07919685 100644 --- a/mayan/apps/converter/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -17,32 +17,42 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Μετατροπέας" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Μετασχηματισμός" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "Το LibreOffice δεν είναι εγκατεστημένο ή δεν βρέθηκε." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Δημιουργία νέου μετασχηματισμού" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Διαγραφή" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Τροποποίηση" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Μετασχηματισμός" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Όνομα" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Σειρά προτεραιότητας" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Προτεραιότητα με την οποία θα εφαρμοστεί ο μετασχηματισμός. Αν αφαιθεί κενό, θα αποδοθεί αυτόματα μια τιμή σειράς προτεραιότητας." -#: models.py:39 -msgid "Order" -msgstr "Σειρά προτεραιότητας" - -#: models.py:43 -msgid "Name" -msgstr "Όνομα" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Παράμετροι" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Δημιουργία νέων μετασχηματισμών" @@ -114,92 +160,115 @@ msgstr "Τροποποίηση μετασχηματισμών" msgid "View existing transformations" msgstr "Εμφανιση υπαρχόντων μετασχηατισμών" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Αναστροφή" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Περιστροφή κατά 90 μοιρες" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Περιστροφή κατά 180 μοίρες" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Περιστροφή κατά 270 μοίρες" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Μεγένθυνση" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Δημιουργία νέου μετασχηματισμού για: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Διαγραφή μετασχηματισμού \"%(transformation)s\" για: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Τροποποίηση μετασχηματισμού \"%(transformation)s\" για: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Μετασχηματισμός για: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/en/LC_MESSAGES/django.po b/mayan/apps/converter/locale/en/LC_MESSAGES/django.po index 0f5e436465..8c22fa1984 100644 --- a/mayan/apps/converter/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,32 +17,42 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -114,92 +160,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/es/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/es/LC_MESSAGES/django.mo index 9c50e39602..b90d01782a 100644 Binary files a/mayan/apps/converter/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/es/LC_MESSAGES/django.po b/mayan/apps/converter/locale/es/LC_MESSAGES/django.po index e5b391a225..f979a1b9f5 100644 --- a/mayan/apps/converter/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/es/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-28 19:34+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 18:37+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -19,32 +19,42 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertidor" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformación" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Excepción determinando el número de páginas del PDF; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Excepción determinando el número de páginas usando Pillow; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice no instalado o no encontrado." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "No es un formato de archivo de la oficina." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Las transformaciones permiten cambiar la apariencia visual de los documentos sin realizar cambios permanentes en el archivo del documento." + +#: classes.py:375 +msgid "transformation" +msgstr "transformación" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Utilidad del paquete poppler-utils utilizado para inspeccionar archivos PDF." @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "Utilidad del paquete popper-utils que se utiliza para extraer páginas de archivos PDF a imágenes en formato PPM." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "Transformaciones disponibles para esta capa." + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" no es una entrada válida." -#: links.py:36 -msgid "Create new transformation" -msgstr "Crear nueva transformación" +#: layers.py:12 +msgid "Saved transformations" +msgstr "Transformaciones guardadas" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Borrar" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Editar" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformaciones" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "Seleccione nueva transformación" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nombre" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Orden" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "Capa almacenada" + +#: models.py:35 +msgid "Stored layers" +msgstr "Capas almacenadas" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Habilitado" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "Capa de objeto" + +#: models.py:57 +msgid "Object layers" +msgstr "Capas de objetos" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Orden de ejecución de las transformaciones. Si lo deja en blanco, un valor de orden sera asignado automáticamente. " -#: models.py:39 -msgid "Order" -msgstr "Orden" - -#: models.py:43 -msgid "Name" -msgstr "Nombre" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Entre el argumento de la transformación como un diccionario YAML. Ejemplo: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumentos" +#: models.py:100 +msgid "Layer transformation" +msgstr "Transformación de la capa" + +#: models.py:101 +msgid "Layer transformations" +msgstr "Transformaciones de capa" + #: permissions.py:10 msgid "Create new transformations" msgstr "Crear nuevas transformaciones" @@ -116,92 +162,115 @@ msgstr "Editar transformaciones" msgid "View existing transformations" msgstr "Ver transformaciones existentes" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Módulo de conversión de gráficos a ser usado." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opciones de configuración para el modulo de conversión de gráficos." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Recortar" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "Dibujar rectángulo" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "Dibujar rectángulo (coordenadas de porcentajes)" + +#: transformations.py:377 msgid "Flip" msgstr "Voltear" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Desenfoque gaussiano" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Arte lineal" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Espejo" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Cambiar el tamaño" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Girar" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Girar 90 grados" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Girar 180 grados" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Girar 270 grados" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Reenfocar " -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Ampliar" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Entre un valor YAML." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Crear transformación para :%s" +msgid "Error creating transforamtion: %s." +msgstr "Error al crear la transformación: %s." -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "Cree transformación \"%(transformation)s\" en la capa \"%(layer)s\" para: %(object)s" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "¿Borrar transformación \"%(transformation)s\" para: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Editar transformación \"%(transformation)s\" para: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Las transformaciones permiten cambiar la apariencia visual de los documentos sin realizar cambios permanentes en el archivo del documento." - -#: views.py:231 -msgid "No transformations" -msgstr "Sin transformaciones" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformaciones para: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "No hay entradas para la capa \"%(layer_name)s\"" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "Transformaciones de capa \"%(layer)s\" para: %(object)s" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "Transformación creada con éxito." + +#: views.py:314 +msgid "Select" +msgstr "Seleccionar" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "Seleccione la nueva transformación de capa \"%(layer)s\" para: %(object)s" diff --git a/mayan/apps/converter/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/fa/LC_MESSAGES/django.mo index efc64e7d29..79faaef88f 100644 Binary files a/mayan/apps/converter/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/fa/LC_MESSAGES/django.po b/mayan/apps/converter/locale/fa/LC_MESSAGES/django.po index 68afbe367f..5f5a42f3f9 100644 --- a/mayan/apps/converter/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -18,32 +18,42 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "مبدل" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "دگرگونی" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "تعداد صفحات PDF را تعیین کنید؛ %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "شمارش صفحه تعیین میزان استثنا با استفاده از بالش؛ %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice نصب نشده یا یافت نشد" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "فرمت فایل دفتر نیست" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "تبدیل" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "ایجاد تحول جدید" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "حذف" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "ویرایش" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "تغییرات" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "نام" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "سفارش" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "فعال شده است" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "سفارش که در آن تحولات اجرا خواهد شد. اگر بدون تغییر باقی بماند، یک مقدار سفارش خودکار تعیین می شود." -#: models.py:39 -msgid "Order" -msgstr "سفارش" - -#: models.py:43 -msgid "Name" -msgstr "نام" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "آرگومان را برای تبدیل به عنوان یک فرهنگ لغت YAML وارد کنید. یعنی: {\"درجه\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "استدلال" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "ایجاد تغییرات جدید" @@ -115,92 +161,115 @@ msgstr "ویرایش تغییرات" msgid "View existing transformations" msgstr "مشاهده تغییرات موجود" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "باطن تبدیل گرافیک برای استفاده." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "گزینه های پیکربندی برای backend تبدیل گرافیک." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "محصول" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "تلنگر" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "تار گاوسی" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "هنر خط" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "آینه" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "تغییر اندازه" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "چرخش" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "چرخش 90 درجه" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "چرخش 180 درجه" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "چرخش 270 درجه" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "ماسک غیرشفاف" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "بزرگنمایی" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "یک مقدار معتبر YAML را وارد کنید" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "ایجاد تغییر جدید برای: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "حذف \"%(transformation)s\" برای: %(content_object)s؟" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "ویرایش \"%(transformation)s\" برای: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "تبدیل برای: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "انتخاب" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/fr/LC_MESSAGES/django.mo index 771e3e348d..9bd1b30952 100644 Binary files a/mayan/apps/converter/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/fr/LC_MESSAGES/django.po b/mayan/apps/converter/locale/fr/LC_MESSAGES/django.po index d4a009aaad..42991f26c7 100644 --- a/mayan/apps/converter/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/fr/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-09 13:35+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,32 +22,42 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertisseur" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformation" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Exception lors de la détermination du nombre de pages du PDF ; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Exception lors de la détermination du nombre de pages à l'aide de Pillow ; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice n'est pas installé ou introuvable." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Format de fichier non reconnu." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Les transformations permettent de modifier l'apparence visuelle des documents sans apporter de modifications permanentes au fichier." + +#: classes.py:375 +msgid "transformation" +msgstr "transformation" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Utilitaire du paquet poppler-utils utilisé pour inspecter les fichiers PDF." @@ -58,51 +68,87 @@ msgid "" "into PPM format images." msgstr "Utilitaire du paquet popper-utils utilisé pour extraire des pages de fichiers PDF en images au format PPM." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" n'est pas une entrée valide." -#: links.py:36 -msgid "Create new transformation" -msgstr "Créer une nouvelle transformation" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Supprimer" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Modifier" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformations" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nom" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Ordre" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Activé" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Ordre dans lequel les transformations seront exécutées. En l'absence de modification, un ordre est automatiquement assigné." -#: models.py:39 -msgid "Order" -msgstr "Ordre" - -#: models.py:43 -msgid "Name" -msgstr "Nom" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Saisir les arguments pour la transformation sous la forme d'un dictionnaire YAML. Par exemple : {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Arguments" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Créer de nouvelles transformations" @@ -119,92 +165,115 @@ msgstr "Modifier des transformations" msgid "View existing transformations" msgstr "Afficher les transformations existantes" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Module de conversion graphique à utiliser." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Options de configuration pour le backend de conversion graphique." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Découper" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Retourner" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Flou gaussien" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Mirroir" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Redimensionner" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Rotation" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Rotation à 90 degrées" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Rotation à 180 degrées" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Rotation à 270 degrées" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Masquage flou" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Agrandir" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Saisissez une valeur YAML valide." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Créer une nouvelle transformation pour : %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Êtes vous certain de vouloir supprimer la transformation \"%(transformation)s\" pour : %(content_object)s ?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Modifier la transformation \"%(transformation)s\" pour : %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Les transformations permettent de modifier l'apparence visuelle des documents sans apporter de modifications permanentes au fichier." - -#: views.py:231 -msgid "No transformations" -msgstr "Aucune transformation" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformations pour : %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Sélectionner" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/hu/LC_MESSAGES/django.mo index 0a9ba48c4e..2cd695e3f9 100644 Binary files a/mayan/apps/converter/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/hu/LC_MESSAGES/django.po b/mayan/apps/converter/locale/hu/LC_MESSAGES/django.po index c6d3c6ec39..c7d73214a2 100644 --- a/mayan/apps/converter/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -18,32 +18,42 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Átalakítás" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "átalakítás" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Törlés" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Szerkesztés" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Név" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Sorrend" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Bekapcsolt" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "Sorrend" - -#: models.py:43 -msgid "Name" -msgstr "Név" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Paraméterek" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -115,92 +161,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Átméretez" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Kiválaszt" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/id/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/id/LC_MESSAGES/django.mo index 6bdcc2bc13..e9d955cc6d 100644 Binary files a/mayan/apps/converter/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/id/LC_MESSAGES/django.po b/mayan/apps/converter/locale/id/LC_MESSAGES/django.po index 3e980f5741..1b9243e2c7 100644 --- a/mayan/apps/converter/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/id/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-12 18:08+0000\n" -"Last-Translator: Adek Lanin\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,32 +17,42 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Pengkonversi" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformasi" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Hapus" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Sunting" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -114,92 +160,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/it/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/it/LC_MESSAGES/django.mo index 1caa8fb4a6..28e5ca3b58 100644 Binary files a/mayan/apps/converter/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/it/LC_MESSAGES/django.po b/mayan/apps/converter/locale/it/LC_MESSAGES/django.po index dd89382ab9..d26e63cae7 100644 --- a/mayan/apps/converter/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/it/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" @@ -19,32 +19,42 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertitore" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Trasformazione" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Eccezione che determina il conteggio pagine PDF: %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Eccezione sollevata dal conteggio pagine usando Pillow: %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice non installato o non trovato." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Non è un formato di file office" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "trasformazione" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Crea nuova trasformazione" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Cancella" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Modifica" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Trasformazioni" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nome " + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Ordine" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Abilitato" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Ordine delle trasformazioni da eseguire. Se resta invariato verrà assegnato l'ordine automatico." -#: models.py:39 -msgid "Order" -msgstr "Ordine" - -#: models.py:43 -msgid "Name" -msgstr "Nome " - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Scrivi gli argomenti per la trasformazione come dizionario YAML. es: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argomenti" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Crea una nuove trasformazioni" @@ -116,92 +162,115 @@ msgstr "Modifica le trasformazioni" msgid "View existing transformations" msgstr "Visualizza le trasformazioni esistenti" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Conversioni grafiche di backend da utilizzare." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opzioni di configurazione per il backend di conversione grafica." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Taglia" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Capovolgi" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Sfocatura gaussiana" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Specchio" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Ridimensiona" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Ruotare" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Ruota di 90 Gradi" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Ruota di 180 gradi" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Ruota di 270 gradi" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Maschera di contrasto" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Inserisci un valore YAML valido." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Crea una nuove trasformazioni per: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Cancellare le trasformazioni \"%(transformation)s\" per: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Modifica le trasformazioni \"%(transformation)s\" per: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Trasformazione per: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Seleziona" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/lv/LC_MESSAGES/django.mo index e459edd68f..bd7e2d63ac 100644 Binary files a/mayan/apps/converter/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/lv/LC_MESSAGES/django.po b/mayan/apps/converter/locale/lv/LC_MESSAGES/django.po index d498cf721a..1c8f96fddd 100644 --- a/mayan/apps/converter/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-06-27 13:00+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,32 +18,42 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Pārveidotājs" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformācija" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Izņēmums, kas nosaka PDF lapu skaitu; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Izņēmums, kas nosaka lappušu skaitu, izmantojot spilvenu; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice nav instalēts vai nav atrasts." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Ne biroja faila formāts." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Pārveidojumi ļauj mainīt dokumentu vizuālo izskatu, neveicot pastāvīgas izmaiņas dokumenta failā." + +#: classes.py:375 +msgid "transformation" +msgstr "pārvērtība" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Utility no poppler-utils paketes, ko izmanto, lai pārbaudītu PDF failus." @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "Utility no popper-utils paketes, ko izmanto, lai no PDF failiem izņemtu lapas PPM formāta attēlos." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "Pieejamās šī slāņa pārvērtības." + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" nav derīgs ieraksts." -#: links.py:36 -msgid "Create new transformation" -msgstr "Izveidot jaunu transformāciju" +#: layers.py:12 +msgid "Saved transformations" +msgstr "Saglabātās pārvērtības" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Dzēst" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Rediģēt" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformācijas" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nosaukums" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Pasūtījums" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Iespējots" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Kārtība, kādā tiks veiktas transformācijas. Ja tas netiek mainīts, tiks piešķirta automātiskā pasūtījuma vērtība." -#: models.py:39 -msgid "Order" -msgstr "Pasūtījums" - -#: models.py:43 -msgid "Name" -msgstr "Nosaukums" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Ievadiet transformācijas argumentus kā YAML vārdnīcu. ti: {\"grādi\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumenti" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Izveidojiet jaunas transformācijas" @@ -115,92 +161,115 @@ msgstr "Rediģēt pārveidojumus" msgid "View existing transformations" msgstr "Skatiet esošās transformācijas" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Grafikas pārveidošanas backend izmantošana." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Grafikas reklāmguvumu backend konfigurācijas opcijas." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Apgriezt" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Flip" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gausa izplūšana" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Spogulis" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Mainīt izmērus" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Pagriezt" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Pagrieziet 90 grādus" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Pagrieziet 180 grādus" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Pagrieziet 270 grādus" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Nenovērtējama maskēšana" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Tālummaiņa" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Ievadiet derīgu YAML vērtību." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Izveidot jaunu transformāciju: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Dzēst transformāciju \"%(transformation)s\": %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Rediģēt transformāciju \"%(transformation)s\" par: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Pārveidojumi ļauj mainīt dokumentu vizuālo izskatu, neveicot pastāvīgas izmaiņas dokumenta failā." - -#: views.py:231 -msgid "No transformations" -msgstr "Nav pārveidojumu" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformācijas: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.mo index 7014eae92e..8043697e3a 100644 Binary files a/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.po index c6d09205d1..dac56521cd 100644 --- a/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/nl_NL/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -21,32 +21,42 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Converter" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformatie" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Exceptie bij het bepalen van aan aantal bladzijden van de PDF: %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Geen office bestandsformaat." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformatie" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -57,51 +67,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Maak een nieuwe transformatie aan" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Verwijder" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "bewerken" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformaties" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Naam" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Volgorde" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Ingeschakeld" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Volgorde waarin de transformaties worden uitgevoerd. Indien ongewijzigd zal automatisch een volgorde toegekend worden." -#: models.py:39 -msgid "Order" -msgstr "Volgorde" - -#: models.py:43 -msgid "Name" -msgstr "Naam" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Voer de argumenten voor de transformatie in als een YAML statement, bijvoorbeeld: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumenten" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Maak nieuwe transformaties aan" @@ -118,92 +164,115 @@ msgstr "Wijzig transformaties" msgid "View existing transformations" msgstr "Bekijk bestaande transformaties" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Te gebruiken backend voor grafische conversie." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Bijsnijden" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Afmeting wijzigen" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Roteren" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Inzoomen" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Voer een geldige YAML-waarde in." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Maak een nieuwe transformatie aan voor: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Transformatie verwijderen \"%(transformation)s\" voor: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Wijzig transformatie \"%(transformation)s\" voor: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformaties voor: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Selecteer" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/pl/LC_MESSAGES/django.mo index 9fbcb5d18a..0f05e6346e 100644 Binary files a/mayan/apps/converter/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/pl/LC_MESSAGES/django.po b/mayan/apps/converter/locale/pl/LC_MESSAGES/django.po index 7273c3ffb7..2e1cc9a7df 100644 --- a/mayan/apps/converter/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/pl/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" @@ -20,32 +20,42 @@ msgstr "" "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:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konwerter" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Przekształcenie" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Wyjątek określający liczbę stron PDF: %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Wyjątek określający liczbę stron przy użyciu Pillow; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice nie zainstalowano lub nie został zainstalowany." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Format niezgodny z formatem plików LibreOffice." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformacja" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -56,51 +66,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Utwórz nowe przekształcenie" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Usuń" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Edytuj" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Przekształcenia" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nazwa" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Kolejność" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Włączone" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Kolejność wykonywania przekształceń. Jeśli nie zostanie zmieniona, przyjmie wartość automatyczną." -#: models.py:39 -msgid "Order" -msgstr "Kolejność" - -#: models.py:43 -msgid "Name" -msgstr "Nazwa" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Wprowadź argumenty dla przekształcenia w postaci słownika YAML np.: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumenty" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Utwórz nowe przekształcenia" @@ -117,92 +163,115 @@ msgstr "Edytuj przekształcenia" msgid "View existing transformations" msgstr "Przeglądaj utworzone przekształcenia" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Backend używany do konwersji grafiki." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opcje konfiguracji dla silnika konwersji grafiki." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Przycięcie" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Odbicie" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Rozmycie Gaussa" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Rysunek kreskowy" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Odbicie lustrzane" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Zmiana rozmiaru" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Obrócenie" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Obrócenie o 90 stopni" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Obrócenie o 180 stopni" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Obrócenie o 270 stopni" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Maska wyostrzająca" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Powiększenie" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Wprowadź poprawną wartość YAML." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Utwórz nowe przekształcenie dla %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Usunąć przekształcenie \"%(transformation)s\" dla %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Edycja przekształcenia \"%(transformation)s\" dla %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Przekształcenia dla %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Wybierz" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/pt/LC_MESSAGES/django.mo index 25aeb40e33..7ae08e692c 100644 Binary files a/mayan/apps/converter/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/pt/LC_MESSAGES/django.po b/mayan/apps/converter/locale/pt/LC_MESSAGES/django.po index 4b4132c5fe..8701b1dbfb 100644 --- a/mayan/apps/converter/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/pt/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -20,32 +20,42 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformação" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -56,51 +66,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Eliminar" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Editar" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nome" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "Nome" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -117,92 +163,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Redimensionar" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Rodar" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Selecionar" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.mo index ec30493c2c..af9142e8aa 100644 Binary files a/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.po index 9502ac1a3b..205b5bd1f8 100644 --- a/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/pt_BR/LC_MESSAGES/django.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -22,32 +22,42 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Conversor" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformação" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Exceção ao determinar o número de páginas do PDF; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Exceção ao determinar o número de páginas usando Pillow; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice não instalado ou não encontrado." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Não é um formato de arquivo de escritório." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "As transformações permitem mudar a aparência de documentos sem fazer mudanças permanentes nos arquivos dos documentos." + +#: classes.py:375 +msgid "transformation" +msgstr "transformação" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -58,51 +68,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" não é uma entrada válida." -#: links.py:36 -msgid "Create new transformation" -msgstr "Criar nova transformação" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Excluir" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Editar" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformações" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nome" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Ordem" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Habilitado" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Ordem de execução das transformações. Se deixar em branco, um valor automático vai ser atribuído." -#: models.py:39 -msgid "Order" -msgstr "Ordem" - -#: models.py:43 -msgid "Name" -msgstr "Nome" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Entre com os argumentos da transformação como um dicionário YAML. ie: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumentos" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Criar novas transformações" @@ -119,92 +165,115 @@ msgstr "Editar transformações" msgid "View existing transformations" msgstr "Visualizar transformações existentes" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Módulo de conversão de gráficos a ser usado." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opções de configuração para o back-end de conversão de gráficos." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Recortar" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Giro" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gaussian blur" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Desenho de linhas" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Espelho" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Redimensionar" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Rotacionar" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Girar 90 graus" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Girar 180 graus" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Girar 270 graus" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Unsharp mascaramento" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Ampliar" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Entre com um valor YAML válido." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Criar nova transformação para: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Excluir transformaçãa \"%(transformation)s\" para: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Editar transformação \"%(transformation)s\" para: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "As transformações permitem mudar a aparência de documentos sem fazer mudanças permanentes nos arquivos dos documentos." - -#: views.py:231 -msgid "No transformations" -msgstr "Sem transformações" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformações para: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Selecionar" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.mo index 7268bc9c28..ea863bc5a5 100644 Binary files a/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.po index d55e733d21..0430486a27 100644 --- a/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/ro_RO/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-08 08:08+0000\n" -"Last-Translator: Harald Ersch\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,32 +19,42 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertizor" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformare" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Excepție determinând numărul de pagini PDF; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Excepție de determinare a numărului de pagini PDF; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice nu este instalat sau nu a fost găsit." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Nu este un format de fișier Office." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "Transformările permit modificarea aspectului vizual al documentelor, fără a face modificări permanente ale fișierului documentului în sine." + +#: classes.py:375 +msgid "transformation" +msgstr "transformare" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "Utilitar din pachetul poppler-utils folosit pentru inspectarea fișierelor PDF." @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "Utilitar din pachetul popper-utils folosit pentru extragerea paginilor din fișiere PDF în imagini în format PPM." -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "Transformări disponibile pentru acest strat." + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "\"%s\" nu este o intrare validă." -#: links.py:36 -msgid "Create new transformation" -msgstr "Creați o nouă transformare" +#: layers.py:12 +msgid "Saved transformations" +msgstr "Transformări salvate" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Șterge" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Editează" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Transformări" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "Selectați o nouă transformare" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Nume" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Ordine" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "Stratul depozitat" + +#: models.py:35 +msgid "Stored layers" +msgstr "Straturi stocate" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Activat" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "Strat obiect" + +#: models.py:57 +msgid "Object layers" +msgstr "Straturi de obiecte" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Ordinea în care vor fi executate transformările. Dacă este lăsat neschimbat, va fi alocată o ordine automată." -#: models.py:39 -msgid "Order" -msgstr "Ordine" - -#: models.py:43 -msgid "Name" -msgstr "Nume" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Introduceți argumentele pentru transformare ca dicționar YAML. adică: {\"grade\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argumente" +#: models.py:100 +msgid "Layer transformation" +msgstr "Transformarea stratului" + +#: models.py:101 +msgid "Layer transformations" +msgstr "Transformările stratului" + #: permissions.py:10 msgid "Create new transformations" msgstr "Creați noi transformări" @@ -116,92 +162,115 @@ msgstr "Editați transformări" msgid "View existing transformations" msgstr "Vizualizați transformările existente" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Back-end de conversie grafică." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Opțiuni de configurare pentru backend-ul de conversie grafică." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Decupare" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "Desenați dreptunghiul" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "Desenați un dreptunghi (coordonate procente)" + +#: transformations.py:377 msgid "Flip" msgstr "Basculare" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Încețoșare Gaussiană" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Linie de arta" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Oglindire" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Redimensionare" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Rotire" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "Rotiți 90 de grade" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "Rotiți 180 de grade" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "Rotiți 270 de grade" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Unsharp masking" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Introduceți o valoare validă YAML." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Creați o nouă transformare pentru: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "Creați stratul \"%(layer)s\" transformare \"%(transformation)s\" pentru: %(object)s" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Ștergeți transformarea \"%(transformation)s\" pentru: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Editați transformarea \"%(transformation)s\" pentru: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "Transformările permit modificarea aspectului vizual al documentelor, fără a face modificări permanente ale fișierului documentului în sine." - -#: views.py:231 -msgid "No transformations" -msgstr "Fără transformări" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Transformări pentru: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "Nu există înregistrări pentru stratul \"%(layer_name)s\"" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "Transformări la stratul \"%(layer)s\" pentru: %(object)s" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Selecta" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "Selectați noul strat de transformare \"%(layer)s\" pentru: %(object)s" diff --git a/mayan/apps/converter/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/ru/LC_MESSAGES/django.mo index e918b75218..c9fe6133c6 100644 Binary files a/mayan/apps/converter/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/ru/LC_MESSAGES/django.po b/mayan/apps/converter/locale/ru/LC_MESSAGES/django.po index 8913c73c38..66dda4d543 100644 --- a/mayan/apps/converter/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -18,32 +18,42 @@ msgstr "" "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" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Конвертер" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Преобразование" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Ошибка при определении числа страниц PDF; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Не является файлом офисного формата." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "преобразование" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Создать новое преобразование" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Удалить" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Редактировать" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Преобразования" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Имя" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Порядок" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Доступно" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Порядок выполнения преобразований. Если оставить неизменным, будет установлен флаг автоматического выставления порядка." -#: models.py:39 -msgid "Order" -msgstr "Порядок" - -#: models.py:43 -msgid "Name" -msgstr "Имя" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Введите аргументы для преобразования в формате YAML-словаря, например: {\"degrees\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Аргументы" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Создать новые преобразования" @@ -115,92 +161,115 @@ msgstr "Изменить преобразования" msgid "View existing transformations" msgstr "Просмотр существующих преобразований" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Бекенд, который будет использован для графических преобразований." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Кадрировать" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Изменение размера" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Вращать" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Увеличить" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Введите допустимое YAML-значение." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "Создать новое преобразование для: %s" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "Удалить преобразование \"%(transformation)s\" для: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "Изменить преобразование \"%(transformation)s\" for: %(content_object)sjavascript:;" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "Преобразования для: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Выбор" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.mo index ea74bec1bf..3e6bb4b61c 100644 Binary files a/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.po index 15f324d5a9..655750db41 100644 --- a/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -17,32 +17,42 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "transformacija" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Izbriši" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Ime" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "Ime" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -114,92 +160,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Izberi" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.mo index 9051b5b798..3e94500510 100644 Binary files a/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.po index 114e334568..9ddb8d1d60 100644 --- a/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/tr_TR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -19,32 +19,42 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Dönüştürücü" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformasyon" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "PDF sayfa sayısını belirleyen istisna; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "Yastık kullanarak sayfa sayımını belirleyen istisna; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "LibreOffice kurulu değil veya bulunamadı." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "Ofis dosyası biçimi değil." +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -55,51 +65,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" -msgstr "Yeni dönüşüm oluştur" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "Sil" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Düzenle" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "Dönüşümler" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "İsim" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "Sipariş" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "Etkin" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "Dönüşümlerin gerçekleştirileceği sıralama. Eğer değiştirilmeden bırakılırsa, otomatik sipariş değeri verilecektir." -#: models.py:39 -msgid "Order" -msgstr "Sipariş" - -#: models.py:43 -msgid "Name" -msgstr "İsim" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "Dönüşüm için argümanları bir YAML sözlüğü olarak girin. Yani: {\"derece\": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "Argümanlar" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "Yeni dönüşüm oluştur" @@ -116,92 +162,115 @@ msgstr "Dönüşümleri düzenle" msgid "View existing transformations" msgstr "Varolan dönüşümleri görüntüle" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "Grafik dönüştürme kullanmak için arka uç." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "Grafik dönüştürme arka plan yapılandırma seçenekleri." -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "Ekin" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "Fiske" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "Gauss bulanıklığı" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "Çizgi resim" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "Ayna" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "Yeniden boyutlandırma" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "Döndürme" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "90 derece döndür" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "180 derece döndür" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "270 derece döndür" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "Keskin olmayan maskeleme" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "Yakınlaştırma" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "Geçerli bir YAML değeri girin." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "%s için yeni bir dönüşüm oluştur: " +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "\"%(transformation)s\" dönüşümünü sil: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "\"%(transformation)s\" için dönüşüm değiştir: %(content_object)s" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "%sIçin dönüşümler: " +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Seçiniz" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.mo index a389d41aec..6630b89e79 100644 Binary files a/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.po index bd266310c6..126f051ce1 100644 --- a/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -17,32 +17,42 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -53,51 +63,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "" -#: links.py:36 -msgid "Create new transformation" +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Sửa" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "Tên" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 -msgid "Name" -msgstr "Tên" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "" @@ -114,92 +160,115 @@ msgstr "" msgid "View existing transformations" msgstr "" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" +msgid "Error creating transforamtion: %s." msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "" - -#: views.py:231 -msgid "No transformations" -msgstr "" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "Chọn" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" msgstr "" diff --git a/mayan/apps/converter/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/converter/locale/zh/LC_MESSAGES/django.mo index acbce06191..76148fb6a4 100644 Binary files a/mayan/apps/converter/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/converter/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/converter/locale/zh/LC_MESSAGES/django.po b/mayan/apps/converter/locale/zh/LC_MESSAGES/django.po index 54038da8d2..df555e2f7a 100644 --- a/mayan/apps/converter/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -18,32 +18,42 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:21 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "转换器" -#: apps.py:30 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "转换" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:162 backends/python.py:168 #, python-format msgid "Exception determining PDF page count; %s" msgstr "确定PDF页数时异常; %s" -#: backends/python.py:195 +#: backends/python.py:182 #, python-format msgid "Exception determining page count using Pillow; %s" msgstr "使用Pillow确定页数时异常; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." msgstr "未安装或未找到LibreOffice。" -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." msgstr "不是办公文件格式。" +#: classes.py:327 +msgid "" +"Transformations allow changing the visual appearance of documents without " +"making permanent changes to the document file themselves." +msgstr "转换允许更改文档的可视外观,而无需对文档文件本身进行永久更改。" + +#: classes.py:375 +msgid "transformation" +msgstr "" + #: dependencies.py:16 msgid "Utility from the poppler-utils package used to inspect PDF files." msgstr "" @@ -54,51 +64,87 @@ msgid "" "into PPM format images." msgstr "" -#: forms.py:28 +#: forms.py:24 +msgid "Available transformations for this layer." +msgstr "" + +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." msgstr "“%s”不是有效的许可。" -#: links.py:36 -msgid "Create new transformation" -msgstr "创建新转换" +#: layers.py:12 +msgid "Saved transformations" +msgstr "" -#: links.py:42 +#: links.py:18 msgid "Delete" msgstr "删除" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "编辑" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" msgstr "转换" -#: models.py:37 +#: links.py:35 +msgid "Select new transformation" +msgstr "" + +#: models.py:23 models.py:85 +msgid "Name" +msgstr "名称" + +#: models.py:26 models.py:81 +msgid "Order" +msgstr "顺序" + +#: models.py:34 models.py:50 +msgid "Stored layer" +msgstr "" + +#: models.py:35 +msgid "Stored layers" +msgstr "" + +#: models.py:47 models.py:93 +msgid "Enabled" +msgstr "启用" + +#: models.py:56 models.py:75 +msgid "Object layer" +msgstr "" + +#: models.py:57 +msgid "Object layers" +msgstr "" + +#: models.py:79 msgid "" "Order in which the transformations will be executed. If left unchanged, an " "automatic order value will be assigned." msgstr "将执行转换的顺序。如果保持不变,将分配自动顺序值。" -#: models.py:39 -msgid "Order" -msgstr "顺序" - -#: models.py:43 -msgid "Name" -msgstr "名称" - -#: models.py:47 +#: models.py:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" msgstr "输入转换的参数作为YAML字典。例如:{“度”:180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" msgstr "参数" +#: models.py:100 +msgid "Layer transformation" +msgstr "" + +#: models.py:101 +msgid "Layer transformations" +msgstr "" + #: permissions.py:10 msgid "Create new transformations" msgstr "创建新转换" @@ -115,92 +161,115 @@ msgstr "编辑转换" msgid "View existing transformations" msgstr "查看现有转换" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." msgstr "将使用图形转换后端。" -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." msgstr "图形转换后端的配置选项。" -#: transformations.py:81 +#: transformations.py:100 msgid "Crop" msgstr "裁剪" -#: transformations.py:156 +#: transformations.py:178 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:280 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:377 msgid "Flip" msgstr "翻动" -#: transformations.py:167 +#: transformations.py:388 msgid "Gaussian blur" msgstr "高斯模糊" -#: transformations.py:177 +#: transformations.py:398 msgid "Line art" msgstr "线条艺术" -#: transformations.py:188 +#: transformations.py:409 msgid "Mirror" msgstr "镜像" -#: transformations.py:199 +#: transformations.py:420 msgid "Resize" msgstr "调整大小" -#: transformations.py:226 +#: transformations.py:447 msgid "Rotate" msgstr "旋转" -#: transformations.py:252 +#: transformations.py:473 msgid "Rotate 90 degrees" msgstr "旋转90度" -#: transformations.py:263 +#: transformations.py:484 msgid "Rotate 180 degrees" msgstr "旋转180度" -#: transformations.py:274 +#: transformations.py:495 msgid "Rotate 270 degrees" msgstr "旋转270度" -#: transformations.py:284 +#: transformations.py:505 msgid "Unsharp masking" msgstr "钝化掩模" -#: transformations.py:300 +#: transformations.py:521 msgid "Zoom" msgstr "放大" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." msgstr "输入有效的YAML值。" -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "为%s创建新的转换" +msgid "Error creating transforamtion: %s." +msgstr "" -#: views.py:127 +#: views.py:79 +#, python-format +msgid "" +"Create layer \"%(layer)s\" transformation \"%(transformation)s\" for: " +"%(object)s" +msgstr "" + +#: views.py:140 #, python-format msgid "Delete transformation \"%(transformation)s\" for: %(content_object)s?" msgstr "对%(content_object)s删除转换“%(transformation)s”?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" msgstr "对%(content_object)s编辑转换“%(transformation)s”" -#: views.py:227 -msgid "" -"Transformations allow changing the visual appearance of documents without " -"making permanent changes to the document file themselves." -msgstr "转换允许更改文档的可视外观,而无需对文档文件本身进行永久更改。" - -#: views.py:231 -msgid "No transformations" -msgstr "没有转换" - -#: views.py:232 +#: views.py:242 #, python-format -msgid "Transformations for: %s" -msgstr "%s的转换" +msgid "There are no entries for layer \"%(layer_name)s\"" +msgstr "" + +#: views.py:245 +#, python-format +msgid "Layer \"%(layer)s\" transformations for: %(object)s" +msgstr "" + +#: views.py:293 +msgid "Transformation created successfully." +msgstr "" + +#: views.py:314 +msgid "Select" +msgstr "" + +#: views.py:316 +#, python-format +msgid "Select new layer \"%(layer)s\" transformation for: %(object)s" +msgstr "" diff --git a/mayan/apps/converter/managers.py b/mayan/apps/converter/managers.py index 5856231203..e0fd3fa65c 100644 --- a/mayan/apps/converter/managers.py +++ b/mayan/apps/converter/managers.py @@ -2,80 +2,89 @@ from __future__ import unicode_literals import logging -import yaml - -try: - from yaml import CSafeLoader as SafeLoader, CSafeDumper as SafeDumper -except ImportError: - from yaml import SafeLoader, SafeDumper - +from django.apps import apps from django.contrib.contenttypes.models import ContentType -from django.db import models, transaction +from django.core.exceptions import PermissionDenied +from django.db import models +from mayan.apps.acls.models import AccessControlList +from mayan.apps.common.serialization import yaml_load + +from .classes import Layer from .transformations import BaseTransformation logger = logging.getLogger(__name__) -class TransformationManager(models.Manager): - def add_to_object(self, obj, transformation, arguments=None): - content_type = ContentType.objects.get_for_model(model=obj) - - self.create( - content_type=content_type, object_id=obj.pk, - name=transformation.name, arguments=yaml.dump( - data=arguments, Dumper=SafeDumper - ) - ) - - def copy(self, source, targets): - """ - Copy transformation from source to all targets - """ - content_type = ContentType.objects.get_for_model(model=source) - - # Get transformations - transformations = self.filter( - content_type=content_type, object_id=source.pk - ).values('name', 'arguments', 'order') - logger.debug('source transformations: %s', transformations) - - # Get all targets from target QS - targets_dict = map( - lambda entry: { - 'content_type': entry[0], 'object_id': entry[1] - }, zip( - ContentType.objects.get_for_models(models=targets).values(), - targets.values_list('pk', flat=True) - ) - ) - logger.debug('targets: %s', targets_dict) - - # Combine the two - results = [] - for instance in targets_dict: - for transformation in transformations: - result = instance.copy() - result.update(transformation) - results.append(dict(result)) - - logger.debug('results: %s', results) - - # Bulk create for a single DB query - with transaction.atomic(): - self.bulk_create( - map(lambda entry: self.model(**entry), results), - ) - - def get_for_object(self, obj, as_classes=False): +class LayerTransformationManager(models.Manager): + def get_for_object( + self, obj, as_classes=False, maximum_layer_order=None, + only_stored_layer=None, user=None + ): """ as_classes == True returns the transformation classes from .classes ready to be feed to the converter class """ + Layer.update() + + StoredLayer = apps.get_model( + app_label='converter', model_name='StoredLayer' + ) content_type = ContentType.objects.get_for_model(model=obj) transformations = self.filter( - content_type=content_type, object_id=obj.pk + enabled=True, object_layer__content_type=content_type, + object_layer__object_id=obj.pk, object_layer__enabled=True + ) + + access_layers = StoredLayer.objects.all() + exclude_layers = StoredLayer.objects.none() + + if maximum_layer_order: + access_layers = StoredLayer.objects.filter( + order__lte=maximum_layer_order + ) + exclude_layers = StoredLayer.objects.filter( + order__gt=maximum_layer_order + ) + + for stored_layer in access_layers: + access_permission = stored_layer.get_layer().permissions.get( + 'access_permission', None + ) + if access_permission: + try: + AccessControlList.objects.check_access( + obj=obj, permissions=(access_permission,), user=user + ) + except PermissionDenied: + access_layers = access_layers.exclude(pk=stored_layer.pk) + + for stored_layer in exclude_layers: + exclude_permission = stored_layer.get_layer().permissions.get( + 'exclude_permission', None + ) + if exclude_permission: + try: + AccessControlList.objects.check_access( + obj=obj, permissions=(exclude_permission,), user=user + ) + except PermissionDenied: + pass + else: + exclude_layers = exclude_layers.exclude(pk=stored_layer.pk) + + if only_stored_layer: + transformations = transformations.filter( + object_layer__stored_layer=only_stored_layer + ) + + transformations = transformations.filter( + object_layer__stored_layer__in=access_layers + ) + + transformations = transformations.exclude( + object_layer__stored_layer__in=exclude_layers ) if as_classes: @@ -96,9 +105,8 @@ class TransformationManager(models.Manager): # Some transformations don't require arguments # return an empty dictionary as ** doesn't allow None if transformation.arguments: - kwargs = yaml.load( + kwargs = yaml_load( stream=transformation.arguments, - Loader=SafeLoader ) else: kwargs = {} diff --git a/mayan/apps/converter/migrations/0014_auto_20190814_0013.py b/mayan/apps/converter/migrations/0014_auto_20190814_0013.py new file mode 100644 index 0000000000..a1221ebf4e --- /dev/null +++ b/mayan/apps/converter/migrations/0014_auto_20190814_0013.py @@ -0,0 +1,81 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import mayan.apps.converter.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('converter', '0013_auto_20180823_2353'), + ] + + operations = [ + migrations.CreateModel( + name='LayerTransformation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.PositiveIntegerField(blank=True, db_index=True, default=0, help_text='Order in which the transformations will be executed. If left unchanged, an automatic order value will be assigned.', verbose_name='Order')), + ('name', models.CharField(choices=[('crop', 'Crop: left, top, right, bottom'), ('draw_rectangle', 'Draw rectangle: left, top, right, bottom, fillcolor, outlinecolor, outlinewidth'), ('draw_rectangle_percent', 'Draw rectangle (percents coordinates): left, top, right, bottom, fillcolor, outlinecolor, outlinewidth'), ('flip', 'Flip'), ('gaussianblur', 'Gaussian blur: radius'), ('lineart', 'Line art'), ('mirror', 'Mirror'), ('redaction_percent', 'Redaction: left, top, right, bottom'), ('resize', 'Resize: width, height'), ('rotate', 'Rotate: degrees, fillcolor'), ('rotate180', 'Rotate 180 degrees'), ('rotate270', 'Rotate 270 degrees'), ('rotate90', 'Rotate 90 degrees'), ('unsharpmask', 'Unsharp masking: radius, percent, threshold'), ('zoom', 'Zoom: percent')], max_length=128, verbose_name='Name')), + ('arguments', models.TextField(blank=True, help_text='Enter the arguments for the transformation as a YAML dictionary. ie: {"degrees": 180}', validators=[mayan.apps.converter.validators.YAMLValidator()], verbose_name='Arguments')), + ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ], + options={ + 'ordering': ('object_layer__stored_layer__order', 'order'), + 'verbose_name': 'Layer transformation', + 'verbose_name_plural': 'Layer transformations', + }, + ), + migrations.CreateModel( + name='ObjectLayer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('object_id', models.PositiveIntegerField()), + ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ], + options={ + 'ordering': ('stored_layer__order',), + 'verbose_name': 'Object layer', + 'verbose_name_plural': 'Object layers', + }, + ), + migrations.CreateModel( + name='StoredLayer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('order', models.PositiveIntegerField(db_index=True, unique=True, verbose_name='Order')), + ], + options={ + 'ordering': ('order',), + 'verbose_name': 'Stored layer', + 'verbose_name_plural': 'Stored layers', + }, + ), + migrations.AlterField( + model_name='transformation', + name='name', + field=models.CharField(choices=[('crop', 'Crop: left, top, right, bottom'), ('draw_rectangle', 'Draw rectangle: left, top, right, bottom, fillcolor, outlinecolor, outlinewidth'), ('draw_rectangle_percent', 'Draw rectangle (percents coordinates): left, top, right, bottom, fillcolor, outlinecolor, outlinewidth'), ('flip', 'Flip'), ('gaussianblur', 'Gaussian blur: radius'), ('lineart', 'Line art'), ('mirror', 'Mirror'), ('redaction_percent', 'Redaction: left, top, right, bottom'), ('resize', 'Resize: width, height'), ('rotate', 'Rotate: degrees, fillcolor'), ('rotate180', 'Rotate 180 degrees'), ('rotate270', 'Rotate 270 degrees'), ('rotate90', 'Rotate 90 degrees'), ('unsharpmask', 'Unsharp masking: radius, percent, threshold'), ('zoom', 'Zoom: percent')], max_length=128, verbose_name='Name'), + ), + migrations.AddField( + model_name='objectlayer', + name='stored_layer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='object_layers', to='converter.StoredLayer', verbose_name='Stored layer'), + ), + migrations.AddField( + model_name='layertransformation', + name='object_layer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transformations', to='converter.ObjectLayer', verbose_name='Object layer'), + ), + migrations.AlterUniqueTogether( + name='objectlayer', + unique_together=set([('content_type', 'object_id', 'stored_layer')]), + ), + migrations.AlterUniqueTogether( + name='layertransformation', + unique_together=set([('object_layer', 'order')]), + ), + ] diff --git a/mayan/apps/converter/migrations/0015_auto_20190814_0014.py b/mayan/apps/converter/migrations/0015_auto_20190814_0014.py new file mode 100644 index 0000000000..4704120e34 --- /dev/null +++ b/mayan/apps/converter/migrations/0015_auto_20190814_0014.py @@ -0,0 +1,76 @@ +from __future__ import unicode_literals + +from django.db import migrations + +from ..layers import layer_saved_transformations + + +def code_copy_transformations(apps, schema_editor): + ObjectLayer = apps.get_model( + app_label='converter', model_name='ObjectLayer' + ) + StoredLayer = apps.get_model( + app_label='converter', model_name='StoredLayer' + ) + Transformation = apps.get_model( + app_label='converter', model_name='Transformation' + ) + + stored_layer, created = StoredLayer.objects.using(schema_editor.connection.alias).update_or_create( + name=layer_saved_transformations.name, defaults={'order': layer_saved_transformations.order} + ) + + for transformation in Transformation.objects.using(schema_editor.connection.alias).all(): + object_layer, created = ObjectLayer.objects.get_or_create( + content_type=transformation.content_type, + object_id=transformation.object_id, + stored_layer=stored_layer + ) + + object_layer.transformations.create( + order=transformation.order, name=transformation.name, + arguments=transformation.arguments + ) + + +def code_copy_transformations_reverse(apps, schema_editor): + LayerTransformation = apps.get_model( + app_label='converter', model_name='LayerTransformation' + ) + ObjectLayer = apps.get_model( + app_label='converter', model_name='ObjectLayer' + ) + StoredLayer = apps.get_model( + app_label='converter', model_name='StoredLayer' + ) + Transformation = apps.get_model( + app_label='converter', model_name='Transformation' + ) + + stored_layer, created = StoredLayer.objects.using(schema_editor.connection.alias).update_or_create( + name=layer_saved_transformations.name, defaults={'order': layer_saved_transformations.order} + ) + + for object_layer in ObjectLayer.objects.using(schema_editor.connection.alias).filter(stored_layer=stored_layer): + for layer_transformation in LayerTransformation.objects.using(schema_editor.connection.alias).filter(object_layer=object_layer): + Transformation.objects.using(schema_editor.connection.alias).create( + content_type=object_layer.content_type, + object_id=object_layer.object_id, + order=layer_transformation.order, + name=layer_transformation.name, + arguments=layer_transformation.arguments + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('converter', '0014_auto_20190814_0013'), + ] + + operations = [ + migrations.RunPython( + code=code_copy_transformations, + reverse_code=code_copy_transformations_reverse + ) + ] diff --git a/mayan/apps/converter/migrations/0016_auto_20190814_0510.py b/mayan/apps/converter/migrations/0016_auto_20190814_0510.py new file mode 100644 index 0000000000..648c3dff9a --- /dev/null +++ b/mayan/apps/converter/migrations/0016_auto_20190814_0510.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('converter', '0015_auto_20190814_0014'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='transformation', + unique_together=set([]), + ), + migrations.RemoveField( + model_name='transformation', + name='content_type', + ), + migrations.DeleteModel( + name='Transformation', + ), + ] diff --git a/mayan/apps/converter/models.py b/mayan/apps/converter/models.py index 73df0efade..bb263bc2d4 100644 --- a/mayan/apps/converter/models.py +++ b/mayan/apps/converter/models.py @@ -9,7 +9,8 @@ from django.db.models import Max from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -from .managers import TransformationManager +from .classes import Layer +from .managers import LayerTransformationManager from .transformations import BaseTransformation from .validators import YAMLValidator @@ -17,7 +18,47 @@ logger = logging.getLogger(__name__) @python_2_unicode_compatible -class Transformation(models.Model): +class StoredLayer(models.Model): + name = models.CharField( + max_length=64, unique=True, verbose_name=_('Name') + ) + order = models.PositiveIntegerField( + db_index=True, unique=True, verbose_name=_('Order') + ) + + def __str__(self): + return self.name + + class Meta: + ordering = ('order',) + verbose_name = _('Stored layer') + verbose_name_plural = _('Stored layers') + + def get_layer(self): + return Layer.get(name=self.name) + + +class ObjectLayer(models.Model): + content_type = models.ForeignKey(on_delete=models.CASCADE, to=ContentType) + object_id = models.PositiveIntegerField() + content_object = GenericForeignKey( + ct_field='content_type', fk_field='object_id' + ) + enabled = models.BooleanField(default=True, verbose_name=_('Enabled')) + stored_layer = models.ForeignKey( + on_delete=models.CASCADE, related_name='object_layers', to=StoredLayer, + verbose_name=_('Stored layer') + ) + + class Meta: + ordering = ('stored_layer__order',) + unique_together = ('content_type', 'object_id', 'stored_layer') + verbose_name = _('Object layer') + verbose_name_plural = _('Object layers') + + +@python_2_unicode_compatible +class LayerTransformation(models.Model): """ Model that stores the transformation and transformation arguments for a given object @@ -29,9 +70,10 @@ class Transformation(models.Model): transformation argument. Example: if a page is rotated with the Rotation transformation, this field will show by how many degrees it was rotated. """ - content_type = models.ForeignKey(on_delete=models.CASCADE, to=ContentType) - object_id = models.PositiveIntegerField() - content_object = GenericForeignKey('content_type', 'object_id') + object_layer = models.ForeignKey( + on_delete=models.CASCADE, related_name='transformations', + to=ObjectLayer, verbose_name=_('Object layer') + ) order = models.PositiveIntegerField( blank=True, db_index=True, default=0, help_text=_( 'Order in which the transformations will be executed. If left ' @@ -48,23 +90,27 @@ class Transformation(models.Model): 'dictionary. ie: {"degrees": 180}' ), validators=[YAMLValidator()], verbose_name=_('Arguments') ) + enabled = models.BooleanField(default=True, verbose_name=_('Enabled')) - objects = TransformationManager() + objects = LayerTransformationManager() class Meta: - ordering = ('order',) - unique_together = ('content_type', 'object_id', 'order') - verbose_name = _('Transformation') - verbose_name_plural = _('Transformations') + ordering = ('object_layer__stored_layer__order', 'order',) + unique_together = ('object_layer', 'order') + verbose_name = _('Layer transformation') + verbose_name_plural = _('Layer transformations') def __str__(self): return self.get_name_display() + def get_transformation_class(self): + return BaseTransformation.get(name=self.name) + def save(self, *args, **kwargs): if not self.order: - last_order = Transformation.objects.filter( - content_type=self.content_type, object_id=self.object_id + last_order = LayerTransformation.objects.filter( + object_layer=self.object_layer ).aggregate(Max('order'))['order__max'] if last_order is not None: self.order = last_order + 1 - super(Transformation, self).save(*args, **kwargs) + super(LayerTransformation, self).save(*args, **kwargs) diff --git a/mayan/apps/converter/setting_migrations.py b/mayan/apps/converter/setting_migrations.py new file mode 100644 index 0000000000..11ed7cc02e --- /dev/null +++ b/mayan/apps/converter/setting_migrations.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from mayan.apps.common.serialization import yaml_load +from mayan.apps.smart_settings.classes import NamespaceMigration + + +class ConvertSettingMigration(NamespaceMigration): + """ + From version 0001 to 0002 backend arguments are no longer quoted + but YAML valid too. Changed in version 3.3. + """ + def converter_graphics_backend_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) diff --git a/mayan/apps/converter/settings.py b/mayan/apps/converter/settings.py index b680fa6d47..26641999dc 100644 --- a/mayan/apps/converter/settings.py +++ b/mayan/apps/converter/settings.py @@ -8,30 +8,27 @@ from .literals import ( DEFAULT_LIBREOFFICE_PATH, DEFAULT_PDFTOPPM_DPI, DEFAULT_PDFTOPPM_FORMAT, DEFAULT_PDFTOPPM_PATH, DEFAULT_PDFINFO_PATH, DEFAULT_PILLOW_FORMAT ) +from .setting_migrations import ConvertSettingMigration -namespace = Namespace(label=_('Converter'), name='converter') +namespace = Namespace( + label=_('Converter'), migration_class=ConvertSettingMigration, + name='converter', version='0002' +) setting_graphics_backend = namespace.add_setting( default='mayan.apps.converter.backends.python.Python', help_text=_('Graphics conversion backend to use.'), global_name='CONVERTER_GRAPHICS_BACKEND', ) -setting_graphics_backend_config = namespace.add_setting( - default=''' - {{ - libreoffice_path: {}, - pdftoppm_dpi: {}, - pdftoppm_format: {}, - pdftoppm_path: {}, - pdfinfo_path: {}, - pillow_format: {} - - }} - '''.replace('\n', '').format( - DEFAULT_LIBREOFFICE_PATH, DEFAULT_PDFTOPPM_DPI, - DEFAULT_PDFTOPPM_FORMAT, DEFAULT_PDFTOPPM_PATH, DEFAULT_PDFINFO_PATH, - DEFAULT_PILLOW_FORMAT - ), help_text=_( +setting_graphics_backend_arguments = namespace.add_setting( + default={ + 'libreoffice_path': DEFAULT_LIBREOFFICE_PATH, + 'pdftoppm_dpi': DEFAULT_PDFTOPPM_DPI, + 'pdftoppm_format': DEFAULT_PDFTOPPM_FORMAT, + 'pdftoppm_path': DEFAULT_PDFTOPPM_PATH, + 'pdfinfo_path': DEFAULT_PDFINFO_PATH, + 'pillow_format': DEFAULT_PILLOW_FORMAT, + }, help_text=_( 'Configuration options for the graphics conversion backend.' - ), global_name='CONVERTER_GRAPHICS_BACKEND_CONFIG', quoted=True + ), global_name='CONVERTER_GRAPHICS_BACKEND_ARGUMENTS' ) diff --git a/mayan/apps/converter/tests/literals.py b/mayan/apps/converter/tests/literals.py index fbad176ee9..e40d463e40 100644 --- a/mayan/apps/converter/tests/literals.py +++ b/mayan/apps/converter/tests/literals.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals TEST_TRANSFORMATION_NAME = 'rotate' TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180' +TEST_TRANSFORMATION_ARGUMENT_EDITED = 'degrees: 270' TEST_TRANSFORMATION_COMBINED_CACHE_HASH = '384bf78014d2aed7255d9e548a0694c70af0b22545653214bcceb1ac6286b5f7' TEST_TRANSFORMATION_RESIZE_CACHE_HASH = b'4aa319f5a6950985a19380a1f279a66769d04138bd1583844270fe8c269260fc' TEST_TRANSFORMATION_RESIZE_CACHE_HASH_2 = b'cc8d220d40e810b995181c0c69b44b7a61c3bb039c0be96a5465fcaf698ca99a' diff --git a/mayan/apps/converter/tests/mixins.py b/mayan/apps/converter/tests/mixins.py new file mode 100644 index 0000000000..7fffc10f4d --- /dev/null +++ b/mayan/apps/converter/tests/mixins.py @@ -0,0 +1,101 @@ +from __future__ import unicode_literals + +from django.contrib.contenttypes.models import ContentType + +from mayan.apps.acls.classes import ModelPermission +from mayan.apps.permissions.tests.mixins import PermissionTestMixin + +from ..classes import Layer +from ..models import ObjectLayer + +from .literals import ( + TEST_TRANSFORMATION_NAME, TEST_TRANSFORMATION_ARGUMENT, + TEST_TRANSFORMATION_ARGUMENT_EDITED +) + + +class LayerTestCaseMixin(object): + def setUp(self): + super(LayerTestCaseMixin, self).setUp() + Layer.invalidate_cache() + + +class LayerTestMixin(PermissionTestMixin): + test_layer = Layer( + label='Test layer', name='test_layer', order=1000, + permissions={} + ) + + def setUp(self): + super(LayerTestMixin, self).setUp() + self._create_test_permission() + + self.test_layer_permission = self.test_permission + ModelPermission.register( + model=self.test_document._meta.model, permissions=( + self.test_permission, + ) + ) + + self.test_layer.permissions = { + 'create': self.test_layer_permission, + 'delete': self.test_layer_permission, + 'edit': self.test_layer_permission, + 'select': self.test_layer_permission, + 'view': self.test_layer_permission, + } + + +class TransformationTestMixin(LayerTestMixin): + def _create_test_transformation(self): + content_type = ContentType.objects.get_for_model(model=self.test_document) + object_layer, created = ObjectLayer.objects.get_or_create( + content_type=content_type, object_id=self.test_document.pk, + stored_layer=self.test_layer.stored_layer + ) + + self.test_transformation = object_layer.transformations.create( + name=TEST_TRANSFORMATION_NAME, + arguments=TEST_TRANSFORMATION_ARGUMENT + ) + + +class TransformationViewsTestMixin(object): + def _request_transformation_create_view(self): + return self.post( + viewname='converter:transformation_create', kwargs={ + 'app_label': 'documents', 'model': 'document', + 'object_id': self.test_document.pk, + 'layer_name': self.test_layer.name, + 'transformation_name': TEST_TRANSFORMATION_NAME, + }, data={ + 'arguments': TEST_TRANSFORMATION_ARGUMENT + } + ) + + def _request_transformation_delete_view(self): + return self.post( + viewname='converter:transformation_delete', kwargs={ + 'layer_name': self.test_layer.name, + 'pk': self.test_transformation.pk + } + ) + + def _request_transformation_edit_view(self): + return self.post( + viewname='converter:transformation_edit', kwargs={ + 'layer_name': self.test_layer.name, + 'pk': self.test_transformation.pk + }, data={ + 'arguments': TEST_TRANSFORMATION_ARGUMENT_EDITED + } + ) + + def _request_transformation_list_view(self): + return self.get( + viewname='converter:transformation_list', kwargs={ + 'app_label': 'documents', 'model': 'document', + 'object_id': self.test_document.pk, + 'layer_name': self.test_layer.name + } + ) diff --git a/mayan/apps/converter/tests/test_setting_migrations.py b/mayan/apps/converter/tests/test_setting_migrations.py new file mode 100644 index 0000000000..028fdd3de4 --- /dev/null +++ b/mayan/apps/converter/tests/test_setting_migrations.py @@ -0,0 +1,39 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.utils.encoding import force_bytes + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.storage.utils import NamedTemporaryFile + +from ..settings import setting_graphics_backend_arguments + + +class ConverterSettingMigrationTestCase( + EnvironmentTestCaseMixin, BaseTestCase +): + def test_converter_graphics_backend_arguments_0001_migration(self): + + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'CONVERTER_GRAPHICS_BACKEND_ARGUMENTS', + '"{}"'.format( + Setting.serialize_value(value=test_value) + ) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_graphics_backend_arguments.value, + test_value + ) diff --git a/mayan/apps/converter/tests/test_transformations.py b/mayan/apps/converter/tests/test_transformations.py index c596abfa27..80c5b49509 100644 --- a/mayan/apps/converter/tests/test_transformations.py +++ b/mayan/apps/converter/tests/test_transformations.py @@ -2,9 +2,8 @@ from __future__ import unicode_literals from django.test import TestCase -from mayan.apps.documents.tests import GenericDocumentTestCase +from mayan.apps.documents.tests.base import GenericDocumentTestCase -from ..models import Transformation from ..transformations import ( BaseTransformation, TransformationCrop, TransformationLineArt, TransformationResize, TransformationRotate, TransformationRotate90, @@ -24,6 +23,7 @@ from .literals import ( TEST_TRANSFORMATION_ZOOM_CACHE_HASH, TEST_TRANSFORMATION_ZOOM_PERCENT, ) +from .mixins import LayerTestMixin class TransformationBaseTestCase(TestCase): @@ -110,90 +110,89 @@ class TransformationBaseTestCase(TestCase): ) -class TransformationTestCase(GenericDocumentTestCase): +class TransformationTestCase(LayerTestMixin, GenericDocumentTestCase): def test_crop_transformation_optional_arguments(self): self._silence_logger(name='mayan.apps.converter.managers') document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationCrop, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationCrop, arguments={'top': '10'} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) def test_crop_transformation_invalid_arguments(self): self._silence_logger(name='mayan.apps.converter.managers') document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationCrop, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationCrop, arguments={'top': 'x', 'left': '-'} ) - - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) def test_crop_transformation_non_valid_range_arguments(self): self._silence_logger(name='mayan.apps.converter.managers') document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationCrop, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationCrop, arguments={'top': '-1000', 'bottom': '100000000'} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) def test_crop_transformation_overlapping_ranges_arguments(self): self._silence_logger(name='mayan.apps.converter.managers') document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationCrop, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationCrop, arguments={'top': '1000', 'bottom': '1000'} ) - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationCrop, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationCrop, arguments={'left': '1000', 'right': '10000'} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) def test_lineart_transformations(self): document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationLineArt, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationLineArt, arguments={} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) def test_rotate_transformations(self): document_page = self.test_document.pages.first() - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationRotate90, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationRotate90, arguments={} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationRotate180, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationRotate180, arguments={} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) - Transformation.objects.add_to_object( - obj=document_page, transformation=TransformationRotate270, + self.test_layer.add_transformation_to( + obj=document_page, transformation_class=TransformationRotate270, arguments={} ) - self.assertTrue(document_page.generate_image().startswith('page')) + self.assertTrue(document_page.generate_image()) diff --git a/mayan/apps/converter/tests/test_views.py b/mayan/apps/converter/tests/test_views.py index faf33c8259..c07152b47e 100644 --- a/mayan/apps/converter/tests/test_views.py +++ b/mayan/apps/converter/tests/test_views.py @@ -1,110 +1,123 @@ from __future__ import unicode_literals -from django.contrib.contenttypes.models import ContentType +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from ..models import LayerTransformation -from ..models import Transformation -from ..permissions import ( - permission_transformation_create, permission_transformation_delete, - permission_transformation_view -) - -from .literals import TEST_TRANSFORMATION_NAME, TEST_TRANSFORMATION_ARGUMENT +from .mixins import TransformationTestMixin, TransformationViewsTestMixin -class TransformationViewsTestCase(GenericDocumentViewTestCase): - def _transformation_create_view(self): - return self.post( - viewname='converter:transformation_create', kwargs={ - 'app_label': 'documents', 'model': 'document', - 'object_id': self.test_document.pk - }, data={ - 'name': TEST_TRANSFORMATION_NAME, - 'arguments': TEST_TRANSFORMATION_ARGUMENT - } - ) +class TransformationViewsTestCase( + TransformationTestMixin, TransformationViewsTestMixin, + GenericDocumentViewTestCase +): + def test_transformation_create_view_no_permission(self): + transformation_count = LayerTransformation.objects.count() - def test_transformation_create_view_no_permissions(self): - transformation_count = Transformation.objects.count() - - response = self._transformation_create_view() - self.assertEqual(response.status_code, 403) - - self.assertEqual(Transformation.objects.count(), transformation_count) - - def test_transformation_create_view_with_permissions(self): - self.grant_permission(permission=permission_transformation_create) - - transformation_count = Transformation.objects.count() - - response = self._transformation_create_view() - self.assertEqual(response.status_code, 302) + response = self._request_transformation_create_view() + self.assertEqual(response.status_code, 404) self.assertEqual( - Transformation.objects.count(), transformation_count + 1 + LayerTransformation.objects.count(), transformation_count ) - def _request_transformation_delete_view(self): - return self.post( - viewname='converter:transformation_delete', kwargs={ - 'pk': self.test_transformation.pk - } - ) - - def _create_test_transformation(self): - content_type = ContentType.objects.get_for_model(model=self.test_document) - - self.test_transformation = Transformation.objects.create( - content_type=content_type, object_id=self.test_document.pk, - name=TEST_TRANSFORMATION_NAME, - arguments=TEST_TRANSFORMATION_ARGUMENT - ) - - def test_transformation_delete_view_no_permissions(self): - self._create_test_transformation() - - transformation_count = Transformation.objects.count() - - response = self._request_transformation_delete_view() - self.assertEqual(response.status_code, 403) - - self.assertEqual( - Transformation.objects.count(), transformation_count - ) - - def test_transformation_delete_view_with_permissions(self): - self._create_test_transformation() - - self.grant_permission(permission=permission_transformation_delete) - - transformation_count = Transformation.objects.count() - - response = self._request_transformation_delete_view() - self.assertEqual(response.status_code, 302) - - self.assertEqual( - Transformation.objects.count(), transformation_count - 1 - ) - - def _transformation_list_view(self): - return self.get( - viewname='converter:transformation_list', kwargs={ - 'app_label': 'documents', 'model': 'document', - 'object_id': self.test_document.pk - } - ) - - def test_transformation_list_view_no_permissions(self): - response = self._transformation_list_view() - self.assertEqual(response.status_code, 403) - - def test_transformation_list_view_with_permissions(self): + def test_transformation_create_view_with_permission(self): self.grant_access( - obj=self.test_document, permission=permission_transformation_view + obj=self.test_document, permission=self.test_permission ) - response = self._transformation_list_view() + transformation_count = LayerTransformation.objects.count() + + response = self._request_transformation_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + LayerTransformation.objects.count(), transformation_count + 1 + ) + + def test_transformation_delete_view_no_permission(self): + self._create_test_transformation() + + transformation_count = LayerTransformation.objects.count() + + response = self._request_transformation_delete_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + LayerTransformation.objects.count(), transformation_count + ) + + def test_transformation_delete_view_with_access(self): + self._create_test_transformation() + + self.grant_access( + obj=self.test_document, permission=self.test_layer_permission + ) + + transformation_count = LayerTransformation.objects.count() + + response = self._request_transformation_delete_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + LayerTransformation.objects.count(), transformation_count - 1 + ) + + def test_transformation_edit_view_no_permission(self): + self._create_test_transformation() + + transformation_arguments = self.test_transformation.arguments + + response = self._request_transformation_edit_view() + self.assertEqual(response.status_code, 404) + + self.test_transformation.refresh_from_db() + self.assertEqual( + transformation_arguments, self.test_transformation.arguments + ) + + def test_transformation_edit_view_with_access(self): + self._create_test_transformation() + + self.grant_access( + obj=self.test_document, permission=self.test_layer_permission + ) + + transformation_arguments = self.test_transformation.arguments + response = self._request_transformation_edit_view() + self.assertEqual(response.status_code, 302) + + self.test_transformation.refresh_from_db() + self.assertNotEqual( + transformation_arguments, self.test_transformation.arguments + ) + + def test_transformation_list_view_no_permission(self): + self._create_test_transformation() + + response = self._request_transformation_list_view() + self.assertNotContains( + response=response, text=self.test_document.label, status_code=404 + ) + self.assertNotContains( + response=response, + text=self.test_transformation.get_transformation_class().label, + status_code=404 + ) + + def test_transformation_list_view_with_access(self): + self._create_test_transformation() + + self.grant_access( + obj=self.test_document, permission=self.test_permission + ) + + response = self._request_transformation_list_view() self.assertContains( response=response, text=self.test_document.label, status_code=200 ) + self.assertContains( + response=response, + text=self.test_transformation.get_transformation_class().label, + status_code=200 + ) diff --git a/mayan/apps/converter/transformations.py b/mayan/apps/converter/transformations.py index e9eada168a..f2c4b1cee5 100644 --- a/mayan/apps/converter/transformations.py +++ b/mayan/apps/converter/transformations.py @@ -3,22 +3,32 @@ from __future__ import unicode_literals import hashlib import logging -from PIL import Image, ImageColor, ImageFilter +from PIL import Image, ImageColor, ImageDraw, ImageFilter +from django.utils.encoding import force_bytes, force_text from django.utils.translation import string_concat, ugettext_lazy as _ -from django.utils.encoding import force_bytes + +from .layers import layer_saved_transformations logger = logging.getLogger(__name__) -class BaseTransformation(object): +class BaseTransformationType(type): + def __str__(self): + return force_text(self.label) + + +class BaseTransformation(object, metaclass=BaseTransformationType): """ Transformation can modify the appearance of the document's page preview. Some transformation available are: Rotate, zoom, resize and crop. """ arguments = () name = 'base_transformation' + _layer_transformations = {} _registry = {} + # PY 2 + __metaclass__ = BaseTransformationType @staticmethod def combine(transformations): @@ -44,16 +54,25 @@ class BaseTransformation(object): return cls.label @classmethod - def get_transformation_choices(cls): + def get_transformation_choices(cls, layer=None): + if layer: + transformation_list = [ + (transformation.name, transformation) for transformation in cls._layer_transformations[layer] + ] + else: + transformation_list = cls._registry.items() + return sorted( [ - (name, klass.get_label()) for name, klass in cls._registry.items() + (name, klass.get_label()) for name, klass in transformation_list ] ) @classmethod - def register(cls, transformation): + def register(cls, layer, transformation): cls._registry[transformation.name] = transformation + cls._layer_transformations.setdefault(layer, []) + cls._layer_transformations[layer].append(transformation) def __init__(self, **kwargs): self.kwargs = {} @@ -151,6 +170,208 @@ class TransformationCrop(BaseTransformation): return self.image.crop((left, top, right, bottom)) +class TransformationDrawRectangle(BaseTransformation): + arguments = ( + 'left', 'top', 'right', 'bottom', 'fillcolor', 'outlinecolor', + 'outlinewidth' + ) + label = _('Draw rectangle') + name = 'draw_rectangle' + + def execute_on(self, *args, **kwargs): + super(TransformationDrawRectangle, self).execute_on(*args, **kwargs) + + try: + left = int(self.left or '0') + except ValueError: + left = 0 + + try: + top = int(self.top or '0') + except ValueError: + top = 0 + + try: + right = int(self.right or '0') + except ValueError: + right = 0 + + try: + bottom = int(self.bottom or '0') + except ValueError: + bottom = 0 + + if left < 0: + left = 0 + + if left > self.image.size[0] - 1: + left = self.image.size[0] - 1 + + if top < 0: + top = 0 + + if top > self.image.size[1] - 1: + top = self.image.size[1] - 1 + + if right < 0: + right = 0 + + if right > self.image.size[0] - 1: + right = self.image.size[0] - 1 + + if bottom < 0: + bottom = 0 + + if bottom > self.image.size[1] - 1: + bottom = self.image.size[1] - 1 + + # Invert right value + # Pillow uses left, top, right, bottom to define a viewport + # of real coordinates + # We invert the right and bottom to define a viewport + # that can crop from the right and bottom borders without + # having to know the real dimensions of an image + right = self.image.size[0] - right + bottom = self.image.size[1] - bottom + + if left > right: + left = right - 1 + + if top > bottom: + top = bottom - 1 + + logger.debug( + 'left: %f, top: %f, right: %f, bottom: %f', left, top, right, + bottom + ) + + fillcolor_value = getattr(self, 'fillcolor', None) + if fillcolor_value: + fill_color = ImageColor.getrgb(fillcolor_value) + else: + fill_color = 0 + + outlinecolor_value = getattr(self, 'outlinecolor', None) + if outlinecolor_value: + outline_color = ImageColor.getrgb(outlinecolor_value) + else: + outline_color = None + + outlinewidth_value = getattr(self, 'outlinewidth', None) + if outlinewidth_value: + outline_width = int(outlinewidth_value) + else: + outline_width = 0 + + draw = ImageDraw.Draw(self.image) + draw.rectangle( + (left, top, right, bottom), fill=fill_color, outline=outline_color, + width=outline_width + ) + + return self.image + + +class TransformationDrawRectanglePercent(BaseTransformation): + arguments = ( + 'left', 'top', 'right', 'bottom', 'fillcolor', 'outlinecolor', + 'outlinewidth' + ) + label = _('Draw rectangle (percents coordinates)') + name = 'draw_rectangle_percent' + + def execute_on(self, *args, **kwargs): + super(TransformationDrawRectanglePercent, self).execute_on(*args, **kwargs) + + try: + left = float(self.left or '0') + except ValueError: + left = 0 + + try: + top = float(self.top or '0') + except ValueError: + top = 0 + + try: + right = float(self.right or '0') + except ValueError: + right = 0 + + try: + bottom = float(self.bottom or '0') + except ValueError: + bottom = 0 + + if left < 0: + left = 0 + + if left > 100: + left = 100 + + if top < 0: + top = 0 + + if top > 100: + top = 100 + + if right < 0: + right = 0 + + if right > 100: + right = 100 + + if bottom < 0: + bottom = 0 + + if bottom > 100: + bottom = 100 + + logger.debug( + 'left: %f, top: %f, right: %f, bottom: %f', left, top, right, + bottom + ) + + fillcolor_value = getattr(self, 'fillcolor', None) + if fillcolor_value: + fill_color = ImageColor.getrgb(fillcolor_value) + else: + fill_color = 0 + + outlinecolor_value = getattr(self, 'outlinecolor', None) + if outlinecolor_value: + outline_color = ImageColor.getrgb(outlinecolor_value) + else: + outline_color = None + + outlinewidth_value = getattr(self, 'outlinewidth', None) + if outlinewidth_value: + outline_width = int(outlinewidth_value) + else: + outline_width = 0 + + left = left / 100.0 * self.image.size[0] + top = top / 100.0 * self.image.size[1] + + # Invert right value + # Pillow uses left, top, right, bottom to define a viewport + # of real coordinates + # We invert the right and bottom to define a viewport + # that can crop from the right and bottom borders without + # having to know the real dimensions of an image + + right = self.image.size[0] - (right / 100.0 * self.image.size[0]) + bottom = self.image.size[1] - (bottom / 100.0 * self.image.size[1]) + + draw = ImageDraw.Draw(self.image) + draw.rectangle( + (left, top, right, bottom), fill=fill_color, outline=outline_color, + width=outline_width + ) + + return self.image + + class TransformationFlip(BaseTransformation): arguments = () label = _('Flip') @@ -315,15 +536,19 @@ class TransformationZoom(BaseTransformation): ) -BaseTransformation.register(transformation=TransformationCrop) -BaseTransformation.register(transformation=TransformationFlip) -BaseTransformation.register(transformation=TransformationGaussianBlur) -BaseTransformation.register(transformation=TransformationLineArt) -BaseTransformation.register(transformation=TransformationMirror) -BaseTransformation.register(transformation=TransformationResize) -BaseTransformation.register(transformation=TransformationRotate) -BaseTransformation.register(transformation=TransformationRotate90) -BaseTransformation.register(transformation=TransformationRotate180) -BaseTransformation.register(transformation=TransformationRotate270) -BaseTransformation.register(transformation=TransformationUnsharpMask) -BaseTransformation.register(transformation=TransformationZoom) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationCrop) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationDrawRectangle) +BaseTransformation.register( + layer=layer_saved_transformations, transformation=TransformationDrawRectanglePercent +) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationFlip) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationGaussianBlur) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationLineArt) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationMirror) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationResize) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationRotate) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationRotate90) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationRotate180) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationRotate270) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationUnsharpMask) +BaseTransformation.register(layer=layer_saved_transformations, transformation=TransformationZoom) diff --git a/mayan/apps/converter/urls.py b/mayan/apps/converter/urls.py index a43042decd..8a0cf36167 100644 --- a/mayan/apps/converter/urls.py +++ b/mayan/apps/converter/urls.py @@ -3,25 +3,29 @@ from __future__ import unicode_literals from django.conf.urls import url from .views import ( - TransformationCreateView, TransformationDeleteView, TransformationEditView, - TransformationListView + TransformationCreateView, TransformationDeleteView, + TransformationEditView, TransformationListView, TransformationSelectView ) urlpatterns = [ url( - regex=r'^create_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', - view=TransformationCreateView.as_view(), name='transformation_create' - ), - url( - regex=r'^list_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', + regex=r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/layers/(?P[-_\w]+)/transformations/$', view=TransformationListView.as_view(), name='transformation_list' ), url( - regex=r'^delete/(?P\d+)/$', view=TransformationDeleteView.as_view(), - name='transformation_delete' + regex=r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/layers/(?P[-_\w]+)/transformations/select/$', + view=TransformationSelectView.as_view(), name='transformation_select' ), url( - regex=r'^edit/(?P\d+)/$', view=TransformationEditView.as_view(), - name='transformation_edit' + regex=r'^object/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/layers/(?P[-_\w]+)/transformations/(?P[-_\w]+)/create/$', + view=TransformationCreateView.as_view(), name='transformation_create' + ), + url( + regex=r'^layers/(?P[-_\w]+)/transformations/(?P\d+)/delete/$', + view=TransformationDeleteView.as_view(), name='transformation_delete' + ), + url( + regex=r'^layers/(?P[-_\w]+)/transformations/(?P\d+)/edit/$', + view=TransformationEditView.as_view(), name='transformation_edit' ), ] diff --git a/mayan/apps/converter/validators.py b/mayan/apps/converter/validators.py index 49c45d0cae..dd8562a945 100644 --- a/mayan/apps/converter/validators.py +++ b/mayan/apps/converter/validators.py @@ -2,15 +2,12 @@ from __future__ import unicode_literals import yaml -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader - from django.core.exceptions import ValidationError from django.utils.deconstruct import deconstructible from django.utils.translation import ugettext_lazy as _ +from mayan.apps.common.serialization import yaml_load + @deconstructible class YAMLValidator(object): @@ -20,7 +17,7 @@ class YAMLValidator(object): def __call__(self, value): value = value.strip() try: - yaml.load(stream=value, Loader=SafeLoader) + yaml_load(stream=value) except yaml.error.YAMLError: raise ValidationError( _('Enter a valid YAML value.'), diff --git a/mayan/apps/converter/views.py b/mayan/apps/converter/views.py index fe4c042069..f03e7a576f 100644 --- a/mayan/apps/converter/views.py +++ b/mayan/apps/converter/views.py @@ -2,155 +2,167 @@ from __future__ import absolute_import, unicode_literals import logging -from django.contrib.contenttypes.models import ContentType -from django.http import Http404 -from django.shortcuts import get_object_or_404 +from django.contrib import messages +from django.http import HttpResponseRedirect from django.template import RequestContext from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from mayan.apps.acls.models import AccessControlList from mayan.apps.common.generics import ( - SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView, - SingleObjectListView + FormView, SingleObjectCreateView, SingleObjectDeleteView, + SingleObjectEditView, SingleObjectListView ) +from mayan.apps.common.mixins import ExternalContentTypeObjectMixin -from .forms import TransformationForm -from .icons import icon_transformation_list -from .links import link_transformation_create -from .models import Transformation -from .permissions import ( - permission_transformation_create, permission_transformation_delete, - permission_transformation_edit, permission_transformation_view -) +from .classes import Layer +from .forms import LayerTransformationForm, LayerTransformationSelectForm +from .links import link_transformation_select +from .models import LayerTransformation, ObjectLayer +from .transformations import BaseTransformation logger = logging.getLogger(__name__) -class TransformationCreateView(SingleObjectCreateView): - form_class = TransformationForm - +class LayerViewMixin(object): def dispatch(self, request, *args, **kwargs): - content_type = get_object_or_404( - klass=ContentType, app_label=self.kwargs['app_label'], - model=self.kwargs['model'] + self.layer = self.get_layer() + return super(LayerViewMixin, self).dispatch( + request=request, *args, **kwargs ) - try: - self.content_object = content_type.get_object_for_this_type( - pk=self.kwargs['object_id'] - ) - except content_type.model_class().DoesNotExist: - raise Http404 - - AccessControlList.objects.check_access( - obj=self.content_object, - permissions=(permission_transformation_create,), user=request.user + def get_layer(self): + return Layer.get( + name=self.kwargs['layer_name'] ) - return super(TransformationCreateView, self).dispatch( - request, *args, **kwargs - ) + +class TransformationCreateView( + LayerViewMixin, ExternalContentTypeObjectMixin, SingleObjectCreateView +): + form_class = LayerTransformationForm def form_valid(self, form): + layer = self.layer + content_type = self.get_content_type() + object_layer, created = ObjectLayer.objects.get_or_create( + content_type=content_type, object_id=self.external_object.pk, + stored_layer=layer.stored_layer + ) + instance = form.save(commit=False) - instance.content_object = self.content_object + instance.content_object = self.external_object + instance.name = self.kwargs['transformation_name'] + instance.object_layer = object_layer try: instance.full_clean() instance.save() except Exception as exception: logger.debug('Invalid form, exception: %s', exception) + messages.error( + message=_('Error creating transforamtion: %s.') % exception, + request=self.request + ) return super(TransformationCreateView, self).form_invalid(form) else: return super(TransformationCreateView, self).form_valid(form) def get_extra_context(self): return { - 'content_object': self.content_object, + 'content_object': self.external_object, + 'form_field_css_classes': 'hidden' if hasattr( + self.get_transformation_class(), 'template_name' + ) else '', + 'layer': self.layer, + 'layer_name': self.layer.name, 'navigation_object_list': ('content_object',), 'title': _( - 'Create new transformation for: %s' - ) % self.content_object, + 'Create layer "%(layer)s" transformation ' + '"%(transformation)s" for: %(object)s' + ) % { + 'layer': self.layer, + 'transformation': self.get_transformation_class(), + 'object': self.external_object, + } } + def get_form_extra_kwargs(self): + return { + 'transformation_name': self.kwargs['transformation_name'] + } + + def get_external_object_permission(self): + return self.layer.permissions.get('create', None) + def get_post_action_redirect(self): return reverse( viewname='converter:transformation_list', kwargs={ 'app_label': self.kwargs['app_label'], 'model': self.kwargs['model'], - 'object_id': self.kwargs['object_id'] + 'object_id': self.kwargs['object_id'], + 'layer_name': self.kwargs['layer_name'] } ) def get_queryset(self): - return Transformation.objects.get_for_object(obj=self.content_object) - - -class TransformationDeleteView(SingleObjectDeleteView): - model = Transformation - - def dispatch(self, request, *args, **kwargs): - self.transformation = get_object_or_404( - klass=Transformation, pk=self.kwargs['pk'] + return self.layer.get_transformations_for( + obj=self.content_object ) - AccessControlList.objects.check_access( - obj=self.transformation.content_object, - permissions=(permission_transformation_delete,), user=request.user - ) + def get_template_names(self): + return [ + getattr( + self.get_transformation_class(), 'template_name', + self.template_name + ) + ] - return super(TransformationDeleteView, self).dispatch( - request, *args, **kwargs - ) + def get_transformation_class(self): + return BaseTransformation.get(name=self.kwargs['transformation_name']) - def get_post_action_redirect(self): - return reverse( - viewname='converter:transformation_list', kwargs={ - 'app_label': self.transformation.content_type.app_label, - 'model': self.transformation.content_type.model, - 'object_id': self.transformation.object_id - } - ) + +class TransformationDeleteView(LayerViewMixin, SingleObjectDeleteView): + model = LayerTransformation def get_extra_context(self): return { - 'content_object': self.transformation.content_object, + 'content_object': self.object.object_layer.content_object, + 'layer_name': self.layer.name, 'navigation_object_list': ('content_object', 'transformation'), 'previous': reverse( viewname='converter:transformation_list', kwargs={ - 'app_label': self.transformation.content_type.app_label, - 'model': self.transformation.content_type.model, - 'object_id': self.transformation.object_id + 'app_label': self.object.object_layer.content_type.app_label, + 'model': self.object.object_layer.content_type.model, + 'object_id': self.object.object_layer.object_id, + 'layer_name': self.object.object_layer.stored_layer.name } ), 'title': _( 'Delete transformation "%(transformation)s" for: ' '%(content_object)s?' ) % { - 'transformation': self.transformation, - 'content_object': self.transformation.content_object + 'transformation': self.object, + 'content_object': self.object.object_layer.content_object }, - 'transformation': self.transformation, + 'transformation': self.object, } + def get_object_permission(self): + return self.layer.permissions.get('delete', None) -class TransformationEditView(SingleObjectEditView): - form_class = TransformationForm - model = Transformation - - def dispatch(self, request, *args, **kwargs): - self.transformation = get_object_or_404( - klass=Transformation, pk=self.kwargs['pk'] + def get_post_action_redirect(self): + return reverse( + viewname='converter:transformation_list', kwargs={ + 'app_label': self.object.object_layer.content_type.app_label, + 'model': self.object.object_layer.content_type.model, + 'object_id': self.object.object_layer.object_id, + 'layer_name': self.object.object_layer.stored_layer.name + } ) - AccessControlList.objects.check_access( - obj=self.transformation.content_object, - permissions=(permission_transformation_edit,), user=request.user - ) - return super(TransformationEditView, self).dispatch( - request, *args, **kwargs - ) +class TransformationEditView(LayerViewMixin, SingleObjectEditView): + form_class = LayerTransformationForm + model = LayerTransformation def form_valid(self, form): instance = form.save(commit=False) @@ -165,72 +177,151 @@ class TransformationEditView(SingleObjectEditView): def get_extra_context(self): return { - 'content_object': self.transformation.content_object, + 'content_object': self.object.object_layer.content_object, + 'form_field_css_classes': 'hidden' if hasattr( + self.object.get_transformation_class(), 'template_name' + ) else '', + 'layer': self.layer, + 'layer_name': self.layer.name, 'navigation_object_list': ('content_object', 'transformation'), 'title': _( - 'Edit transformation "%(transformation)s" for: %(content_object)s' + 'Edit transformation "%(transformation)s" ' + 'for: %(content_object)s' ) % { - 'transformation': self.transformation, - 'content_object': self.transformation.content_object + 'transformation': self.object, + 'content_object': self.object.object_layer.content_object }, - 'transformation': self.transformation, + 'transformation': self.object, } + def get_object_permission(self): + return self.layer.permissions.get('edit', None) + def get_post_action_redirect(self): return reverse( viewname='converter:transformation_list', kwargs={ - 'app_label': self.transformation.content_type.app_label, - 'model': self.transformation.content_type.model, - 'object_id': self.transformation.object_id + 'app_label': self.object.object_layer.content_type.app_label, + 'model': self.object.object_layer.content_type.model, + 'object_id': self.object.object_layer.object_id, + 'layer_name': self.object.object_layer.stored_layer.name } ) - -class TransformationListView(SingleObjectListView): - def dispatch(self, request, *args, **kwargs): - content_type = get_object_or_404( - klass=ContentType, app_label=self.kwargs['app_label'], - model=self.kwargs['model'] - ) - - try: - self.content_object = content_type.get_object_for_this_type( - pk=self.kwargs['object_id'] + def get_template_names(self): + return [ + getattr( + self.object.get_transformation_class(), 'template_name', + self.template_name ) - except content_type.model_class().DoesNotExist: - raise Http404 + ] - AccessControlList.objects.check_access( - obj=self.content_object, - permissions=(permission_transformation_view,), user=request.user - ) - return super(TransformationListView, self).dispatch( - request, *args, **kwargs - ) +class TransformationListView( + LayerViewMixin, ExternalContentTypeObjectMixin, SingleObjectListView +): + def get_external_object_permission(self): + return self.layer.permissions.get('view', None) def get_extra_context(self): return { - 'content_object': self.content_object, + 'object': self.external_object, 'hide_link': True, 'hide_object': True, - 'navigation_object_list': ('content_object',), - 'no_results_icon': icon_transformation_list, - 'no_results_main_link': link_transformation_create.resolve( + 'layer_name': self.layer.name, + 'no_results_icon': self.layer.get_icon(), + 'no_results_main_link': link_transformation_select.resolve( context=RequestContext( request=self.request, dict_={ - 'content_object': self.content_object + 'resolved_object': self.external_object, + 'layer_name': self.kwargs['layer_name'], } ) ), - 'no_results_text': _( - 'Transformations allow changing the visual appearance ' - 'of documents without making permanent changes to the ' - 'document file themselves.' - ), - 'no_results_title': _('No transformations'), - 'title': _('Transformations for: %s') % self.content_object, + 'no_results_text': self.layer.get_empty_results_text(), + 'no_results_title': _( + 'There are no entries for layer "%(layer_name)s"' + ) % {'layer_name': self.layer.label}, + 'title': _( + 'Layer "%(layer)s" transformations for: %(object)s' + ) % { + 'layer': self.layer, + 'object': self.external_object, + } } def get_source_queryset(self): - return Transformation.objects.get_for_object(obj=self.content_object) + return self.layer.get_transformations_for(obj=self.external_object) + + +class TransformationSelectView( + ExternalContentTypeObjectMixin, LayerViewMixin, FormView +): + form_class = LayerTransformationSelectForm + template_name = 'appearance/generic_form.html' + + def form_valid(self, form): + transformation_class = BaseTransformation.get( + name=form.cleaned_data['transformation'] + ) + if transformation_class.arguments: + return HttpResponseRedirect( + redirect_to=reverse( + viewname='converter:transformation_create', + kwargs={ + 'app_label': self.kwargs['app_label'], + 'model': self.kwargs['model'], + 'object_id': self.kwargs['object_id'], + 'layer_name': self.kwargs['layer_name'], + 'transformation_name': form.cleaned_data[ + 'transformation' + ] + } + ) + ) + else: + layer = self.layer + content_type = self.get_content_type() + object_layer, created = ObjectLayer.objects.get_or_create( + content_type=content_type, object_id=self.external_object.pk, + stored_layer=layer.stored_layer + ) + object_layer.transformations.create( + name=form.cleaned_data['transformation'] + ) + + messages.success( + message=_('Transformation created successfully.'), + request=self.request + ) + + return HttpResponseRedirect( + redirect_to=reverse( + viewname='converter:transformation_list', kwargs={ + 'app_label': self.kwargs['app_label'], + 'model': self.kwargs['model'], + 'object_id': self.kwargs['object_id'], + 'layer_name': self.kwargs['layer_name'] + } + ) + ) + + def get_extra_context(self): + return { + 'layer': self.layer, + 'layer_name': self.kwargs['layer_name'], + 'navigation_object_list': ('content_object',), + 'content_object': self.external_object, + 'submit_label': _('Select'), + 'title': _( + 'Select new layer "%(layer)s" transformation ' + 'for: %(object)s' + ) % { + 'layer': self.layer, + 'object': self.external_object, + } + } + + def get_form_extra_kwargs(self): + return { + 'layer': self.layer + } diff --git a/mayan/apps/dashboards/classes.py b/mayan/apps/dashboards/classes.py index c1e4a6d478..e3869556cf 100644 --- a/mayan/apps/dashboards/classes.py +++ b/mayan/apps/dashboards/classes.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +from django.contrib.humanize.templatetags.humanize import intcomma from django.template import loader @@ -85,7 +86,8 @@ class DashboardWidgetNumeric(BaseDashboardWidget): def get_context(self): return { - 'count': self.count, + 'count': intcomma(value=self.count), + 'count_raw': self.count, 'icon_class': self.icon_class, 'label': self.label, 'link': self.link, diff --git a/mayan/apps/dashboards/locale/ar/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/ar/LC_MESSAGES/django.po index 3c232aaade..88d8e1c781 100644 --- a/mayan/apps/dashboards/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Arabic (https://www.transifex.com/rosarior/teams/13584/ar/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po index 77cae2d8c8..cd40ecef8a 100644 --- a/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" @@ -30,6 +30,6 @@ msgstr "Контролни табла" msgid "Main" msgstr "Главно" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Разгледайте подробности" diff --git a/mayan/apps/dashboards/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/bs_BA/LC_MESSAGES/django.po index 5ee910feff..eb5df8c579 100644 --- a/mayan/apps/dashboards/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/bs_BA/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Atdhe Tabaku , 2019\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "Glavni" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Pogledaj detalje" diff --git a/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po index ddee614087..819560f7e0 100644 --- a/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" @@ -29,6 +29,6 @@ msgstr "Řídicí panely" msgid "Main" msgstr "Hlavní" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Zobrazit podrobnosti" diff --git a/mayan/apps/dashboards/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/da_DK/LC_MESSAGES/django.po index f007d82e3e..e79d4869f3 100644 --- a/mayan/apps/dashboards/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/da_DK/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Rasmus Kierudsen , 2019\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" @@ -29,6 +29,6 @@ msgstr "Dashboards" msgid "Main" msgstr "Vigtigste" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Se detaljer" diff --git a/mayan/apps/dashboards/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/de_DE/LC_MESSAGES/django.po index 09557805b7..67dd11d12d 100644 --- a/mayan/apps/dashboards/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/de_DE/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Mathias Behrle , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -30,6 +30,6 @@ msgstr "Dashboards" msgid "Main" msgstr "Hauptbereich" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Details ansehen" diff --git a/mayan/apps/dashboards/locale/el/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/el/LC_MESSAGES/django.po index 315a11c68a..e2ca3717f2 100644 --- a/mayan/apps/dashboards/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/el/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: UE4 Hobbyist, 2019\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" @@ -30,6 +30,6 @@ msgstr "" msgid "Main" msgstr "Κεντρικό" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Εμφάνιση λεπτομερειών" diff --git a/mayan/apps/dashboards/locale/en/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/en/LC_MESSAGES/django.po index 201c908ac4..299dbb47ea 100644 --- a/mayan/apps/dashboards/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/es/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/es/LC_MESSAGES/django.po index ae36036638..846420cb7b 100644 --- a/mayan/apps/dashboards/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/es/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Spanish (https://www.transifex.com/rosarior/teams/13584/es/)\n" @@ -29,6 +29,6 @@ msgstr "Tablero" msgid "Main" msgstr "Principal" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Ver detalles" diff --git a/mayan/apps/dashboards/locale/fa/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/fa/LC_MESSAGES/django.po index e0820be755..6f9a091dda 100644 --- a/mayan/apps/dashboards/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/fa/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Mehdi Amani , 2019\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "اصلی" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "دیدن جزئیات" diff --git a/mayan/apps/dashboards/locale/fr/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/fr/LC_MESSAGES/django.po index e33ff87d79..f03862ca63 100644 --- a/mayan/apps/dashboards/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/fr/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Frédéric Sheedy , 2019\n" "Language-Team: French (https://www.transifex.com/rosarior/teams/13584/fr/)\n" @@ -31,6 +31,6 @@ msgstr "Tableaux de bord" msgid "Main" msgstr "Principal" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Voir les détails" diff --git a/mayan/apps/dashboards/locale/hu/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/hu/LC_MESSAGES/django.po index a192b6a82f..60ffa55139 100644 --- a/mayan/apps/dashboards/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/hu/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/id/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/id/LC_MESSAGES/django.po index f93d7f7961..f2fca441cf 100644 --- a/mayan/apps/dashboards/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/id/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Indonesian (https://www.transifex.com/rosarior/teams/13584/id/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/it/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/it/LC_MESSAGES/django.po index da93d71687..2967ef3418 100644 --- a/mayan/apps/dashboards/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/it/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Marco Camplese , 2019\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Vedi dettagli" diff --git a/mayan/apps/dashboards/locale/lv/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/lv/LC_MESSAGES/django.po index e60e304390..7c94c2cff3 100644 --- a/mayan/apps/dashboards/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Māris Teivāns , 2019\n" "Language-Team: Latvian (https://www.transifex.com/rosarior/teams/13584/lv/)\n" @@ -29,6 +29,6 @@ msgstr "Informācijas paneļi" msgid "Main" msgstr "Galvenais" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Skatīt detaļas" diff --git a/mayan/apps/dashboards/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/nl_NL/LC_MESSAGES/django.po index d6218e2c08..a23914a7f3 100644 --- a/mayan/apps/dashboards/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/nl_NL/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Martin Horseling , 2019\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/rosarior/teams/13584/nl_NL/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Zie details" diff --git a/mayan/apps/dashboards/locale/pl/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/pl/LC_MESSAGES/django.po index 793a6ffd2c..a005606f37 100644 --- a/mayan/apps/dashboards/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/pl/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Wojciech Warczakowski , 2019\n" "Language-Team: Polish (https://www.transifex.com/rosarior/teams/13584/pl/)\n" @@ -30,6 +30,6 @@ msgstr "" msgid "Main" msgstr "Główny" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Pokaż szczegóły" diff --git a/mayan/apps/dashboards/locale/pt/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/pt/LC_MESSAGES/django.po index c750f2d504..661bc4d90b 100644 --- a/mayan/apps/dashboards/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/pt/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Portuguese (https://www.transifex.com/rosarior/teams/13584/pt/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po index fb6d80fb22..34d5039b74 100644 --- a/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" @@ -31,6 +31,6 @@ msgstr "Painéis" msgid "Main" msgstr "Principal" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Ver detalhes" diff --git a/mayan/apps/dashboards/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/ro_RO/LC_MESSAGES/django.po index e2a19aa684..b49d78aacf 100644 --- a/mayan/apps/dashboards/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/ro_RO/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Harald Ersch, 2019\n" "Language-Team: Romanian (Romania) (https://www.transifex.com/rosarior/teams/13584/ro_RO/)\n" @@ -29,6 +29,6 @@ msgstr "Tablouri de bord" msgid "Main" msgstr "Principal" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Vizualizare detalii" diff --git a/mayan/apps/dashboards/locale/ru/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/ru/LC_MESSAGES/django.po index 4498541ece..e4f854926c 100644 --- a/mayan/apps/dashboards/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/ru/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: mizhgan , 2019\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" @@ -30,6 +30,6 @@ msgstr "" msgid "Main" msgstr "Основной" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Просмотр подробностей" diff --git a/mayan/apps/dashboards/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/sl_SI/LC_MESSAGES/django.po index d88abddd04..b6445405d0 100644 --- a/mayan/apps/dashboards/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/sl_SI/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: kontrabant , 2019\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/rosarior/teams/13584/sl_SI/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "Ogled podrobnosti" diff --git a/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po index 6d9fd5c2df..c2343d9273 100644 --- a/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/vi_VN/LC_MESSAGES/django.po index 6a216e7808..942b845322 100644 --- a/mayan/apps/dashboards/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/vi_VN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/rosarior/teams/13584/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -25,6 +25,6 @@ msgstr "" msgid "Main" msgstr "" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "" diff --git a/mayan/apps/dashboards/locale/zh/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/zh/LC_MESSAGES/django.po index 98bfb1f6f3..0ecda72e47 100644 --- a/mayan/apps/dashboards/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/zh/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:30-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>, 2019\n" "Language-Team: Chinese (https://www.transifex.com/rosarior/teams/13584/zh/)\n" @@ -29,6 +29,6 @@ msgstr "" msgid "Main" msgstr "重点" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" msgstr "查看详情" diff --git a/mayan/apps/dashboards/templates/dashboards/numeric_widget.html b/mayan/apps/dashboards/templates/dashboards/numeric_widget.html index 9a41cce301..4aaf8481dd 100644 --- a/mayan/apps/dashboards/templates/dashboards/numeric_widget.html +++ b/mayan/apps/dashboards/templates/dashboards/numeric_widget.html @@ -1,5 +1,7 @@ {% load i18n %} +{% load appearance_tags %} +
    @@ -9,7 +11,7 @@ {% elif icon_class %}
    - {{ icon_class.render }} + {% appearance_icon_render icon_class enable_shadow=True %}
    {% endif %}
    diff --git a/mayan/apps/dashboards/templatetags/dashboards_tags.py b/mayan/apps/dashboards/templatetags/dashboards_tags.py index bd03c9e816..ef12c45cd0 100644 --- a/mayan/apps/dashboards/templatetags/dashboards_tags.py +++ b/mayan/apps/dashboards/templatetags/dashboards_tags.py @@ -8,5 +8,5 @@ register = Library() @register.simple_tag(takes_context=True) -def render_dashboard(context, name): +def dashboards_render_dashboard(context, name): return Dashboard.get(name=name).render(request=context.request) diff --git a/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po index 237943dc21..53f98513a8 100644 --- a/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Arabic (https://www.transifex.com/rosarior/teams/13584/ar/)\n" @@ -276,11 +276,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo index b8ff582990..c9d36eb96b 100644 Binary files a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po index c1b96b2487..667065fbbe 100644 --- a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" @@ -93,6 +93,8 @@ msgid "" "Environment used for building the documentation. End users can ignore " "missing dependencies under this environment." msgstr "" +"Среда, използвана за изграждане на документацията. Крайните потребители " +"могат да игнорират липсващите зависимости в тази среда." #: classes.py:83 msgid "Documentation" @@ -299,11 +301,11 @@ msgstr "" "Разделени със запетаи имена на зависимости, които да се показват в списъка, " "като изключват всяка друга." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Обработка на конкретно приложение." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Принудително инсталиране, дори ако вече е инсталирано." diff --git a/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po index 5e1e2064ed..7274b35d60 100644 --- a/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Atdhe Tabaku , 2019\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" @@ -276,11 +276,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Obradite određenu aplikaciju" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo index ae5386b0cd..ab57469278 100644 Binary files a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po index 045a23c99d..77044ddeeb 100644 --- a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" @@ -91,6 +91,8 @@ msgid "" "Environment used for building the documentation. End users can ignore " "missing dependencies under this environment." msgstr "" +"Prostředí použité pro vytvoření dokumentace. Koncoví uživatelé mohou v tomto" +" prostředí ignorovat chybějící závislosti." #: classes.py:83 msgid "Documentation" @@ -297,11 +299,11 @@ msgstr "" "Čárkami oddělené názvy závislostí, které se mají zobrazit v seznamu, přičemž" " vylučují všechny ostatní." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Zpracovat konkrétní aplikaci." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Vynutit instalaci, i když již byla nainstalována." @@ -324,6 +326,8 @@ msgid "" "Unexpected error trying to determine the latest version available. Make sure" " your installation has a connection to the internet; %s" msgstr "" +"Neočekávaná chyba při pokusu o určení nejnovější dostupné verze. Ujistěte " +"se, že vaše instalace má připojení k internetu; %s" #: views.py:38 msgid "Your version is up-to-date." diff --git a/mayan/apps/dependencies/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/da_DK/LC_MESSAGES/django.po index e5c6271fef..6935c39c20 100644 --- a/mayan/apps/dependencies/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/da_DK/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Rasmus Kierudsen , 2019\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" @@ -274,11 +274,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po index 73ccc18e2e..0447a04290 100644 --- a/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Jesaja Everling , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -303,11 +303,11 @@ msgstr "" "Kommagetrennte Liste von Abhängigkeiten, die in der generierten Liste " "erscheinen sollen, während alle anderen ausgeschlossen werden." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Eine bestimmte Applikation ausführen." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Installation erzwingen, obwohl bereits installiert." diff --git a/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po index cfe092fc7d..cd7c6ad436 100644 --- a/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Hmayag Antonian , 2019\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" @@ -274,11 +274,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po index 95a78b42fb..638165148e 100644 --- a/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -270,11 +270,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po index 171f0acac0..6e6543867e 100644 --- a/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Spanish (https://www.transifex.com/rosarior/teams/13584/es/)\n" @@ -302,11 +302,11 @@ msgstr "" "Nombres separados por comas de las dependencias se muestran en la lista y se" " excluyen todos los demás." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Procesar una aplicación específica." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Forzar la instalación incluso si ya está instalado." diff --git a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po index 9cc46ea0df..789dc1d008 100644 --- a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Mehdi Amani , 2019\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" @@ -275,11 +275,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po index 23e337c396..7952f33215 100644 --- a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Christophe CHAUVET , 2019\n" "Language-Team: French (https://www.transifex.com/rosarior/teams/13584/fr/)\n" @@ -294,11 +294,11 @@ msgstr "" "Noms de dépendances à afficher dans la liste en excluant les autres, séparés" " par des virgules." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Déclencher l'exécution d'une application spécifique." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Forcer l'installation même s'il est déjà installé." diff --git a/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po index 9d4d1b3b91..a6c8e99e2f 100644 --- a/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: molnars , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" @@ -275,11 +275,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po index 0a5ac83cad..4bdc5c07d4 100644 --- a/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Adek Lanin, 2019\n" "Language-Team: Indonesian (https://www.transifex.com/rosarior/teams/13584/id/)\n" @@ -275,11 +275,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po index a645a2cedc..1cd41dfbdc 100644 --- a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Marco Camplese , 2019\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" @@ -277,11 +277,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po index 942d39709d..fd266bec43 100644 --- a/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Māris Teivāns , 2019\n" "Language-Team: Latvian (https://www.transifex.com/rosarior/teams/13584/lv/)\n" @@ -294,11 +294,11 @@ msgstr "" "Sarakstā atdalīto atkarību nosaukumus atdaliet ar komatu, izslēdzot katru " "otru." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Apstrādājiet konkrētu lietotni." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Piespiediet instalāciju, pat ja tā jau ir instalēta." diff --git a/mayan/apps/dependencies/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/nl_NL/LC_MESSAGES/django.po index 021bd11011..66863e77de 100644 --- a/mayan/apps/dependencies/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/nl_NL/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Lucas Weel , 2019\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/rosarior/teams/13584/nl_NL/)\n" @@ -276,11 +276,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po index 9412ff17e7..574daa672b 100644 --- a/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Wojciech Warczakowski , 2019\n" "Language-Team: Polish (https://www.transifex.com/rosarior/teams/13584/pl/)\n" @@ -277,11 +277,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po index afa1aa5d49..703839641d 100644 --- a/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Manuela Silva , 2019\n" "Language-Team: Portuguese (https://www.transifex.com/rosarior/teams/13584/pt/)\n" @@ -276,11 +276,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po index 412a9131a2..5e75715d15 100644 --- a/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Jadson Ribeiro , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" @@ -278,11 +278,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Processar um aplicativo específico." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.mo index 2a5d378170..f967e7df85 100644 Binary files a/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.po index 9f27e2552d..2efb464e49 100644 --- a/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/ro_RO/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Harald Ersch, 2019\n" "Language-Team: Romanian (Romania) (https://www.transifex.com/rosarior/teams/13584/ro_RO/)\n" @@ -93,6 +93,8 @@ msgid "" "Environment used for building the documentation. End users can ignore " "missing dependencies under this environment." msgstr "" +"Mediu folosit pentru construirea documentației. Utilizatorii finali pot " +"ignora dependențele lipsă din acest mediu." #: classes.py:83 msgid "Documentation" @@ -299,11 +301,11 @@ msgstr "" "Numerele de dependențe separate prin virgule ce vor fi afișate în listă, " "excluzând totodată pe celelalte." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "Procesați o aplicație specifică." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "Forțați instalarea chiar dacă este instalat deja." diff --git a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po index 9a748c900f..d36cb79c95 100644 --- a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: mizhgan , 2019\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" @@ -280,11 +280,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/sl_SI/LC_MESSAGES/django.po index 48bfddb266..279a3e1086 100644 --- a/mayan/apps/dependencies/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/sl_SI/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: kontrabant , 2019\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/rosarior/teams/13584/sl_SI/)\n" @@ -274,11 +274,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.po index 075d62b24a..4e8dcc29fe 100644 --- a/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: serhatcan77 , 2019\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" @@ -275,11 +275,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/vi_VN/LC_MESSAGES/django.po index 17bc57067c..baa3320e00 100644 --- a/mayan/apps/dependencies/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/vi_VN/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/rosarior/teams/13584/vi_VN/)\n" @@ -275,11 +275,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po index 2cbc5ff1a5..d877a1a3a3 100644 --- a/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>, 2019\n" "Language-Team: Chinese (https://www.transifex.com/rosarior/teams/13584/zh/)\n" @@ -274,11 +274,11 @@ msgid "" "every other one." msgstr "" -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." msgstr "处理特定的应用程序。" -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." msgstr "" diff --git a/mayan/apps/dependencies/management/commands/installjavascript.py b/mayan/apps/dependencies/management/commands/installdependencies.py similarity index 100% rename from mayan/apps/dependencies/management/commands/installjavascript.py rename to mayan/apps/dependencies/management/commands/installdependencies.py diff --git a/mayan/apps/dependencies/tests/test_classes.py b/mayan/apps/dependencies/tests/test_classes.py index 63312b51e6..2423f02bcf 100644 --- a/mayan/apps/dependencies/tests/test_classes.py +++ b/mayan/apps/dependencies/tests/test_classes.py @@ -3,7 +3,7 @@ from __future__ import print_function, unicode_literals from pathlib2 import Path import shutil -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from mayan.apps.common.tests.utils import mute_stdout from mayan.apps.storage.utils import mkdtemp diff --git a/mayan/apps/django_gpg/api_views.py b/mayan/apps/django_gpg/api_views.py index 47014873da..d7e152b757 100644 --- a/mayan/apps/django_gpg/api_views.py +++ b/mayan/apps/django_gpg/api_views.py @@ -1,9 +1,6 @@ from __future__ import absolute_import, unicode_literals -from rest_framework import generics - -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics from .models import Key from .permissions import ( @@ -17,10 +14,8 @@ class APIKeyListView(generics.ListCreateAPIView): get: Returns a list of all the keys. post: Upload a new key. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_key_view,)} mayan_view_permissions = {'POST': (permission_key_upload,)} - permission_classes = (MayanPermission,) queryset = Key.objects.all() serializer_class = KeySerializer @@ -30,7 +25,6 @@ class APIKeyView(generics.RetrieveDestroyAPIView): delete: Delete the selected key. get: Return the details of the selected key. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'DELETE': (permission_key_delete,), 'GET': (permission_key_view,), diff --git a/mayan/apps/django_gpg/locale/ar/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/ar/LC_MESSAGES/django.po index cb1fb81e4b..8975ca896b 100644 --- a/mayan/apps/django_gpg/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" diff --git a/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po index 0ebf929f92..323bafa7e8 100644 --- a/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-10-16 14:38+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" diff --git a/mayan/apps/django_gpg/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/bs_BA/LC_MESSAGES/django.po index 4b84000256..e7b175ad66 100644 --- a/mayan/apps/django_gpg/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/bs_BA/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" diff --git a/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po index ccae985d31..ab56bc8f6b 100644 --- a/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-10-15 17:41+0000\n" "Last-Translator: Michal Švábík \n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" diff --git a/mayan/apps/django_gpg/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/da_DK/LC_MESSAGES/django.po index 4451defea9..27ab2e9021 100644 --- a/mayan/apps/django_gpg/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/da_DK/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" diff --git a/mayan/apps/django_gpg/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/de_DE/LC_MESSAGES/django.po index 9429858929..e197ec6f1b 100644 --- a/mayan/apps/django_gpg/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/de_DE/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-19 09:33+0000\n" "Last-Translator: Mathias Behrle \n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" diff --git a/mayan/apps/django_gpg/locale/el/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/el/LC_MESSAGES/django.po index 6434195258..fe83faef98 100644 --- a/mayan/apps/django_gpg/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" diff --git a/mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po index 18983917b3..989194e43d 100644 --- a/mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/mayan/apps/django_gpg/locale/es/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/es/LC_MESSAGES/django.po index da28118d9f..aaa0a4d0cd 100644 --- a/mayan/apps/django_gpg/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/es/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-03 05:43+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" diff --git a/mayan/apps/django_gpg/locale/fa/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/fa/LC_MESSAGES/django.po index 140ff49a10..872a7d226c 100644 --- a/mayan/apps/django_gpg/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/fa/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" diff --git a/mayan/apps/django_gpg/locale/fr/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/fr/LC_MESSAGES/django.po index a8aa6e05af..6dfcadce4a 100644 --- a/mayan/apps/django_gpg/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/fr/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-05 02:55+0000\n" "Last-Translator: Frédéric Sheedy \n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" diff --git a/mayan/apps/django_gpg/locale/hu/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/hu/LC_MESSAGES/django.po index 4426e98fe1..31c6f1317e 100644 --- a/mayan/apps/django_gpg/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/hu/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" diff --git a/mayan/apps/django_gpg/locale/id/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/id/LC_MESSAGES/django.po index 4ef2930569..f6b054710e 100644 --- a/mayan/apps/django_gpg/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/id/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-12 17:32+0000\n" "Last-Translator: Adek Lanin\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" diff --git a/mayan/apps/django_gpg/locale/it/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/it/LC_MESSAGES/django.po index 7767ee13ba..d2a14ad777 100644 --- a/mayan/apps/django_gpg/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/it/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" diff --git a/mayan/apps/django_gpg/locale/lv/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/lv/LC_MESSAGES/django.po index 84e795594f..6047dc9938 100644 --- a/mayan/apps/django_gpg/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/lv/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-31 12:03+0000\n" "Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" diff --git a/mayan/apps/django_gpg/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/nl_NL/LC_MESSAGES/django.po index 7c9e7bb81e..d450968416 100644 --- a/mayan/apps/django_gpg/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/nl_NL/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" diff --git a/mayan/apps/django_gpg/locale/pl/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/pl/LC_MESSAGES/django.po index 66c1a4e7a0..5d776efdac 100644 --- a/mayan/apps/django_gpg/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/pl/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" diff --git a/mayan/apps/django_gpg/locale/pt/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/pt/LC_MESSAGES/django.po index 4347cd80a3..b1f909d3e5 100644 --- a/mayan/apps/django_gpg/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/pt/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" diff --git a/mayan/apps/django_gpg/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/pt_BR/LC_MESSAGES/django.po index e19746a26e..ba1e541fd6 100644 --- a/mayan/apps/django_gpg/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/pt_BR/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: José Samuel Facundo da Silva \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" diff --git a/mayan/apps/django_gpg/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/ro_RO/LC_MESSAGES/django.po index 76ba9a1d63..ce0b182a62 100644 --- a/mayan/apps/django_gpg/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/ro_RO/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" diff --git a/mayan/apps/django_gpg/locale/ru/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/ru/LC_MESSAGES/django.po index eea03bccf9..d51b56cd2f 100644 --- a/mayan/apps/django_gpg/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" diff --git a/mayan/apps/django_gpg/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/sl_SI/LC_MESSAGES/django.po index cd035593d1..0457fbda68 100644 --- a/mayan/apps/django_gpg/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/sl_SI/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" diff --git a/mayan/apps/django_gpg/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/tr_TR/LC_MESSAGES/django.po index 3fd0d95442..dae0a96fc9 100644 --- a/mayan/apps/django_gpg/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/tr_TR/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" diff --git a/mayan/apps/django_gpg/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/vi_VN/LC_MESSAGES/django.po index d4eaaf49ea..a18e645062 100644 --- a/mayan/apps/django_gpg/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/vi_VN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" diff --git a/mayan/apps/django_gpg/locale/zh/LC_MESSAGES/django.po b/mayan/apps/django_gpg/locale/zh/LC_MESSAGES/django.po index d25770c159..54f71c3f72 100644 --- a/mayan/apps/django_gpg/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" diff --git a/mayan/apps/django_gpg/runtime.py b/mayan/apps/django_gpg/runtime.py index 250373f711..68d042d803 100644 --- a/mayan/apps/django_gpg/runtime.py +++ b/mayan/apps/django_gpg/runtime.py @@ -2,7 +2,6 @@ from django.utils.module_loading import import_string from .settings import setting_gpg_path -# TODO: This will become an setting option in 2.2 SETTING_GPG_BACKEND = 'mayan.apps.django_gpg.classes.PythonGNUPGBackend' gpg_backend = import_string(SETTING_GPG_BACKEND)( diff --git a/mayan/apps/django_gpg/tests/test_api.py b/mayan/apps/django_gpg/tests/test_api.py index 6ece51be0b..3a6b5fa849 100644 --- a/mayan/apps/django_gpg/tests/test_api.py +++ b/mayan/apps/django_gpg/tests/test_api.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from rest_framework import status -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Key from ..permissions import ( @@ -25,7 +25,9 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): response = self._request_test_key_create_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(response.data['fingerprint'], TEST_KEY_PRIVATE_FINGERPRINT) + self.assertEqual( + response.data['fingerprint'], TEST_KEY_PRIVATE_FINGERPRINT + ) key = Key.objects.first() self.assertEqual(Key.objects.count(), 1) diff --git a/mayan/apps/django_gpg/tests/test_models.py b/mayan/apps/django_gpg/tests/test_models.py index 624fe1358a..cd08b4e31c 100644 --- a/mayan/apps/django_gpg/tests/test_models.py +++ b/mayan/apps/django_gpg/tests/test_models.py @@ -7,7 +7,7 @@ import mock from django.utils.encoding import force_bytes -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from mayan.apps.storage.utils import TemporaryFile from ..exceptions import ( diff --git a/mayan/apps/django_gpg/tests/test_views.py b/mayan/apps/django_gpg/tests/test_views.py index 64c9fc482f..bda30a6131 100644 --- a/mayan/apps/django_gpg/tests/test_views.py +++ b/mayan/apps/django_gpg/tests/test_views.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals from django_downloadview.test import assert_download_response -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..models import Key from ..permissions import permission_key_download, permission_key_upload diff --git a/mayan/apps/django_gpg/urls.py b/mayan/apps/django_gpg/urls.py index a3f4ba10ad..d44b7e1bcb 100644 --- a/mayan/apps/django_gpg/urls.py +++ b/mayan/apps/django_gpg/urls.py @@ -11,35 +11,35 @@ from .views import ( urlpatterns = [ url( - regex=r'^(?P\d+)/$', view=KeyDetailView.as_view(), + regex=r'^keys/(?P\d+)/$', view=KeyDetailView.as_view(), name='key_detail' ), url( - regex=r'^(?P\d+)/delete/$', view=KeyDeleteView.as_view(), + regex=r'^keys/(?P\d+)/delete/$', view=KeyDeleteView.as_view(), name='key_delete' ), url( - regex=r'^(?P\d+)/download/$', view=KeyDownloadView.as_view(), + regex=r'^keys/(?P\d+)/download/$', view=KeyDownloadView.as_view(), name='key_download' ), url( - regex=r'^list/private/$', view=PrivateKeyListView.as_view(), + regex=r'^keys/private/$', view=PrivateKeyListView.as_view(), name='key_private_list' ), url( - regex=r'^list/public/$', view=PublicKeyListView.as_view(), + regex=r'^keys/public/$', view=PublicKeyListView.as_view(), name='key_public_list' ), url( - regex=r'^upload/$', view=KeyUploadView.as_view(), name='key_upload' + regex=r'^keys/upload/$', view=KeyUploadView.as_view(), name='key_upload' ), - url(regex=r'^query/$', view=KeyQueryView.as_view(), name='key_query'), + url(regex=r'^keys/query/$', view=KeyQueryView.as_view(), name='key_query'), url( - regex=r'^query/results/$', view=KeyQueryResultView.as_view(), + regex=r'^keys/query/results/$', view=KeyQueryResultView.as_view(), name='key_query_results' ), url( - regex=r'^receive/(?P.+)/$', view=KeyReceive.as_view(), + regex=r'^keys/receive/(?P.+)/$', view=KeyReceive.as_view(), name='key_receive' ), ] diff --git a/mayan/apps/document_comments/api_views.py b/mayan/apps/document_comments/api_views.py index 0638c6f0f4..5fb6fa5493 100644 --- a/mayan/apps/document_comments/api_views.py +++ b/mayan/apps/document_comments/api_views.py @@ -2,10 +2,9 @@ from __future__ import absolute_import, unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework import generics - from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.models import Document +from mayan.apps.rest_api import generics from .permissions import ( permission_document_comment_create, permission_document_comment_delete, diff --git a/mayan/apps/document_comments/locale/ar/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/ar/LC_MESSAGES/django.po index 5d4375064e..7ccda45013 100644 --- a/mayan/apps/document_comments/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/ar/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Mohammed ALDOUB \n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" diff --git a/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po index 13b29e397d..e71805deb1 100644 --- a/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-10-16 14:48+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" diff --git a/mayan/apps/document_comments/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/bs_BA/LC_MESSAGES/django.po index 308a939212..12dd80790d 100644 --- a/mayan/apps/document_comments/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/bs_BA/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: www.ping.ba \n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" diff --git a/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po index dd71ee54cd..77f13d8f7a 100644 --- a/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-10-15 16:58+0000\n" "Last-Translator: Michal Švábík \n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" diff --git a/mayan/apps/document_comments/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/da_DK/LC_MESSAGES/django.po index 54777c2af2..11f3a00679 100644 --- a/mayan/apps/document_comments/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/da_DK/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Rasmus Kierudsen \n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" diff --git a/mayan/apps/document_comments/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/de_DE/LC_MESSAGES/django.po index 75f9a93744..38a7b608d8 100644 --- a/mayan/apps/document_comments/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/de_DE/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-26 21:45+0000\n" "Last-Translator: Mathias Behrle \n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" diff --git a/mayan/apps/document_comments/locale/el/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/el/LC_MESSAGES/django.po index 2998dd40b0..63dec1463d 100644 --- a/mayan/apps/document_comments/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/el/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Hmayag Antonian \n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" diff --git a/mayan/apps/document_comments/locale/en/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/en/LC_MESSAGES/django.po index f3d8ac2102..70ec59f42c 100644 --- a/mayan/apps/document_comments/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/mayan/apps/document_comments/locale/es/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/es/LC_MESSAGES/django.po index 1d91ba3909..fa9a5a4c91 100644 --- a/mayan/apps/document_comments/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 06:38+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" diff --git a/mayan/apps/document_comments/locale/fa/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/fa/LC_MESSAGES/django.po index b06bd93ec5..05682ea519 100644 --- a/mayan/apps/document_comments/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/fa/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" diff --git a/mayan/apps/document_comments/locale/fr/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/fr/LC_MESSAGES/django.po index 5a8d73ce8b..ece6d94810 100644 --- a/mayan/apps/document_comments/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/fr/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 13:23+0000\n" "Last-Translator: Frédéric Sheedy \n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" diff --git a/mayan/apps/document_comments/locale/hu/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/hu/LC_MESSAGES/django.po index a52470629f..948060acec 100644 --- a/mayan/apps/document_comments/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/hu/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: molnars \n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" diff --git a/mayan/apps/document_comments/locale/id/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/id/LC_MESSAGES/django.po index f6f5840fc3..3368d6d83b 100644 --- a/mayan/apps/document_comments/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/id/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Adek Lanin\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" diff --git a/mayan/apps/document_comments/locale/it/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/it/LC_MESSAGES/django.po index 30cf740b43..fd038c4402 100644 --- a/mayan/apps/document_comments/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/it/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-08-28 11:56+0000\n" "Last-Translator: Daniele Bortoluzzi \n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" diff --git a/mayan/apps/document_comments/locale/lv/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/lv/LC_MESSAGES/django.po index 5d4650c4e5..6216e97ac4 100644 --- a/mayan/apps/document_comments/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/lv/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-31 12:03+0000\n" "Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" diff --git a/mayan/apps/document_comments/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/nl_NL/LC_MESSAGES/django.po index 86a0e71c8a..7feee57450 100644 --- a/mayan/apps/document_comments/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/nl_NL/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Johan Braeken\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" diff --git a/mayan/apps/document_comments/locale/pl/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/pl/LC_MESSAGES/django.po index e81274c64e..91388a278c 100644 --- a/mayan/apps/document_comments/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/pl/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Wojciech Warczakowski \n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" diff --git a/mayan/apps/document_comments/locale/pt/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/pt/LC_MESSAGES/django.po index 8788f753e0..b664899ce7 100644 --- a/mayan/apps/document_comments/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/pt/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Emerson Soares \n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" diff --git a/mayan/apps/document_comments/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/pt_BR/LC_MESSAGES/django.po index dfdb555120..3d50a41736 100644 --- a/mayan/apps/document_comments/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/pt_BR/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" diff --git a/mayan/apps/document_comments/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/ro_RO/LC_MESSAGES/django.po index b0abb46311..f2896f06b2 100644 --- a/mayan/apps/document_comments/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/ro_RO/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 18:46+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" diff --git a/mayan/apps/document_comments/locale/ru/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/ru/LC_MESSAGES/django.po index bbca82deb1..360d3eee76 100644 --- a/mayan/apps/document_comments/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/ru/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Sergey Glita \n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" diff --git a/mayan/apps/document_comments/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/sl_SI/LC_MESSAGES/django.po index aaca14ea69..189d97a458 100644 --- a/mayan/apps/document_comments/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/sl_SI/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" diff --git a/mayan/apps/document_comments/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/tr_TR/LC_MESSAGES/django.po index 4e1fba0564..6ac6234933 100644 --- a/mayan/apps/document_comments/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/tr_TR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: serhatcan77 \n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" diff --git a/mayan/apps/document_comments/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/vi_VN/LC_MESSAGES/django.po index 75423054b0..4b3f507942 100644 --- a/mayan/apps/document_comments/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/vi_VN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: Trung Phan Minh \n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" diff --git a/mayan/apps/document_comments/locale/zh/LC_MESSAGES/django.po b/mayan/apps/document_comments/locale/zh/LC_MESSAGES/django.po index 1d06d16353..e4d3cebf85 100644 --- a/mayan/apps/document_comments/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2019-05-17 05:50+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" diff --git a/mayan/apps/document_comments/tests/test_api.py b/mayan/apps/document_comments/tests/test_api.py index 8ad608baa2..7b75aefcbb 100644 --- a/mayan/apps/document_comments/tests/test_api.py +++ b/mayan/apps/document_comments/tests/test_api.py @@ -2,8 +2,8 @@ from __future__ import unicode_literals from rest_framework import status -from mayan.apps.documents.tests import DocumentTestMixin -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Comment from ..permissions import ( diff --git a/mayan/apps/document_comments/tests/test_events.py b/mayan/apps/document_comments/tests/test_events.py index 5a4d4c942b..4d85152bfa 100644 --- a/mayan/apps/document_comments/tests/test_events.py +++ b/mayan/apps/document_comments/tests/test_events.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from actstream.models import Action -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..events import ( event_document_comment_created, event_document_comment_deleted, diff --git a/mayan/apps/document_comments/tests/test_views.py b/mayan/apps/document_comments/tests/test_views.py index 3351af99c2..1714ad4d9b 100644 --- a/mayan/apps/document_comments/tests/test_views.py +++ b/mayan/apps/document_comments/tests/test_views.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..models import Comment from ..permissions import ( diff --git a/mayan/apps/document_comments/urls.py b/mayan/apps/document_comments/urls.py index 3250e3ffa7..256776f8a5 100644 --- a/mayan/apps/document_comments/urls.py +++ b/mayan/apps/document_comments/urls.py @@ -11,25 +11,25 @@ from .views import ( urlpatterns = [ url( - regex=r'^(?P\d+)/comment/add/$', + regex=r'^documents/(?P\d+)/comments/$', + view=DocumentCommentListView.as_view(), name='comments_for_document' + ), + url( + regex=r'^documents/(?P\d+)/comments/add/$', view=DocumentCommentCreateView.as_view(), name='comment_add' ), url( - regex=r'^comment/(?P\d+)/delete/$', + regex=r'^comments/(?P\d+)/delete/$', view=DocumentCommentDeleteView.as_view(), name='comment_delete' ), url( - regex=r'^comment/(?P\d+)/$', + regex=r'^comments/(?P\d+)/$', view=DocumentCommentDetailView.as_view(), name='comment_details' ), url( - regex=r'^comment/(?P\d+)/edit/$', + regex=r'^comments/(?P\d+)/edit/$', view=DocumentCommentEditView.as_view(), name='comment_edit' ), - url( - regex=r'^(?P\d+)/comment/list/$', - view=DocumentCommentListView.as_view(), name='comments_for_document' - ), ] api_urls = [ diff --git a/mayan/apps/document_indexing/api_views.py b/mayan/apps/document_indexing/api_views.py index e26a766116..efd332d86c 100644 --- a/mayan/apps/document_indexing/api_views.py +++ b/mayan/apps/document_indexing/api_views.py @@ -2,14 +2,11 @@ from __future__ import absolute_import, unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework import generics - from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.models import Document from mayan.apps.documents.permissions import permission_document_view from mayan.apps.documents.serializers import DocumentSerializer -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics from .models import Index, IndexInstanceNode, IndexTemplateNode from .permissions import ( @@ -26,10 +23,8 @@ class APIIndexListView(generics.ListCreateAPIView): get: Returns a list of all the defined indexes. post: Create a new index. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_indexing_view,)} mayan_view_permissions = {'POST': (permission_document_indexing_create,)} - permission_classes = (MayanPermission,) queryset = Index.objects.all() serializer_class = IndexSerializer @@ -47,7 +42,6 @@ class APIIndexView(generics.RetrieveUpdateDestroyAPIView): 'PATCH': (permission_document_indexing_edit,), 'DELETE': (permission_document_indexing_delete,) } - permission_classes = (MayanPermission,) queryset = Index.objects.all() serializer_class = IndexSerializer @@ -57,7 +51,6 @@ class APIIndexNodeInstanceDocumentListView(generics.ListAPIView): Returns a list of all the documents contained by a particular index node instance. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_view,)} serializer_class = DocumentSerializer @@ -78,7 +71,6 @@ class APIIndexTemplateListView(generics.ListAPIView): """ get: Returns a list of all the template nodes for the selected index. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_indexing_view,)} serializer_class = IndexTemplateNodeSerializer @@ -90,23 +82,20 @@ class APIIndexTemplateView(generics.RetrieveUpdateDestroyAPIView): patch: Partially edit an index template node. put: Edit an index template node. """ - serializer_class = IndexTemplateNodeSerializer - queryset = IndexTemplateNode.objects.all() - - permission_classes = (MayanPermission,) mayan_object_permissions = { 'GET': (permission_document_indexing_view,), 'PUT': (permission_document_indexing_edit,), 'PATCH': (permission_document_indexing_edit,), 'DELETE': (permission_document_indexing_edit,) } + queryset = IndexTemplateNode.objects.all() + serializer_class = IndexTemplateNodeSerializer class APIDocumentIndexListView(generics.ListAPIView): """ Returns a list of all the indexes to which a document belongs. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_indexing_view,)} serializer_class = IndexInstanceNodeSerializer diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index f89b3bde3c..bf23b65705 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -32,12 +32,12 @@ from .html_widgets import ( from .links import ( link_document_index_instance_list, link_document_type_index_templates, link_index_instance_menu, link_index_instance_rebuild, - link_index_template_setup, link_index_template_create, - link_index_template_document_types, link_index_template_delete, - link_index_template_edit, link_index_template_list, - link_index_template_node_tree_view, link_index_instances_rebuild, - link_index_template_node_create, link_index_template_node_delete, - link_index_template_node_edit + link_index_instances_reset, link_index_template_setup, + link_index_template_create, link_index_template_document_types, + link_index_template_delete, link_index_template_edit, + link_index_template_list, link_index_template_node_tree_view, + link_index_instances_rebuild, link_index_template_node_create, + link_index_template_node_delete, link_index_template_node_edit ) from .permissions import ( permission_document_indexing_delete, permission_document_indexing_edit, @@ -99,17 +99,24 @@ class DocumentIndexingApp(MayanAppConfig): model=IndexInstanceNode, related='index_template_node__index' ) - SourceColumn( + column_index_label = SourceColumn( attribute='label', is_identifier=True, is_sortable=True, source=Index ) + column_index_label.add_exclude(source=IndexInstance) SourceColumn( + attribute='label', is_object_absolute_url=True, is_identifier=True, + is_sortable=True, source=IndexInstance + ) + column_index_slug = SourceColumn( attribute='slug', is_sortable=True, source=Index ) - SourceColumn( + column_index_slug.add_exclude(IndexInstance) + column_index_enabled = SourceColumn( attribute='enabled', is_sortable=True, source=Index, widget=TwoStateWidget ) + column_index_enabled.add_exclude(source=IndexInstance) SourceColumn( func=lambda context: context[ @@ -174,7 +181,9 @@ class DocumentIndexingApp(MayanAppConfig): ) menu_facet.bind_links( - links=(link_document_index_instance_list,), sources=(Document,) + links=( + link_document_index_instance_list, + ), sources=(Document,) ) menu_list_facet.bind_links( links=(link_document_type_index_templates,), @@ -209,7 +218,9 @@ class DocumentIndexingApp(MayanAppConfig): ) ) menu_setup.bind_links(links=(link_index_template_setup,)) - menu_tools.bind_links(links=(link_index_instances_rebuild,)) + menu_tools.bind_links( + links=(link_index_instances_rebuild, link_index_instances_reset) + ) post_delete.connect( dispatch_uid='document_indexing_handler_delete_empty', diff --git a/mayan/apps/document_indexing/forms.py b/mayan/apps/document_indexing/forms.py index 790a5e6e2e..33a37ae741 100644 --- a/mayan/apps/document_indexing/forms.py +++ b/mayan/apps/document_indexing/forms.py @@ -1,12 +1,11 @@ from __future__ import absolute_import, unicode_literals from django import forms -from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ -from mayan.apps.common.classes import ModelProperty from mayan.apps.common.forms import FilteredSelectionForm from mayan.apps.documents.models import Document +from mayan.apps.templating.fields import TemplateField from .models import Index, IndexTemplateNode from .permissions import permission_document_indexing_rebuild @@ -31,14 +30,9 @@ class IndexTemplateNodeForm(forms.ModelForm): super(IndexTemplateNodeForm, self).__init__(*args, **kwargs) self.fields['index'].widget = forms.widgets.HiddenInput() self.fields['parent'].widget = forms.widgets.HiddenInput() - self.fields['expression'].help_text = ' '.join( - [ - force_text(self.fields['expression'].help_text), - '
    ', - ModelProperty.get_help_text_for( - model=Document, show_name=True - ).replace('\n', '
    ') - ] + self.fields['expression'] = TemplateField( + label=_('Template'), model=Document, + model_variable='document', required=False ) class Meta: diff --git a/mayan/apps/document_indexing/icons.py b/mayan/apps/document_indexing/icons.py index 304e854881..98a4491696 100644 --- a/mayan/apps/document_indexing/icons.py +++ b/mayan/apps/document_indexing/icons.py @@ -3,10 +3,10 @@ from __future__ import absolute_import, unicode_literals from mayan.apps.appearance.classes import Icon from mayan.apps.documents.icons import icon_document_type +icon_index = Icon(driver_name='fontawesome', symbol='list-ul') icon_document_index_instance_list = Icon( driver_name='fontawesome', symbol='list-ul' ) -icon_index = Icon(driver_name='fontawesome', symbol='list-ul') icon_document_type_index_templates = icon_index icon_index_level_up = Icon( driver_name='fontawesomecss', css_classes='fa-level-up-alt fa-rotate-90' @@ -16,7 +16,12 @@ icon_index_instance_node_with_documents = Icon( driver_name='fontawesome', symbol='folder' ) icon_index_instances_rebuild = Icon( - driver_name='fontawesome', symbol='list-ul' + driver_name='fontawesome-dual', primary_symbol='list-ul', + secondary_symbol='hammer' +) +icon_index_instances_reset = Icon( + driver_name='fontawesome-dual', primary_symbol='list-ul', + secondary_symbol='times' ) icon_index_template_create = Icon( diff --git a/mayan/apps/document_indexing/links.py b/mayan/apps/document_indexing/links.py index a9441e3e9c..c7b50107c4 100644 --- a/mayan/apps/document_indexing/links.py +++ b/mayan/apps/document_indexing/links.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ -from mayan.apps.documents.permissions import permission_document_type_edit from mayan.apps.navigation.classes import Link from mayan.apps.navigation.utils import get_cascade_condition @@ -27,7 +26,7 @@ link_document_index_instance_list = Link( link_document_type_index_templates = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_indexing.icons.icon_document_type_index_templates', - permissions=(permission_document_type_edit,), text=_('Index templates'), + permissions=(permission_document_indexing_create,), text=_('Index templates'), view='indexing:document_type_index_templates', ) @@ -38,6 +37,12 @@ link_index_instance_menu = Link( ), icon_class_path='mayan.apps.document_indexing.icons.icon_index', text=_('Indexes'), view='indexing:index_list' ) +link_index_instance_rebuild = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_indexing.icons.icon_index_instances_rebuild', + permissions=(permission_document_indexing_rebuild,), + text=_('Rebuild index'), view='indexing:index_setup_rebuild' +) link_index_instances_rebuild = Link( condition=get_cascade_condition( app_label='document_indexing', model_name='Index', @@ -49,11 +54,16 @@ link_index_instances_rebuild = Link( ), text=_('Rebuild indexes'), view='indexing:rebuild_index_instances' ) -link_index_instance_rebuild = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_indexing.icons.icon_index_instances_rebuild', - permissions=(permission_document_indexing_rebuild,), - text=_('Rebuild index'), view='indexing:index_setup_rebuild' +link_index_instances_reset = Link( + condition=get_cascade_condition( + app_label='document_indexing', model_name='Index', + object_permission=permission_document_indexing_rebuild, + ), + icon_class_path='mayan.apps.document_indexing.icons.icon_index_instances_reset', + description=_( + 'Deletes and creates from scratch all the document indexes.' + ), + text=_('Reset indexes'), view='indexing:index_instances_reset' ) link_index_template_setup = Link( diff --git a/mayan/apps/document_indexing/literals.py b/mayan/apps/document_indexing/literals.py index b170d49de7..4e42851d42 100644 --- a/mayan/apps/document_indexing/literals.py +++ b/mayan/apps/document_indexing/literals.py @@ -1 +1 @@ -RETRY_DELAY = 5 # TODO: convert this into a config option +RETRY_DELAY = 5 diff --git a/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.mo index e00bec1c4f..d6bd38c8d8 100644 Binary files a/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.po index cd2f07d614..11342b7cac 100644 --- a/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "لا شيء" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "" @@ -30,23 +30,23 @@ msgstr "" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "عدد الوثائق الكلي" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "الوثائق" @@ -58,152 +58,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indexes" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Deletes and creates from scratch all the document indexes." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Deletes and creates from scratch all the document indexes." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "حذف" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "تحرير" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "العنوان" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Causes this index to be visible and updated when document data changes." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "مفعل" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Causes this node to be visible and updated when document data changes." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Check this option to have this node act as a container for documents and not as a parent for further nodes." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "قيمة" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -293,6 +305,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -333,42 +349,42 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." @@ -378,3 +394,18 @@ msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.mo index 43c6268341..58116ad530 100644 Binary files a/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po index e5d672fb06..135394d919 100644 --- a/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-10-16 15:29+0000\n" -"Last-Translator: Lyudmil Antonov \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,7 @@ msgstr "" msgid "None" msgstr "Няма" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Типове документи" @@ -31,23 +31,23 @@ msgstr "Типове документи" msgid "Document indexing" msgstr "Индексиране на документи" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Общо нива" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Общо документи" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Ниво" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Нива" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Документи" @@ -59,152 +59,164 @@ msgstr "Създаден е индекс" msgid "Index edited" msgstr "Индексът е редактиран" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Шаблони за индексиране, които трябва да бъдат поставени на опашка за възстановяване." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Шаблони за индексиране" +#: forms.py:34 +msgid "Template" +msgstr "Шаблон" + #: handlers.py:20 msgid "Creation date" msgstr "Дата на създаване" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Индекси" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Изтриване и създаване от нулата на всички индекси за документа." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Възстановяване на индекси" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Възстановяване на индекс" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Изтриване и създаване от нулата на всички индекси за документа." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Възстановяване на индекси" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "Нулиране на индекси" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Създаване на индекс" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Изтрийте" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Редактиране" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Шаблон за дърво" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Нов възел дете" #: models.py:36 +msgid "Short description of this index." +msgstr "Кратко описание на този индекс." + +#: models.py:37 msgid "Label" msgstr "Етикет" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Тази стойност ще бъде използвана от други приложения за препратка към този индекс." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Калъп" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Предизвиква този индекс да бъдат видим и актуализиран, когато данните в документа се променят." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Активиран" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Индекс" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Момент на индексиране" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Моменти на индексиране" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Въведете шаблон за изобразяване. Използвайте езика за шаблони на Django по подразбиране (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Израз за индексиране " -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Предизвиква този възел да бъде видим и актуализиран при промяна на данните на документа." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Поставете отметка в тази опция, за да може този възел да действа като контейнер за документи, а не като родител за други възли." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Свържете документи" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Шаблон за възел на индекс" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Шаблон за възел на индекси" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Корен" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Грешка при индексиране на документ: %(document)s; израз: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Възел на шаблона на индекс" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Стойност" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Момент на възел за индекс" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Моменти на възли на индекси" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Момент на възел на индекс на документ" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Моменти на възли за индекси на документи" @@ -294,6 +306,10 @@ msgstr "Няма индекси." msgid "Rebuild index: %s" msgstr "Възстановяване на индекс: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Налични типове документи" @@ -334,44 +350,55 @@ msgstr "Изтрийте възела на шаблона на индекса: % msgid "Edit the index template node: %s?" msgstr "Редактиране на възела на шаблон за индекс: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Това може да означава, че не са създадени индексни шаблони или че има шаблони за индекс, но те не са дефинирани правилно." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Няма налични моменти на индексиране." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Навигация: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Съдържание на индекса: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Задайте типа на този документ в индекс, за да се появи в моменти на организационните единици на тези индекси." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Този документ не е в нито един индекс" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Индексира възли, съдържащи документ: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "индекс %(count)d, който е поставен на опашка за възстановяване." msgstr[1] "%(count)d индекси на опашка за възстановяване." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "нулиране на индекс %(count)d." +msgstr[1] " %(count)d индекса са нулирани." + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "Индексни шаблони, екземплярите на които ще бъдат изтрити." diff --git a/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.mo index afb55d1db3..9ebb94386e 100644 Binary files a/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.po index fe4c9acaa2..083d4422ac 100644 --- a/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/bs_BA/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr "" msgid "None" msgstr "Nijedno" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipovi dokumenta" @@ -31,23 +31,23 @@ msgstr "Tipovi dokumenta" msgid "Document indexing" msgstr "Indeksiranje dokumenata" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Ukupni nivoi" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Ukupni dokumenti" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nivo" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Nivoa" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenti" @@ -59,152 +59,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Datum kreiranja" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indeksi" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Briše i nanovo kreira indekse svih dokumenata." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Obnoviti indekse" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Obnoviti indeks" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Briše i nanovo kreira indekse svih dokumenata." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Obnoviti indekse" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Kreiraj indeks" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Obriši" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Urediti" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Template drveta" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Novi child node" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Labela" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Ova vrijednost će koristiti druge aplikacije za upućivanje na ovaj indeks." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Uzrokuje da će ovaj indeks biti vidljiv i update-ovan kad se promjene podaci dokumenta." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Omogućeno" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Indeks" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Indeks instanci" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Izraz indeksiranja" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Uzrokuje da će ovaj nod biti vidljiv i update-ovan kad se promjene podaci dokumenta." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Označite ovu opciju da ovaj nod služi kao kontejner za dokumente a ne kao parent za buduće nodove." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Povezite dokumente" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Šablon indeksnog čvora" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Šablon indeksnih čvora" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Koren" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Greška u indeksiranju dokumenta:%(document)s; izraz:%(expression)s;%(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Index template node" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Vrijednost" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Indeks čvora instance" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Indeks čvorova indeksa" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Indeks čvora instance dokumenta" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Indeks čvorova indeksa dokummenata" @@ -294,6 +306,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Dostupni tipovi dokumenta" @@ -334,45 +350,57 @@ msgstr "Obrišite čvor indeksa :%s?" msgid "Edit the index template node: %s?" msgstr "Uredi čvor indeksa indeksa:%s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigacija:%s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Sadržaj za indeks:%s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Indeksni čvorovi koji sadrže dokument:%s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" msgstr[2] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.mo index 098bdd3fb7..6acea7531e 100644 Binary files a/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po index b236551059..902a84092d 100644 --- a/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-10-18 11:48+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "žádný" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Typy dokumentů" @@ -30,23 +30,23 @@ msgstr "Typy dokumentů" msgid "Document indexing" msgstr "Indexování dokumentů" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Celkem úrovní" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Celkem dokumentů" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Úroveň" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Úrovně" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenty" @@ -58,152 +58,164 @@ msgstr "Rejstřík vytvořen" msgid "Index edited" msgstr "Rejstřík upraven" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Šablony rejstříků, které mají být zařazeny do fronty pro nové sestavení." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Šablony rejstříků" +#: forms.py:34 +msgid "Template" +msgstr "Šablona" + #: handlers.py:20 msgid "Creation date" msgstr "Datum vytvoření" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Rejstříky" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Odstraní a vytvoří od začátku všechny rejstříky dokumentů" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Znovu setsavit rejstříky" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Znovu sestavit rejstřík" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Odstraní a vytvoří od začátku všechny rejstříky dokumentů" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Znovu setsavit rejstříky" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Vytvořit rejstřík" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Odstranit" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Editovat" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Šablona stromu" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nový podřízený uzel" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Označení" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Tuto hodnotu použijí jiné aplikace k odkazu na tento rejstřík." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Způsobí, že tento rejstřík bude viditelný a aktualizovaný při změně dat dokumentu" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Povoleno" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Rejstřík" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Instance rejstříku" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instance rejstříků" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Zadejte šablonu, kterou chcete vykreslit. Použijte výchozí jazyk pro šablony Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Výraz tvorby rejstříku" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Způsobí, že tento uzel bude viditelný a aktualizovaný při změně dat dokumentu." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Zaškrtněte tuto možnost, chcete-li, aby tento uzel fungoval jako kontejner pro dokumenty a ne jako nadřazený pro další uzly." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Šablona uzlu rejstříku" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Šablona uzlů rejstříků" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Kořen" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Chyba při zařazení dokumentu do rejstříku: %(document)s; výraz: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Uzel šablony rejstříku" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Hodnota" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Instance rejstříkového uzlu" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Instance uzlů rejstříků" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Instance uzlu rejstříku dokumentů" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Instance uzlů rejstříků dokumentů" @@ -293,6 +305,10 @@ msgstr "Žádné rejstříky." msgid "Rebuild index: %s" msgstr "Znovu sestavit index: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Dostupné typy dokumentů" @@ -333,42 +349,42 @@ msgstr "Odstranit uzel šablony rejstříku: %s?" msgid "Edit the index template node: %s?" msgstr "Upravit uzel šablony rejstříku: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "To by mohlo znamenat, že nebyly vytvořeny žádné šablony rejstříků, nebo že tam byly šablony rejstříků, ale nejsou správně definovány." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Nejsou k dispozici žádné instance rejstříků." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigace: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Obsah rejstříku: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Přiřaďte typ dokumentu tohoto dokumentu k rejstříku, aby se zobrazoval v případech těchto organizačních jednotek rejstříků." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Tento dokument není v žádném rejstříku" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Uzel rejstříku obsahuje dokument: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." @@ -376,3 +392,16 @@ msgstr[0] "Index %(count)d zařazený do fronty pro nové sestavení." msgstr[1] "%(count)d indexy zařazené do fronty k novému sestavení." msgstr[2] "%(count)d indexy zařazené do fronty k novému sestavení." msgstr[3] "%(count)d Rejstříky ve frontě k novému sestavení." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.mo index 588b125288..f7c6533003 100644 Binary files a/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.po index 1ffb563b52..4411d07ce8 100644 --- a/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "Ingen" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Dokumenttyper" @@ -29,23 +29,23 @@ msgstr "Dokumenttyper" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Antal dokumenter" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenter" @@ -57,152 +57,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Slet" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Rediger" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Etiket" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Værdi" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -292,6 +304,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -332,44 +348,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.mo index b83bfb4bc8..c3a0a2c51c 100644 Binary files a/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.po index 355e456b77..e526a413bd 100644 --- a/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/de_DE/LC_MESSAGES/django.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-08 10:44+0000\n" -"Last-Translator: Marvin Haschker \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -29,7 +29,7 @@ msgstr "" msgid "None" msgstr "Keine" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Dokumententypen" @@ -37,23 +37,23 @@ msgstr "Dokumententypen" msgid "Document indexing" msgstr "Dokumentenindizierung" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Gesamtanzahl Ebenen" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Alle Dokumente" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Ebene" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Ebenen" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Index bearbeitet" @@ -65,152 +65,164 @@ msgstr "Index erstellt" msgid "Index edited" msgstr "Index erstellt" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "In die Warteschlange für den Wiederaufbau eingestellte Indexvorlagen." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Indexvorlagen" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Erstellungsdatum" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indices" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Löscht und erstellt alle Dokumentenindices neu." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Indices wiederaufbauen" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Index neu erstellen" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Löscht und erstellt alle Dokumentenindices neu." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Indices wiederaufbauen" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Index erstellen" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Löschen" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Bearbeiten" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Baumvorlage" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Neuer Unterknoten" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Bezeichner" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Interner Name um diesen Index zu identifizieren." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Abkürzung" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Bewirkt Sichtbarkeit und Aktualisierung des Index, wenn Dokumente geändert werden." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Aktiviert" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Index" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Index-Instanz" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Index-Instanzen" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Vorlage/Template zur Generierung eingeben. Django's Standard-Vorlagen-Sprache benutzen (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Indexierungsausdruck" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Bewirkt Sichtbarkeit und Aktualisierung des Index, wenn Dokumente geändert werden." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Wählen Sie diese Option, wenn Dokumente in diesem Knoten dargestellt werden sollen (und dieser Knoten nicht als Eltern-Knoten für weitere Kind-Knotenpunkte fungieren soll)." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Dokumente verknüpfen" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Index Knotenvorlage" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Index Knotenvorlagen" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Wurzel" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Fehler bei der Indexierung von Dokument %(document)s; Ausdruck: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Index Knotenpunkt" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Wert" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Indexknotenpunkt" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Indexknotenpunkte" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Indexknotenpunkt" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Indexknotenpunkte" @@ -300,6 +312,10 @@ msgstr "Keine Indizes vorhanden." msgid "Rebuild index: %s" msgstr "Indices wiederaufbauen: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Verfügbare Dokumententypen" @@ -340,44 +356,55 @@ msgstr "Indexvorlagen-Knotenpunkt %s löschen?" msgid "Edit the index template node: %s?" msgstr "Indexvorlagen-Knotenpunkt %s bearbeiten?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Dies könnte bedeuten, dass keine Index Vorlagen erstellt wurden, oder das erstellte Index Vorlagen nicht korrekt definiert wurden." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Es sind keine Indexinstanzen vorhanden." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigation: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Inhalt von Index %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Weisen Sie dem Dokumententyp dieses Dokuments einen Index zu, damit es als Instanz der Organisationseinheiten dieses Indexes auftaucht." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Dieses Dokument befindet sich in keinem Index" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Knotenpunkte der Indices, die Dokumente enthalten: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d Index für Wiederaufbau in Warteschlange gestellt." msgstr[1] "%(count)d Indizes zur Neuerstellung vorgemerkt." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.mo index 8a95f33c95..90641f2315 100644 Binary files a/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.po index ab6c2c4bd5..30bb0db900 100644 --- a/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "Κανένα" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Τύποι εγγράφων" @@ -29,23 +29,23 @@ msgstr "Τύποι εγγράφων" msgid "Document indexing" msgstr "Ευρετήρια εγγράφων" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Σύνολο επιπέδων" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Σύνολο εγγράφων" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Επίπεδο" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Επίπεδα" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Έγγραφα" @@ -57,152 +57,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Ημερομηνία δημιουργίας" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Ευρετήρια" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Διαγράφει και αναδομεί από την αρχή όλα τα ευρετήρια εγγράφων." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Αναδόμηση ευρετηρίων" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Αναδόμηση ευρετηρίου" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Διαγράφει και αναδομεί από την αρχή όλα τα ευρετήρια εγγράφων." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Αναδόμηση ευρετηρίων" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Δημιουργία ευρετηρίου" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Διαγραφή" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Τροποποίηση" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Δέντρο υποδειγμάτων" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Νέος κόμβος" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Ετικέτα" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Αυτή η τιμή θα χρησιμοποιηθεί από τις άλλες εφαρμογές για να αναφέρονται σ' αυτό το ευρετήριο." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Προκαλεί αυτό το ευρετήριο να είναι ορατό και να ενημερώνεται όταν αλλάζουν τα δεδομένα των εγγράφων." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Ενεργοποιημένο" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Ευρετήριο" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Προκαλεί αυτό τον κόμβο να είναι ορατό και να ενημερώνεται όταν αλλάζουν τα δεδομένα των εγγράφων." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Επιλέξτε εδώ αν θέλετε ο κόμβος να περιλαμβάνει έγγραφα και να μην χρησιμοποιηθεί σαν γονέας για άλλους κόμβους." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Διασύνδεση εγγράφων" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Υπόδειγμα κόμβου ευρετηρίου" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Υποδείγματα κόμβου ευρετηρίων" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Ρίζα:" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Σφάλμα κατά την επεξεργασία εγγράφου: %(document)s; expression: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Κόμβος υποδείγματος ευρετηρίου" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Τιμή" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -292,6 +304,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Διαθέσιμοι τύποι εγγράφων" @@ -332,44 +348,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Πλοήγηση: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Περιεχόμενα του ευρετηριου: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Κόμβοι ευρετηρίου που περιέχουν έγγραφο: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/en/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/en/LC_MESSAGES/django.po index 82976ba0a7..b3bc7086fa 100644 --- a/mayan/apps/document_indexing/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "" @@ -29,23 +29,23 @@ msgstr "" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "" @@ -57,151 +57,163 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not " "as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -291,6 +303,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -331,44 +347,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.mo index 836ab2a906..433028e133 100644 Binary files a/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.po index 753d674e88..a19ec0dfdf 100644 --- a/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/es/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-09-24 21:05+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 18:37+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -24,7 +24,7 @@ msgstr "" msgid "None" msgstr "Ninguno" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipos de documento" @@ -32,23 +32,23 @@ msgstr "Tipos de documento" msgid "Document indexing" msgstr "Indexación de documentos" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Niveles totales" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Total de documentos" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nível" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveles" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documentos" @@ -60,152 +60,164 @@ msgstr "Índice creado" msgid "Index edited" msgstr "Índice editado" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Las plantillas de índice se pondrán en cola para su reconstrucción." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Plantillas de índice" +#: forms.py:34 +msgid "Template" +msgstr "Plantilla" + #: handlers.py:20 msgid "Creation date" msgstr "Fecha de creación" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Índices" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Borra y crea desde cero todos los índices de documentos." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Reconstruir índices" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Reconstruir índice" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Borra y crea desde cero todos los índices de documentos." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Reconstruir índices" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "Restablecer índices" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Crear índice" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Borrar" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Editar" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Plantilla" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nuevo nodo hijo" #: models.py:36 +msgid "Short description of this index." +msgstr "Breve descripción de este índice." + +#: models.py:37 msgid "Label" msgstr "Etiqueta" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Este valor será utilizado por otras aplicaciones para hacer referencia a este índice." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Identificador" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Hace que este índice sea visible y actualizado cuando los datos de documentos cambien." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Habilitado" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Índice" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Instancia de índice" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instancias de índices" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Ingrese una plantilla para renderizar. Utilice el lenguaje de plantillas predeterminado de Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Expresión de indexación" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Hace que este nodo sea visible y actualizado cuando los datos de los documentos son cambiados." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Marque esta opción para que el nodo actúe como un contenedor de documentos y no como un padre para otros nodos secundarios." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Vincular documentos" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Nodo de plantilla de indice" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Nodos de plantillas de índices" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Nodo principal" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Error indexando documento: %(document)s; expresión: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Nodo de plantilla de indice" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valor" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Índice de nodo de instancia" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Nodos de instancias de indices" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Instancia del nodo del índice de documentos" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Instancias de nodos de índices de documentos" @@ -295,6 +307,10 @@ msgstr "No hay índices" msgid "Rebuild index: %s" msgstr "Reconstruir índice: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "Índice en cola para la reconstrucción." + #: views.py:191 msgid "Available document types" msgstr "Tipos de documentos disponibles" @@ -335,44 +351,55 @@ msgstr "¿Borrar el nodo de plantilla de indice: %s?" msgid "Edit the index template node: %s?" msgstr "¿Editar el nodo de plantilla de indice: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Esto podría significar que no se han creado plantillas de índice o que existen plantillas de índice, pero no están definidas correctamente." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "No hay instancias de índice disponibles." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navegación: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Contenido del indice: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Asigne el tipo de documento de este documento a un índice para que aparezca en unidades de organización de instancias de índices." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Este documento no está en ningún índice" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Nodos de indices que contienen el documento: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d índice en cola para la reconstrucción." msgstr[1] "%(count)d índices en cola para la reconstrucción." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "%(count)d índice reiniciado." +msgstr[1] "%(count)díndices reiniciados." + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "Plantillas de índice para las que se eliminarán sus instancias." diff --git a/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.mo index c8364b83cd..e04ff3d76f 100644 Binary files a/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.po index 30c9bfabd9..c5d91c8b8c 100644 --- a/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "هیچ یک" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "نوع سند" @@ -30,23 +30,23 @@ msgstr "نوع سند" msgid "Document indexing" msgstr "نمایه سازی سند" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "سطوح کل" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "کل اسناد" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "سطح" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "سطوح" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "اسناد" @@ -58,152 +58,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "تاریخ ایجاد" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "نمایه ها" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "تمامی نمایه های سند را از ابتدا پاک می کند." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "بازسازی نمایه ها" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "بازسازی نمایه" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "تمامی نمایه های سند را از ابتدا پاک می کند." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "بازسازی نمایه ها" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "ایجاد نمایه" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "حذف" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "ویرایش" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "الگو درخت" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "گره فرزند جدید" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "برچسب" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "برای ارزیابی این نمایه، این مقدار توسط سایر برنامه ها استفاده می شود." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "لاغر" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "این داده ها را وقتی که اطلاعات سند تغییر می کند قابل مشاهده و به روز می کند." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "فعال شده است" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "فهرست مطالب" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "مثال index" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "نمونه های فهرست" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "عبارت نمایه سازی" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "علت این گره را هنگامی که اطلاعات سند تغییر می کند قابل مشاهده و به روز می شود." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "این گزینه را بررسی کنید تا این گره به عنوان یک ظرف برای اسناد عمل کند و نه به عنوان یک پدر برای گره های بیشتر." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "پیوند اسناد" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "گره ی Index" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "نمایه گره قالب" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "ریشه" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "خطای نمایه سازی سند: %(document)s؛ عبارت: %(expression)s؛ %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "نمایه گره فهرست " -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "ارزش" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "مثال گره فهرست" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "نمایه های گره های نمونه" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "مثال گره سند فهرست" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "مستندات نمونه گره ها را نشان می دهد" @@ -293,6 +305,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "نوع سند موجود" @@ -333,44 +349,55 @@ msgstr "گره index index را حذف کنید: %s؟" msgid "Edit the index template node: %s?" msgstr "گره index index را ویرایش کنید: %s؟" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "ناوبری: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "فهرست مطالب: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "گره های نمایه حاوی سند: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.mo index 755fd6eb58..5b19a87a27 100644 Binary files a/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.po index 9947f7029b..67d8bae03e 100644 --- a/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/fr/LC_MESSAGES/django.po @@ -5,6 +5,7 @@ # Translators: # Christophe CHAUVET , 2017 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Pierre Lhoste , 2012 # SadE54 , 2013 # Thierry Schott , 2016 @@ -13,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-11-19 17:57+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-08 19:19+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,7 +28,7 @@ msgstr "" msgid "None" msgstr "Aucun" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Types de document" @@ -35,23 +36,23 @@ msgstr "Types de document" msgid "Document indexing" msgstr "Indexation de document" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Nombre de niveaux" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Nombre total de documents" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Niveau" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveaux" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documents" @@ -63,152 +64,164 @@ msgstr "Index créé" msgid "Index edited" msgstr "Index modifié" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Les modèles d'index en en file d'attente pour la reconstruction." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Modèles d'index" +#: forms.py:34 +msgid "Template" +msgstr "Modèle" + #: handlers.py:20 msgid "Creation date" msgstr "Date de création" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Index" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Supprimer et reconstruire les index des documents en partant de zéro." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Reconstruire les index" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Reconstruire l'index" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Supprimer et reconstruire les index des documents en partant de zéro." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Reconstruire les index" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "Réinitialiser les index" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Créer un index" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Supprimer" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Modifier" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Modèle d'arborescence" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nouveau noeud enfant" #: models.py:36 +msgid "Short description of this index." +msgstr "Description courte de cet index." + +#: models.py:37 msgid "Label" msgstr "Libellé" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Cette valeur sera utilisée par d'autres applications pour faire référence à cet index." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Jeton" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Permet à cet index d'être à la fois visible et mis à jour quand le contenu d'un document est modifié." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Activé" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Index" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Instance d'index" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instances d'index" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Entrez un modèle à utiliser. Utilisez le langage de gabarit par défaut de Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Expression d'indexation" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Permet à ce nœud d'être visible et mis à jour quand le contenu d'un document est modifié." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Cochez cette option pour permettre à ce nœud d'être un conteneur de documents et pas seulement un nœud parent d'autres nœuds enfants." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Lier les documents" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Modèle de nœud d'index" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Modèle de nœud d'index" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Racine" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Erreur lors de l'indexation du document : %(document)s; expression: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Nœud de modèle d'index" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valeur" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Instance de nœud d'index" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Instances de nœuds d'index" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Instance de nœud d'index de document" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Instances de nœuds d'index de document" @@ -298,6 +311,10 @@ msgstr "Il n'y a pas d'index." msgid "Rebuild index: %s" msgstr "Index en reconstruction: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "Index mis en file d'attente pour la reconstruction." + #: views.py:191 msgid "Available document types" msgstr "Types de documents disponibles" @@ -338,44 +355,55 @@ msgstr "Supprimer le nœud du modèle d'index : %s ?" msgid "Edit the index template node: %s?" msgstr "Modifier le nœud du modèle d'index : %s" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Cela peut signifier qu'aucun modèle d'index n'a été créé ou qu'il existe des modèles d'index, mais qu'ils ne sont pas correctement définis." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Il n'y a pas d'instance d'index disponible." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigation : %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Contenu de l'index : %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Ce document ne figure dans aucun index" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Nœuds d'index contenant le document : %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d index en file d'attente pour reconstruction." msgstr[1] "%(count)d index en en file d'attente pour la reconstruction." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "%(count)d réinitialisation d'index." +msgstr[1] "%(count)d index réinitialisés." + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.mo index 99435e208e..b33fb7e4df 100644 Binary files a/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.po index d0faaed501..68fe7a89d5 100644 --- a/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "Semmi" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Dokumentum típusok" @@ -30,23 +30,23 @@ msgstr "Dokumentum típusok" msgid "Document indexing" msgstr "Dokumentum indexelés" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Dokumentumok száma" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "dokumentumok" @@ -58,152 +58,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indexek" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Törlés" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Szerkesztés" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Cimke" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Hivatkozás" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Bekapcsolt" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Érték" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -293,6 +305,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -333,44 +349,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.mo index c7f453afe5..f70fb362f4 100644 Binary files a/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.po index a687b78a6f..e06432d483 100644 --- a/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "Nihil" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipe dokumen" @@ -29,23 +29,23 @@ msgstr "Tipe dokumen" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Total dokumen" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumen" @@ -57,152 +57,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Hapus" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Sunting" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Label" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -292,6 +304,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Tipe dokumen tersedia" @@ -332,43 +348,53 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.mo index fc4d5b9d9f..3db6c77223 100644 Binary files a/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.po index 0b5b2b9f32..13085124fa 100644 --- a/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/it/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-28 11:43+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -26,7 +26,7 @@ msgstr "" msgid "None" msgstr "Nessuno" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipi di documento" @@ -34,23 +34,23 @@ msgstr "Tipi di documento" msgid "Document indexing" msgstr "Indicizzazione documento" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Livelli totali" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Totale documenti" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Livello" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Livelli" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documenti" @@ -62,152 +62,164 @@ msgstr "Indice creato" msgid "Index edited" msgstr "Indice modificato" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Data di creazione" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indici" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Cancellazione e ricostruzione di tutti gli indici documento" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Ricostruisci indici" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Ricostruisci l'indice" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Cancellazione e ricostruzione di tutti gli indici documento" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Ricostruisci indici" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Crea indice" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Cancella" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Modifica" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Template Principale" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nuovo nodo figlio" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "etichetta" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Questo valore sarà usato dalle altre app per riferirirsi a questo indice" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Fa sì che questo indice possa essere visibile e aggiornato quando i dati del documento cambiano." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Abilitato" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Indice" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instanze indice" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Inserisci un template da renderizzare. Usa il linguaggio standard dei template di Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Espressione di indicizzazione" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Fa sì che questo nodo possa essere visibili e aggiornato quando i dati del documento cambiano." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Selezionare questa opzione per questo specifico nodo quale contenitore per i documenti e non come un genitore per ulteriori nodi." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Documenti di collegamento" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Indice del nodo Template " -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Indici dei nodi Template" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Principale" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Errore nell'ndicizzazione del documento: %(document)s; espressione: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Indice del nodo Template" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valore" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Istanza nodo Indice" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Istanze nodo indici" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Istanza del nodo indice del documento" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Istanze dei nodi indice del documento" @@ -297,6 +309,10 @@ msgstr "Non ci sono indici" msgid "Rebuild index: %s" msgstr "Ricostruisci indice: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Tipi di documento disponibili" @@ -337,44 +353,55 @@ msgstr "Cancellare il template del nodo indice: %s?" msgid "Edit the index template node: %s?" msgstr "Modificare il template del nodo indice: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Questo significa che non sono stati creati template di indice oppure che ci sono template di indice ma non sono correttamente definiti." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Non ci sono istanze di indice disponibili." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigazione: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Contenuti per l'indice: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Questo documento non è presente in nessun indice" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Indici contenuti nel documento: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d indici in coda per la ricostruzione." msgstr[1] "%(count)d indici in attesa di ricostruzione." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.mo index 7275023b34..4730ef007b 100644 Binary files a/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.po index c4ffe50c4b..3bed9c0998 100644 --- a/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/lv/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "Nav neviens" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Dokumentu veidi" @@ -30,23 +30,23 @@ msgstr "Dokumentu veidi" msgid "Document indexing" msgstr "Dokumentu indeksēšana" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Kopējais līmenis" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Kopā dokumenti" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Līmenis" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Līmeņi" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenti" @@ -58,152 +58,164 @@ msgstr "Indekss izveidots" msgid "Index edited" msgstr "Indekss rediģēts" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Indeksa veidnes, kas jāveido rindā atjaunošanai." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Indeksu veidnes" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Izveidošanas datums" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indeksi" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Izdzēš un izveido visus dokumenta indeksus." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Atjaunot indeksus" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Atjaunot indeksu" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Izdzēš un izveido visus dokumenta indeksus." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Atjaunot indeksus" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Izveidot indeksu" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Dzēst" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Rediģēt" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Koku veidne" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Jauns bērnu mezgls" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Etiķete" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Šo vērtību izmantos citas lietotnes, lai atsauktos uz šo rādītāju." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Lode" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Indekss ir redzams un atjaunināts, kad mainās dokumentu dati." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Iespējots" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Indekss" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Indeksa piemērs" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Indeksa gadījumi" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Ievadiet veidni, kas jāpiešķir. Izmantojiet Django noklusējuma veidnes valodu (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Indeksācijas izteiksme" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Šāda mezgls ir redzams un atjaunināts, kad mainās dokumentu dati." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Atzīmējiet šo opciju, lai šis mezgls darbotos kā konteiners dokumentiem un nevis kā vecāks turpmākajiem mezgliem." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Saite dokumentus" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Indeksa mezgla veidne" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Indeksu mezglu veidne" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Sakne" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Kļūdas indeksēšanas dokuments: %(document)s; izteiksme: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Indeksa veidnes mezgls" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Vērtība" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Indeksa mezgla piemērs" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Indeksē mezglu gadījumus" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Dokumenta indeksa mezgla piemērs" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Dokumenta indeksu mezglu gadījumi" @@ -293,6 +305,10 @@ msgstr "Nav indeksu." msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Pieejamie dokumentu veidi" @@ -333,45 +349,57 @@ msgstr "Dzēst indeksa veidnes mezglu: %s?" msgid "Edit the index template node: %s?" msgstr "Rediģējiet indeksa veidnes mezglu: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Tas varētu nozīmēt, ka nav izveidotas nevienas indeksa veidnes vai ka indeksu veidnes, bet tās nav pareizi definētas." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Nav pieejami indeksu gadījumi." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigācija: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Indeksa saturs: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Piešķiriet šī dokumenta dokumenta tipu indeksam, lai tas parādītos šo indeksu organizācijas vienību gadījumos." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Šis dokuments nav nevienā indeksā" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Indeksu mezgli, kas satur dokumentu: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d indeksi tiek atjaunoti." msgstr[1] "%(count)d indekss, kas rindā ir atjaunots." msgstr[2] "%(count)d indeksi tiek atjaunoti." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.mo index c48e00bd92..b316b14f45 100644 Binary files a/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.po index cc5477eeb9..ead0fc34aa 100644 --- a/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/nl_NL/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -24,7 +24,7 @@ msgstr "" msgid "None" msgstr "Geen" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Documentsoorten" @@ -32,23 +32,23 @@ msgstr "Documentsoorten" msgid "Document indexing" msgstr "Documentindexering" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Niveau" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documenten" @@ -60,152 +60,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Aanmaakdatum" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indexeringen" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Documentindexeringen vanaf nul vernieuwen" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Opnieuw indexeren" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Documentindexeringen vanaf nul vernieuwen" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Opnieuw indexeren" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Indexering aanmaken" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Verwijderen" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Bewerken" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Sjabloon boomstructuur" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nieuwe node" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Label" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Maakt deze index zichtbaar en 'up-to-date' wanneer document gegevens wijzigd." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Ingeschakeld" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Index" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Indexeringsexpressie" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Maakt deze node zichtbaar en 'up-to-date' wanneer document gegevens wijzigen" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Selecteer deze optie, wanneer deze node alleen documenten dient te bevatten. " -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Koppel documenten" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Fout bij het indexeren van document: %(document)s; uitdrukking: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Waarde" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -295,6 +307,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Beschikbare documentsoorten" @@ -335,44 +351,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.mo index af4a28c7e9..9753863ac5 100644 Binary files a/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.po index c30947cbeb..ad0b5bbc46 100644 --- a/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/pl/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" @@ -24,7 +24,7 @@ msgstr "" msgid "None" msgstr "Brak" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Typy dokumentów" @@ -32,23 +32,23 @@ msgstr "Typy dokumentów" msgid "Document indexing" msgstr "Indeksowanie dokumentu" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Razem poziomy" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Razem dokumenty" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Poziom" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Poziomy" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenty" @@ -60,152 +60,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Data utworzenia" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indeksy" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Usuwa i tworzy od podstaw wszystkie indeksy dokumentów." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Przebudowa indeksów" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Przebuduj indeks" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Usuwa i tworzy od podstaw wszystkie indeksy dokumentów." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Przebudowa indeksów" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Tworzenie indeksu" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Usunąć" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Edytuj" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Szablon drzewa" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nowy węzeł potomny" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Etykieta" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Wartość ta zostanie użyta przez inne aplikacje w celu odniesienia się do tego indeksu." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Powoduje że ten wskaźnik będzie widoczny i zaktualizowany podczas zmiany danych dokumentów." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Włączony" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Indeks" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instancje indeksów" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Wyrażenie indeksujące" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Causes this node to be visible and updated when document data changes." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Check this option to have this node act as a container for documents and not as a parent for further nodes." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Skojarz dokumenty" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Szablon węzła indeksu" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Szablon węzła indeksów" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Korzeń" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Błąd indeksowania dokumentu: %(document)s; wyrażenie: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Węzeł szablonu indeksu" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Wartość" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Instancja węzła indeksu" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Instancje węzła indeksów" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Instancja węzła indeksu dokumentu" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Instancje węzła indeksów dokumentu" @@ -295,6 +307,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Dostępne typy dokumentów" @@ -335,42 +351,42 @@ msgstr "Usunąć węzeł szablonu indeksu: %s?" msgid "Edit the index template node: %s?" msgstr "Edytować węzeł szablonu indeksu: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Nawigacja: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Zawartość indeksu: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Węzły indeksów zawierające dokument: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." @@ -378,3 +394,16 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo index eb11f5efae..822d6e1939 100644 Binary files a/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.po index b489b29c7c..c7136412f9 100644 --- a/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/pt/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr "" msgid "None" msgstr "Nenhum" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "" @@ -31,23 +31,23 @@ msgstr "" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documentos" @@ -59,152 +59,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Índices" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Exclui e cria a partir do zero todos os índices de documentos." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Exclui e cria a partir do zero todos os índices de documentos." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Eliminar" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Editar" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Nome" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Faz com que este índice seja visível e atualizado quando os dados do documento forem alterados." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Faz com que este nó seja visível e atualizado quando os dados do documento forem alterados." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Escolha esta opção para que este nó atue como contentor para documentos e não como pai de outros nós." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valor" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -294,6 +306,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -334,44 +350,55 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.mo index e2eb98c972..e767c26870 100644 Binary files a/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.po index 195305397f..97d3053360 100644 --- a/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/pt_BR/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -25,7 +25,7 @@ msgstr "" msgid "None" msgstr "Nenhum" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipos de Documentos" @@ -33,23 +33,23 @@ msgstr "Tipos de Documentos" msgid "Document indexing" msgstr "Indexação de documentos" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Total de níveis" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Total de documentos" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nível" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Níveis" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documento" @@ -61,152 +61,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Data de criação" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Índices" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Exclui e criar a partir do zero todos os índices de documento." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Reconstruir índices de documento" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Reconstruir índice" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Exclui e criar a partir do zero todos os índices de documento." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Reconstruir índices de documento" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Criar índice" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Excluir" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Editar" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Árvore de modelo" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Novo node filho" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Etiqueta" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Este valor será usado por outros aplicativos para referenciar este índice." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Identificador" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Faz com que este índice seja visível e atualizado quando dados de documentos forem alterados." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Habilitado" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Índice" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Instância de índice" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Instâncias de índice" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Insira um modelo para renderizar. Use a linguagem padrão de modelos do Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)." -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Indexando expressão" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Faz com que este nó seja visível e atualizado quando dados do documento forem alterados." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Marque esta opção para que este nó atue como um recipiente para documentos e não como um pai para outros nós secundários." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Link de documentos" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Índice de modelo de nó" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Indices de modelo de nó" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Raiz" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Erro indexando documento: %(document)s; expressão: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Indice de modelo de índice" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valor" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Índice de instância de nó" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Índices instâncias de nó " -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Instâncias do nó do índice de documentos" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Instâncias de nós de lindice de instâncias" @@ -296,6 +308,10 @@ msgstr "Não há índices." msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Tipos de documentos disponíveis" @@ -336,44 +352,55 @@ msgstr "Excluir o nó de modelo de índice: %s?" msgid "Edit the index template node: %s?" msgstr "Editar o nó de modelo de índice: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Isso pode significar que nenhum modelo de índice foi criado ou que existem modelos de índice, mas eles não foram definidos apropriadamente." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Não há instâncias de índices disponíveis." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navegação: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Conteúdo para Indice? %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Associe o tipo deste documento a um índice para que ele apareça em instâncias das unidades de organização desses índices." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Este documento não está em nenhum índice" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Indexar nós contendo documento: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d index enfileirado para reconstrução." msgstr[1] "%(count)d índices enfileirados para reconstrução." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.mo index 85e9e8189e..b9e9b9fcb6 100644 Binary files a/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.po index bbc5d1e2c8..d28024fbb7 100644 --- a/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/ro_RO/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-09-03 08:35+0000\n" -"Last-Translator: Harald Ersch\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +23,7 @@ msgstr "" msgid "None" msgstr "Nici unul" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Tipuri de documente" @@ -31,23 +31,23 @@ msgstr "Tipuri de documente" msgid "Document indexing" msgstr "Indexarea documentelor" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "Total niveluri" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "Total documente" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nivel" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveluri" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Documente" @@ -59,152 +59,164 @@ msgstr "Index creat" msgid "Index edited" msgstr "Index editat" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "Șabloanele index ce vor fi în trimise în coada așteptare pentru reconstrucție." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "Șabloane de index" +#: forms.py:34 +msgid "Template" +msgstr "Șablon" + #: handlers.py:20 msgid "Creation date" msgstr "Data creării" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Indexuri" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Șterge și creează de la zero toate indexurile de documente." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Refaceți index-uri" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Refaceți indexul" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Șterge și creează de la zero toate indexurile de documente." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Refaceți index-uri" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "Resetați indexurile" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Creați index" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Șterge" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Editează" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Arborele șablon" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Nou nod copil" #: models.py:36 +msgid "Short description of this index." +msgstr "Scurtă descriere a acestui indice." + +#: models.py:37 msgid "Label" msgstr "Etichetă" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Această valoare va fi utilizată de alte aplicații pentru a face referință la acest index." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Slug" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Cauză pentru acest index să fie vizibil și actualizat când documentul suferă schimbări." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Activat" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Index" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Exemplu de index" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Exemple de index-uri" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "Introduceți un șablon pentru a fi afișat. Utilizați limbajul templating implicit al lui Django (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Expresie de indexare" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Va face ca acest nod să fie vizibil și actualizat la modificarea datelor documentului." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Bifați această opțiune pentru a avea acest nod ca un container pentru documente și nu ca un părinte pentru nodurile suplimentare." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Leagă documente" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Șablon pt. nod index" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Șabloane pt. noduri index" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Rădăcină" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Eroare la indexarea ducumentuluir: %(document)s; expresie: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Nodul șablonului de index" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Valoare" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Instanță a nodului index" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Instanțele nodurilor index" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Exemplu de nod index document" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Documentul indexează instanțele de noduri" @@ -294,6 +306,10 @@ msgstr "Nu există indexuri." msgid "Rebuild index: %s" msgstr "Reconstruire indice: %s" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Tipuri de documente disponibile" @@ -334,45 +350,57 @@ msgstr "Ștergeți nodul șablon index: %s?" msgid "Edit the index template node: %s?" msgstr "Editați nodul șablonului index: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "Acest lucru ar putea însemna că nu au fost create șabloane de index sau că există șabloane index, dar nu sunt definite în mod corespunzător." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "Nu există instanțe index disponibile." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigare: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Conținutul pentru index: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "Atribuiți tipul de document al acestui document într-un index pentru a fi afișat în instanțele unităților de organizare a acestor indici." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "Acest document nu este în nici un index" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Nodurile indexurilor care conțin documentul: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "Indicele %(count)d se află în coada de așteptare pentru reconstrucție." msgstr[1] "%(count)d indexate în coada pentru reconstrucție." msgstr[2] "%(count)d indexări în coada pentru reconstrucție." + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "%(count)d resetare index." +msgstr[1] "%(count)d resetează indexurile." +msgstr[2] "%(count)d indexări resetate." + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "Șabloane de index pentru care instanțele lor vor fi șterse." diff --git a/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo index b3d02b312f..512e1f993a 100644 Binary files a/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.po index cb7f138f82..203c6391c1 100644 --- a/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "Ни один" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Типы документов" @@ -30,23 +30,23 @@ msgstr "Типы документов" msgid "Document indexing" msgstr "Индексирование документа" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Уровень" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Документы" @@ -58,152 +58,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Дата создания" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Индексы" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Удаляет и создается с нуля, все индексы документа." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Восстановление индексов" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Удаляет и создается с нуля, все индексы документа." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Восстановление индексов" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Создать индекс" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Удалить" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Редактировать" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Новый дочерний узел" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Надпись" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Этот индекс должен быть видимым и обновляться при изменении данных документа." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Доступно" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Индекс" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Экземпляры индекса" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Этот узел должен быть видимым и обновляются при изменении данных документа." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Этот узел будет контейнером для документов и не будет иметь дочерних узлов." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Корень" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Значение" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -293,6 +305,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Доступные типы документов" @@ -333,42 +349,42 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Навигация: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." @@ -376,3 +392,16 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.mo index e130a4456e..a9ea54d479 100644 Binary files a/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.po index 48afe7eae7..7177f68a4d 100644 --- a/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "Brez" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "" @@ -29,23 +29,23 @@ msgstr "" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenti" @@ -57,152 +57,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Izbriši" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Oznaka" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -292,6 +304,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -332,42 +348,42 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." @@ -375,3 +391,16 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.mo index 6693c96fee..ed3eac413c 100644 Binary files a/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.po index 4f05979853..c451bdcfd1 100644 --- a/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/tr_TR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr "" msgid "None" msgstr "Yok" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "Doküman türleri" @@ -31,23 +31,23 @@ msgstr "Doküman türleri" msgid "Document indexing" msgstr "Belge dizini oluşturma" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Seviye" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Belgeler" @@ -59,152 +59,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "Oluşturulma tarihi" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "Dizinler" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "Tüm belge dizinlerini siler ve sıfırdan oluşturur." - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "Dizinleri yeniden oluştur" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "Dizini yenile" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "Tüm belge dizinlerini siler ve sıfırdan oluşturur." + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "Dizinleri yeniden oluştur" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "Dizin oluştur" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "Sil" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Düzenle" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "Ağaç şablonu" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "Yeni alt düğüm" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "Etiket" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "Bu değer, bu dizine atıfta bulunmak için diğer uygulamalar tarafından kullanılacaktır." -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "Sümüklüböcek" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "Belge verileri değiştiğinde bu dizin görünür ve güncellenmesine neden olur." -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "Etkin" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "Dizin" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "Dizin örneği" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "Dizin örnekleri" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "Dizinleme ifadesi" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "Belge verileri değiştiğinde bu düğümün görünür ve güncellenmesine neden olur." -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "Bu düğümün belgeler için bir kap olarak hareket ettirilmesi ve diğer düğümler için üst öğe olmaması için bu seçeneği işaretleyin." -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "Belgeleri bağla" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "Dizin düğümü şablonu" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "Dizinler düğüm şablonu" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "Kök" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "Belge hata dizini: %(document)s; Ifade: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "Dizin şablonu düğümü" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Değer" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "Dizin düğümü örneği" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "Dizin düğüm örnekleri" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "Belge dizini düğümü örneği" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "Doküman dizinleri düğüm örnekleri" @@ -294,6 +306,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "Kullanılabilir belge türleri" @@ -334,44 +350,55 @@ msgstr "Dizin şablonu düğümünü silin: %s?" msgid "Edit the index template node: %s?" msgstr "Dizin şablonu düğümünü düzenle: %s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "Navigasyon: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "Dizin içeriği: %s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "Belgeyi içeren düğümlerin dizinleri: %s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" msgstr[1] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" +msgstr[1] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.mo index 2286853b5d..e233b9eba7 100644 Binary files a/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.po index 179fd7e37e..495730a481 100644 --- a/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -21,7 +21,7 @@ msgstr "" msgid "None" msgstr "None" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "" @@ -29,23 +29,23 @@ msgstr "" msgid "Document indexing" msgstr "" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Tài liệu" @@ -57,152 +57,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "Sửa" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "index instance" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Giá trị" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "" @@ -292,6 +304,10 @@ msgstr "" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "" @@ -332,43 +348,53 @@ msgstr "" msgid "Edit the index template node: %s?" msgstr "" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.mo index 85e320863d..42e9ddb852 100644 Binary files a/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.po b/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.po index ff06fd71f3..746287e7e9 100644 --- a/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-05 10:07+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -22,7 +22,7 @@ msgstr "" msgid "None" msgstr "没有" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" msgstr "文件类型" @@ -30,23 +30,23 @@ msgstr "文件类型" msgid "Document indexing" msgstr "文档索引" -#: apps.py:117 +#: apps.py:124 msgid "Total levels" msgstr "总级别" -#: apps.py:125 +#: apps.py:132 msgid "Total documents" msgstr "文档总数" -#: apps.py:130 apps.py:142 apps.py:161 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "级别" -#: apps.py:147 apps.py:166 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "级别" -#: apps.py:155 apps.py:173 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "文档" @@ -58,152 +58,164 @@ msgstr "" msgid "Index edited" msgstr "" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." msgstr "" -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" msgstr "" +#: forms.py:34 +msgid "Template" +msgstr "" + #: handlers.py:20 msgid "Creation date" msgstr "创立日期" -#: links.py:24 links.py:39 links.py:65 links.py:69 models.py:60 views.py:149 -#: views.py:322 +#: links.py:23 links.py:38 links.py:75 links.py:79 models.py:62 views.py:149 +#: views.py:323 msgid "Indexes" msgstr "索引" -#: links.py:48 -msgid "Deletes and creates from scratch all the document indexes." -msgstr "删除并从头开始创建所有文档索引。" - -#: links.py:50 views.py:445 -msgid "Rebuild indexes" -msgstr "重建索引" - -#: links.py:56 queues.py:24 +#: links.py:44 queues.py:24 msgid "Rebuild index" msgstr "重建索引" -#: links.py:73 views.py:87 +#: links.py:53 links.py:64 +msgid "Deletes and creates from scratch all the document indexes." +msgstr "删除并从头开始创建所有文档索引。" + +#: links.py:55 views.py:446 +msgid "Rebuild indexes" +msgstr "重建索引" + +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "" + +#: links.py:83 views.py:87 msgid "Create index" msgstr "创建索引" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" msgstr "删除" -#: links.py:91 links.py:115 +#: links.py:101 links.py:125 msgid "Edit" msgstr "编辑" -#: links.py:98 +#: links.py:108 msgid "Tree template" msgstr "树模板" -#: links.py:104 +#: links.py:114 msgid "New child node" msgstr "新的子节点" #: models.py:36 +msgid "Short description of this index." +msgstr "" + +#: models.py:37 msgid "Label" msgstr "标签" -#: models.py:40 +#: models.py:41 msgid "This value will be used by other apps to reference this index." msgstr "其他应用程序将使用此值来引用此索引。" -#: models.py:41 +#: models.py:42 msgid "Slug" msgstr "标称" -#: models.py:46 +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." msgstr "使文档数据更改时,此索引可见并更新。" -#: models.py:49 models.py:235 +#: models.py:50 models.py:237 msgid "Enabled" msgstr "启用" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" msgstr "索引" -#: models.py:191 +#: models.py:193 msgid "Index instance" msgstr "索引实例" -#: models.py:192 +#: models.py:194 msgid "Index instances" msgstr "索引实例" -#: models.py:223 +#: models.py:225 msgid "" "Enter a template to render. Use Django's default templating language " "(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" msgstr "输入要渲染的模板。使用Django的默认模板语言(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" msgstr "索引表达式" -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." msgstr "使文档数据更改时,此节点可见并更新。" -#: models.py:240 +#: models.py:242 msgid "" "Check this option to have this node act as a container for documents and not" " as a parent for further nodes." msgstr "选中此选项可使此节点充当文档的容器,而不是其他节点的父节点。" -#: models.py:243 +#: models.py:245 msgid "Link documents" msgstr "链接文件" -#: models.py:247 +#: models.py:249 msgid "Index node template" msgstr "索引节点模板" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" msgstr "索引节点模板" -#: models.py:252 +#: models.py:254 msgid "Root" msgstr "根" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" msgstr "错误索引文档:%(document)s;表达式:%(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" msgstr "索引模板节点" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "值" -#: models.py:364 +#: models.py:366 msgid "Index node instance" msgstr "索引节点实例" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" msgstr "索引节点实例" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" msgstr "文档索引节点实例" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" msgstr "文档索引节点实例" @@ -293,6 +305,10 @@ msgstr "没有索引。" msgid "Rebuild index: %s" msgstr "" +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "" + #: views.py:191 msgid "Available document types" msgstr "可用的文档类型" @@ -333,43 +349,53 @@ msgstr "删除索引模板节点:%s?" msgid "Edit the index template node: %s?" msgstr "编辑索引模板节点:%s?" -#: views.py:317 +#: views.py:318 msgid "" "This could mean that no index templates have been created or that there " "index templates but they are no properly defined." msgstr "这可能意味着没有创建索引模板或索引模板没有正确定义。" -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." msgstr "没有可用的索引实例。" -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" msgstr "导航:%s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" msgstr "索引目录:%s" -#: views.py:424 +#: views.py:425 msgid "" "Assign the document type of this document to an index to have it appear in " "instances of those indexes organization units. " msgstr "将此文档的文档类型分配给索引,使其显示在这些索引组织单位的实例中。" -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" msgstr "此文档不在任何索引中" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" msgstr "包含文档的索引节点:%s" -#: views.py:459 +#: views.py:460 #, python-format msgid "%(count)d index queued for rebuild." msgid_plural "%(count)d indexes queued for rebuild." msgstr[0] "%(count)d索引排队等待重建。" + +#: views.py:493 +#, python-format +msgid "%(count)d index reset." +msgid_plural "%(count)d indexes reset." +msgstr[0] "" + +#: views.py:506 +msgid "Index templates for which their instances will be deleted." +msgstr "" diff --git a/mayan/apps/document_indexing/migrations/0016_auto_20191005_0647.py b/mayan/apps/document_indexing/migrations/0016_auto_20191005_0647.py new file mode 100644 index 0000000000..6806fc9e96 --- /dev/null +++ b/mayan/apps/document_indexing/migrations/0016_auto_20191005_0647.py @@ -0,0 +1,18 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_indexing', '0015_auto_20190429_1922'), + ] + + operations = [ + migrations.AlterField( + model_name='index', + name='label', + field=models.CharField(help_text='Short description of this index.', max_length=128, unique=True, verbose_name='Label'), + ), + ] diff --git a/mayan/apps/document_indexing/models.py b/mayan/apps/document_indexing/models.py index e356bf6ff9..c734717eb3 100644 --- a/mayan/apps/document_indexing/models.py +++ b/mayan/apps/document_indexing/models.py @@ -33,6 +33,7 @@ class Index(models.Model): template and instance when resolved. """ label = models.CharField( + help_text=_('Short description of this index.'), max_length=128, unique=True, verbose_name=_('Label') ) slug = models.SlugField( @@ -49,7 +50,8 @@ class Index(models.Model): verbose_name=_('Enabled') ) document_types = models.ManyToManyField( - related_name='indexes', to=DocumentType, verbose_name=_('Document types') + related_name='indexes', to=DocumentType, + verbose_name=_('Document types') ) objects = IndexManager() diff --git a/mayan/apps/document_indexing/tests/__init__.py b/mayan/apps/document_indexing/tests/__init__.py index 82d60c8416..e69de29bb2 100644 --- a/mayan/apps/document_indexing/tests/__init__.py +++ b/mayan/apps/document_indexing/tests/__init__.py @@ -1 +0,0 @@ -from .mixins import * # NOQA diff --git a/mayan/apps/document_indexing/tests/mixins.py b/mayan/apps/document_indexing/tests/mixins.py index 12e1e28c1a..e4b720d26a 100644 --- a/mayan/apps/document_indexing/tests/mixins.py +++ b/mayan/apps/document_indexing/tests/mixins.py @@ -3,7 +3,8 @@ from __future__ import unicode_literals from ..models import Index from .literals import ( - TEST_INDEX_LABEL, TEST_INDEX_LABEL_EDITED, TEST_INDEX_SLUG + TEST_INDEX_LABEL, TEST_INDEX_LABEL_EDITED, TEST_INDEX_SLUG, + TEST_INDEX_TEMPLATE_DOCUMENT_LABEL_EXPRESSION ) @@ -20,6 +21,13 @@ class IndexTestMixin(object): if rebuild: Index.objects.rebuild() + def _create_test_index_template_node(self): + self.test_index.node_templates.create( + parent=self.test_index.template_root, + expression=TEST_INDEX_TEMPLATE_DOCUMENT_LABEL_EXPRESSION, + link_documents=True + ) + class IndexViewTestMixin(object): def _request_test_index_create_view(self): diff --git a/mayan/apps/document_indexing/tests/test_api.py b/mayan/apps/document_indexing/tests/test_api.py index 7220151422..6cb93d38fe 100644 --- a/mayan/apps/document_indexing/tests/test_api.py +++ b/mayan/apps/document_indexing/tests/test_api.py @@ -2,8 +2,8 @@ from __future__ import unicode_literals from rest_framework import status -from mayan.apps.documents.tests import DocumentTestMixin -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Index from ..permissions import ( @@ -69,7 +69,7 @@ class DocumentIndexingAPITestCase( self._create_test_index() response = self._request_test_index_delete_api_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertTrue(self.test_index in Index.objects.all()) @@ -90,7 +90,7 @@ class DocumentIndexingAPITestCase( response = self._request_test_index_detail_api_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertTrue('id' not in response.data) def test_index_detail_api_view_with_access(self): diff --git a/mayan/apps/document_indexing/tests/test_events.py b/mayan/apps/document_indexing/tests/test_events.py index eb826100c4..c5374899cd 100644 --- a/mayan/apps/document_indexing/tests/test_events.py +++ b/mayan/apps/document_indexing/tests/test_events.py @@ -2,8 +2,8 @@ from __future__ import unicode_literals from actstream.models import Action -from mayan.apps.common.tests import GenericViewTestCase -from mayan.apps.documents.tests import DocumentTestMixin +from mayan.apps.common.tests.base import GenericViewTestCase +from mayan.apps.documents.tests.mixins import DocumentTestMixin from ..permissions import ( permission_document_indexing_create, permission_document_indexing_edit, diff --git a/mayan/apps/document_indexing/tests/test_models.py b/mayan/apps/document_indexing/tests/test_models.py index d458e69625..77281c007e 100644 --- a/mayan/apps/document_indexing/tests/test_models.py +++ b/mayan/apps/document_indexing/tests/test_models.py @@ -2,13 +2,11 @@ from __future__ import unicode_literals from django.utils.encoding import force_text -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.tests import ( - DocumentTestMixin, TEST_SMALL_DOCUMENT_PATH -) +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.documents.tests.base import DocumentTestMixin from mayan.apps.documents.tests.literals import ( TEST_DOCUMENT_DESCRIPTION, TEST_DOCUMENT_DESCRIPTION_EDITED, - TEST_DOCUMENT_LABEL_EDITED + TEST_DOCUMENT_LABEL_EDITED, TEST_SMALL_DOCUMENT_PATH ) from mayan.apps.metadata.models import MetadataType, DocumentTypeMetadataType diff --git a/mayan/apps/document_indexing/tests/test_views.py b/mayan/apps/document_indexing/tests/test_views.py index 5354c4d206..7fd815e163 100644 --- a/mayan/apps/document_indexing/tests/test_views.py +++ b/mayan/apps/document_indexing/tests/test_views.py @@ -1,7 +1,8 @@ from __future__ import absolute_import, unicode_literals -from mayan.apps.common.tests import GenericViewTestCase -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.documents.tests.base import ( + GenericDocumentViewTestCase, GenericViewTestCase +) from ..models import Index, IndexInstanceNode from ..permissions import ( @@ -11,10 +12,7 @@ from ..permissions import ( permission_document_indexing_rebuild ) -from .literals import ( - TEST_INDEX_LABEL, TEST_INDEX_LABEL_EDITED, - TEST_INDEX_TEMPLATE_DOCUMENT_LABEL_EXPRESSION -) +from .literals import TEST_INDEX_LABEL, TEST_INDEX_LABEL_EDITED from .mixins import IndexTestMixin, IndexViewTestMixin @@ -80,13 +78,6 @@ class IndexViewTestCase( class IndexInstaceViewTestMixin(object): - def _create_index_template_node(self): - self.test_index.node_templates.create( - parent=self.test_index.template_root, - expression=TEST_INDEX_TEMPLATE_DOCUMENT_LABEL_EXPRESSION, - link_documents=True - ) - def _request_test_index_instance_node_view(self, index_instance_node): return self.get( viewname='indexing:index_instance_node_view', kwargs={ @@ -102,7 +93,7 @@ class IndexInstaceViewTestCase( def test_index_rebuild_view_no_permission(self): self.upload_document() self._create_test_index() - self._create_index_template_node() + self._create_test_index_template_node() response = self._request_test_index_rebuild_view() self.assertEqual(response.status_code, 404) @@ -112,7 +103,7 @@ class IndexInstaceViewTestCase( def test_index_rebuild_view_with_access(self): self.upload_document() self._create_test_index() - self._create_index_template_node() + self._create_test_index_template_node() self.grant_access( obj=self.test_index, @@ -159,6 +150,18 @@ class IndexToolsViewTestMixin(object): } ) + def _request_indexes_reset_get_view(self): + return self.get( + viewname='indexing:index_instances_reset' + ) + + def _request_indexes_reset_post_view(self): + return self.post( + viewname='indexing:index_instances_reset', data={ + 'index_templates': self.test_index.pk + } + ) + class IndexToolsViewTestCase( IndexTestMixin, IndexViewTestMixin, IndexToolsViewTestMixin, @@ -198,3 +201,43 @@ class IndexToolsViewTestCase( # An instance root exists self.assertTrue(self.test_index.instance_root.pk) + + def test_indexes_reset_no_permission(self): + self._create_test_index(rebuild=False) + self._create_test_index_template_node() + self.test_index.rebuild() + + response = self._request_indexes_reset_get_view() + self.assertNotContains( + response=response, text=self.test_index.label, status_code=200 + ) + + response = self._request_indexes_reset_post_view() + # No error since we just don't see the index + self.assertEqual(response.status_code, 200) + + self.assertEqual( + self.test_index.instance_root.get_children_count(), 1 + ) + + def test_indexes_reset_with_access(self): + self._create_test_index(rebuild=False) + self._create_test_index_template_node() + self.test_index.rebuild() + + self.grant_access( + obj=self.test_index, + permission=permission_document_indexing_rebuild + ) + + response = self._request_indexes_reset_get_view() + self.assertContains( + response=response, text=self.test_index.label, status_code=200 + ) + + response = self._request_indexes_reset_post_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_index.instance_root.get_children_count(), 0 + ) diff --git a/mayan/apps/document_indexing/urls.py b/mayan/apps/document_indexing/urls.py index 6b363dbf5f..b7a0414e0b 100644 --- a/mayan/apps/document_indexing/urls.py +++ b/mayan/apps/document_indexing/urls.py @@ -9,13 +9,13 @@ from .api_views import ( ) from .views import ( DocumentIndexNodeListView, DocumentTypeIndexesView, IndexInstanceNodeView, - IndexListView, IndexesRebuildView, SetupIndexDocumentTypesView, - SetupIndexCreateView, SetupIndexDeleteView, SetupIndexEditView, - SetupIndexListView, SetupIndexRebuildView, SetupIndexTreeTemplateListView, - TemplateNodeCreateView, TemplateNodeDeleteView, TemplateNodeEditView + IndexListView, IndexesRebuildView, IndexesResetView, + SetupIndexDocumentTypesView, SetupIndexCreateView, SetupIndexDeleteView, + SetupIndexEditView, SetupIndexListView, SetupIndexRebuildView, + SetupIndexTreeTemplateListView, TemplateNodeCreateView, + TemplateNodeDeleteView, TemplateNodeEditView ) - urlpatterns_templates = [ url( regex=r'^document_types/(?P\d+)/index_templates/$', @@ -84,6 +84,10 @@ urlpatterns_tools = [ regex=r'^instances/rebuild/$', view=IndexesRebuildView.as_view(), name='rebuild_index_instances' ), + url( + regex=r'^instances/reset/$', view=IndexesResetView.as_view(), + name='index_instances_reset' + ), ] urlpatterns = [] diff --git a/mayan/apps/document_indexing/views.py b/mayan/apps/document_indexing/views.py index f57a72ebdd..8ea099cbf6 100644 --- a/mayan/apps/document_indexing/views.py +++ b/mayan/apps/document_indexing/views.py @@ -17,7 +17,7 @@ from mayan.apps.documents.models import Document, DocumentType from mayan.apps.documents.permissions import ( permission_document_type_edit, permission_document_view ) -from mayan.apps.documents.views import DocumentListView +from mayan.apps.documents.views.document_views import DocumentListView from .events import event_index_template_edited from .forms import IndexTemplateFilteredForm, IndexTemplateNodeForm @@ -176,7 +176,7 @@ class SetupIndexRebuildView(ConfirmView): ) messages.success( - message='Index queued for rebuild.', request=self.request + message=_('Index queued for rebuild.'), request=self.request ) @@ -309,6 +309,7 @@ class IndexListView(SingleObjectListView): def get_extra_context(self): return { 'hide_links': True, + 'hide_object': True, 'no_results_icon': icon_index, 'no_results_main_link': link_index_template_create.resolve( context=RequestContext(request=self.request) @@ -473,3 +474,39 @@ class IndexesRebuildView(FormView): def get_post_action_redirect(self): return reverse(viewname='common:tools_list') + + +class IndexesResetView(FormView): + extra_context = { + 'title': _('Reset indexes'), + } + form_class = IndexTemplateFilteredForm + + def form_valid(self, form): + count = 0 + for index in form.cleaned_data['index_templates']: + index.instance_root.delete() + count += 1 + + messages.success( + message=ungettext( + singular='%(count)d index reset.', + plural='%(count)d indexes reset.', + number=count + ) % { + 'count': count, + }, request=self.request + ) + + return super(IndexesResetView, self).form_valid(form=form) + + def get_form_extra_kwargs(self): + return { + 'help_text': _( + 'Index templates for which their instances will be deleted.' + ), + 'user': self.request.user + } + + def get_post_action_redirect(self): + return reverse(viewname='common:tools_list') diff --git a/mayan/apps/document_parsing/api_views.py b/mayan/apps/document_parsing/api_views.py index 7d29b61d94..a4b68d3d69 100644 --- a/mayan/apps/document_parsing/api_views.py +++ b/mayan/apps/document_parsing/api_views.py @@ -2,11 +2,10 @@ from __future__ import absolute_import, unicode_literals from django.shortcuts import get_object_or_404 -from rest_framework import generics from rest_framework.response import Response from mayan.apps.documents.models import Document -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics from .models import DocumentPageContent from .permissions import permission_content_view @@ -21,7 +20,6 @@ class APIDocumentPageContentView(generics.RetrieveAPIView): mayan_object_permissions = { 'GET': (permission_content_view,), } - permission_classes = (MayanPermission,) serializer_class = DocumentPageContentSerializer def get_document(self): diff --git a/mayan/apps/document_parsing/apps.py b/mayan/apps/document_parsing/apps.py index c53b44b927..9bfe42fd2c 100644 --- a/mayan/apps/document_parsing/apps.py +++ b/mayan/apps/document_parsing/apps.py @@ -100,7 +100,7 @@ class DocumentParsingApp(MayanAppConfig): ) ModelField( - model=Document, name='versions__pages__content__content' + model=Document, name='versions__version_pages__content__content' ) ModelPermission.register( @@ -132,7 +132,7 @@ class DocumentParsingApp(MayanAppConfig): ) document_search.add_model_field( - field='versions__pages__content__content', label=_('Content') + field='versions__version_pages__content__content', label=_('Content') ) document_page_search.add_model_field( diff --git a/mayan/apps/document_parsing/links.py b/mayan/apps/document_parsing/links.py index 4fc81bca4d..8d5aadcbb5 100644 --- a/mayan/apps/document_parsing/links.py +++ b/mayan/apps/document_parsing/links.py @@ -10,6 +10,11 @@ from .permissions import ( permission_parse_document ) + +def is_document_page_disabled(context): + return not context['resolved_object'].enabled + + link_document_content = Link( args='resolved_object.id', icon_class_path='mayan.apps.document_parsing.icons.icon_document_content', @@ -28,7 +33,7 @@ link_document_content_delete_multiple = Link( view='document_parsing:document_content_delete_multiple', ) link_document_page_content = Link( - args='resolved_object.id', + args='resolved_object.id', conditional_disable=is_document_page_disabled, icon_class_path='mayan.apps.document_parsing.icons.icon_document_content', permissions=(permission_content_view,), text=_('Content'), view='document_parsing:document_page_content' @@ -74,6 +79,6 @@ link_document_type_submit = Link( ) link_error_list = Link( icon_class_path='mayan.apps.document_parsing.icons.icon_link_error_list', - permissions=(permission_content_view,), text=_('Parsing errors'), + permissions=(permission_parse_document,), text=_('Parsing errors'), view='document_parsing:error_list' ) diff --git a/mayan/apps/document_parsing/locale/ar/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/ar/LC_MESSAGES/django.po index cf0f9d3ae5..a379de16e2 100644 --- a/mayan/apps/document_parsing/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/ar/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Mohammed ALDOUB , 2018\n" "Language-Team: Arabic (https://www.transifex.com/rosarior/teams/13584/ar/)\n" @@ -30,7 +30,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "المحتوى" @@ -60,27 +60,27 @@ msgstr "" msgid "Contents" msgstr "المحتويات" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -174,7 +174,7 @@ msgstr "" "File path to poppler's pdftotext program used to extract text from PDF " "files." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" @@ -184,32 +184,32 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -220,21 +220,21 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po index 3e3ce06a53..b6d1453aa4 100644 --- a/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" @@ -30,7 +30,7 @@ msgstr "Разбор на документи" msgid "Result" msgstr "Резултат" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Съдържание" @@ -62,27 +62,27 @@ msgstr "Страница %(page_number)d" msgid "Contents" msgstr "Съдържание" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "Изтрийте анализираното съдържание" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Грешки при анализ" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Изтеглете съдържание" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Изпратете за анализ" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Настройка на анализа" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Анализиране на документи по тип" @@ -180,59 +180,59 @@ msgstr "" "Пътят на файла към програмата pdftotext на poppler, използвана за извличане " "на текст от PDF файлове." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "Да се изтрие ли анализираното съдържание на избрания документ?" msgstr[1] "Да се изтрие ли анализираното съдържание на избраните документи?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Съдържание за документ: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Съдържание за страница на документ: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Грешки в анализа на документ: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d документ е добавен към опашката за анализ" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d документи са добавени към опашката за анализ" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Да изпратите %(count)d документ на опашката за разбор?" msgstr[1] "Изпратете %(count)d документи на опашката за анализ" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Изпратете документ "%s" на опашката за анализ" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Редактиране на настройките за анализ на типа документ: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Изпратете всички документи от типа за анализ." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d документи са добавени към опашката за анализ." diff --git a/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.po index 1b8410b0aa..5250e5d0ab 100644 --- a/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Atdhe Tabaku , 2018\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" @@ -31,7 +31,7 @@ msgstr "Gramatička analiza dokumenta" msgid "Result" msgstr "Rezultat" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Sadržaj" @@ -61,27 +61,27 @@ msgstr "Strana %(page_number)d" msgid "Contents" msgstr "Sadržaj" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Greške u anlazi" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Preuzmi sadržaj" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Dodaj za analizu" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Podešavanja analize" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analiziraj dokumente po tipu" @@ -176,39 +176,39 @@ msgid "" msgstr "" "Staza do popplerovog programa pdftotext za vađenje teksta iz PDF datoteka." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Sadržaj za dokument: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Greške analize u dokumentu: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)ddokument dodan u red liste " -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumente dodati u red liste" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -216,21 +216,21 @@ msgstr[0] "Pošaljite dokument %(count)d u red liste?" msgstr[1] "Pošaljite dokumente %(count)d u red liste" msgstr[2] "Pošaljite dokumente %(count)d u red liste" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Pošaljite dokument \"%s\" u red liste" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po index 8e94607a2f..fdcc712f85 100644 --- a/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" @@ -29,7 +29,7 @@ msgstr "Analýza dokumentů" msgid "Result" msgstr "Výsledek" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Obsah" @@ -61,27 +61,27 @@ msgstr "Strana %(page_number)d" msgid "Contents" msgstr "Obsah" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "Smazat analyzovaný obsah" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Chyby analýzy" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Stáhněte si obsah" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Odeslat k analýze" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Nastavení analýzy" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analyzujte dokumenty podle typu" @@ -177,7 +177,7 @@ msgstr "" "Cesta souboru k programu pplftotext poppler, který se používá k extrahování " "textu ze souborů PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "Odstranit analyzovaný obsah vybraného dokumentu?" @@ -185,32 +185,32 @@ msgstr[1] "Smazat analyzovaný obsah vybraných dokumentů?" msgstr[2] "Smazat analyzovaný obsah vybraných dokumentů?" msgstr[3] "Smazat analyzovaný obsah vybraných dokumentů?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Obsah dokumentu: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Obsah stránky dokumentu: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Chyby analýzy dokumentu: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d dokument přidán do fronty pro analýzu" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumenty přidané do fronty pro analýzu" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -219,21 +219,21 @@ msgstr[1] "Odešlete dokumenty %(count)d do fronty pro analýzu" msgstr[2] "Odešlete dokumenty %(count)d do fronty pro analýzu" msgstr[3] "Odešlete dokumenty %(count)d do fronty pro analýzu" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Zašlete dokument "%s" do fronty pro analýzu" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Upravit nastavení analýzy typu dokumentu: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Odešlete všechny dokumenty daného typu k analýze." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d dokumenty přidané do fronty pro analýzu." diff --git a/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.po index 26db85aac4..23045b6609 100644 --- a/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Rasmus Kierudsen , 2018\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" @@ -29,7 +29,7 @@ msgstr "" msgid "Result" msgstr "Resultat" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Indhold" @@ -59,27 +59,27 @@ msgstr "Side %(page_number)d" msgid "Contents" msgstr "Indeholder" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Download indhold" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -171,59 +171,59 @@ msgid "" "files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Indhold i dokument: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Gennemgår dokument: %s for fejl" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d dokument tilføjet køen for gennemgang" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumenter tilføjet køen for gennemgang" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Klargører %(count)d dokumenter til køen for gennemgang" msgstr[1] "Klargør %(count)d dokumenter til køen for gennemgang" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Klargør dokumentet \"%s\" til køen for gennegang" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.po index 5f6a028d46..07e1c04103 100644 --- a/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Marvin Haschker , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -33,7 +33,7 @@ msgstr "Dokument parsen" msgid "Result" msgstr "Ergebnis" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Inhalt" @@ -65,27 +65,27 @@ msgstr "Seite %(page_number)d" msgid "Contents" msgstr "Inhalte" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "OCR-Inhalt löschen" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Fehler beim Parsen" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Inhalt herunterladen" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Zum Parsen einreichen" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Parsing einrichten" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Dokumente nach Typ parsen" @@ -181,59 +181,59 @@ msgstr "" "Pfad zum \"pdftotext\"-Programm (bereitgestellt von poppler), das benutzt " "wird, um Text aus PDF-Dateien zu extrahieren." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "Den OCR-Inhalt des auswählten Dokumentes löschen?" msgstr[1] "Den OCR-Inhalt der ausgewählten Dokumente löschen?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Inhalt von Dokument: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Inhalt von Dokument Seite: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Parsing Fehler für Dokument: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d Dokument zur Parsing-Warteschlange hinzugefügt" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d Dokumente zur Parsing-Warteschlange hinzugefügt" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "%(count)d-Dokument an die Parsing-Warteschlange senden?" msgstr[1] "%(count)d Dokumente in die Parsing-Warteschlange einreihen" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Dokument \"%s\" in die Parsing-Warteschlange einreihen" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Parsereinstellungen für Dokumententyp %s bearbeiten." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Alle Dokumente eines Typs zum Parsen einreichen." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d Dokumente zur Parsing-Warteschlange hinzugefügt." diff --git a/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po index b8406343d7..b210af1750 100644 --- a/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" @@ -30,7 +30,7 @@ msgstr "Ανάλυση εγγράφου" msgid "Result" msgstr "Αποτέλεσμα" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Περιεχόμενο" @@ -60,27 +60,27 @@ msgstr "Σελίδα %(page_number)d" msgid "Contents" msgstr "Περιεχόμενα" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Σφάλμα κατάτην ανάλυση" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Κατέβασμα περιεχομένου" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Κατάθεση προς ανάλυση" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Ανάλυση εγγρων ανά τύπο" @@ -173,59 +173,59 @@ msgid "" msgstr "" "Διαδρομή του προγράμματος pdftotext για την εξαγωγή κειμένου από αρχεία PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Περιεχόμενο του εγγράφου: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Σφάλματα ανάλυσης του εγγράφου: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d έγγραφο προστέθηκε στην λίστα προς ανάλυση" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d έγγραφα προστέθηκαν στην λίστα προς ανάλυση" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Υποβάλετε το έγγραφο %(count)d στην ουρά αναλύσεων;" msgstr[1] "Υποβολή %(count)d εγγράφων στην λίστα προς ανάλυση;" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Υποβολή εγγράφου \"%s\" στην λίστα προς ανάλυση" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/en/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/en/LC_MESSAGES/django.po index b6d3ca94ca..7e8c1ef163 100644 --- a/mayan/apps/document_parsing/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,7 +26,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "" @@ -56,27 +56,27 @@ msgstr "" msgid "Contents" msgstr "" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -167,59 +167,59 @@ msgid "" "File path to poppler's pdftotext program used to extract text from PDF files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.po index e694e3d0e7..0801133f16 100644 --- a/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Roberto Rosario, 2019\n" "Language-Team: Spanish (https://www.transifex.com/rosarior/teams/13584/es/)\n" @@ -29,7 +29,7 @@ msgstr "Análisis de documentos" msgid "Result" msgstr "Resultado" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Contenido" @@ -61,27 +61,27 @@ msgstr "Página %(page_number)d" msgid "Contents" msgstr "Contenido" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "Eliminar contenido analizado" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Errores de análisis" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Descargar contenido" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Enviar para analizar" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Configurar extracción de texto" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analizar documentos por tipo" @@ -180,59 +180,59 @@ msgstr "" "Ruta de acceso al programa de poppler llamado pdftotext utilizado para " "extraer texto de archivos PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "¿Eliminar el contenido analizado del documento seleccionado?" msgstr[1] "¿Eliminar el contenido analizado de los documentos seleccionados?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Contenido del documento: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Contenido de la página del documento: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Errores de análisis del documento: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d documento añadido a la lista de análisis" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d documentos añadidos a la lista de análisis" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "¿Enviar %(count)d documento a la cola de análisis?" msgstr[1] "Enviar %(count)d documentos a la lista de análisis" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Enviar el documento \"%s\" a la lista de análisis" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Edite la configuración de análisis para el tipo de documento: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Enviar todos los documentos de un tipo para su análisis." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d documentos agregados a la lista de análisis." diff --git a/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po index 6d23235dba..e7b9f0f13d 100644 --- a/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Mehdi Amani , 2018\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" @@ -30,7 +30,7 @@ msgstr "تجزیه و تحلیل سند" msgid "Result" msgstr "جواب" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "محتوا" @@ -60,27 +60,27 @@ msgstr "صفحه %(page_number)d" msgid "Contents" msgstr "محتوا" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "خطاهای تجزیه" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "دانلود محتوا" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "ارسال برای تجزیه و تحلیل" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "هر نوع اسناد را تجزیه کنید" @@ -172,59 +172,59 @@ msgid "" "files." msgstr "محل فایل POPPLER جهت استخراج TEXT از PDF" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "محتوا برای سند: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "خطاهای تجزیه برای سند: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d سند اضافه شده به صف تجزیه و تحلیل" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "اسناد %(count)d اضافه شده به صف تجزیه و تحلیل" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] " ارسال \"%(count)d\" از اسناد به صف تجزیه و تحلیل" msgstr[1] " ارسال \"%(count)d\" از اسناد به صف تجزیه و تحلیل" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr " ارسال \"%s\" سند به صف تجزیه و تحلیل" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po index 142f4b1738..be295bdff8 100644 --- a/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Frédéric Sheedy , 2019\n" "Language-Team: French (https://www.transifex.com/rosarior/teams/13584/fr/)\n" @@ -33,7 +33,7 @@ msgstr "Analyse de document" msgid "Result" msgstr "Résultat" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Contenu" @@ -65,27 +65,27 @@ msgstr "Page %(page_number)d" msgid "Contents" msgstr "Contenus" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "Supprimer le contenu analysé" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Erreurs d'analyse" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Télécharger le contenu" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Soumettre pour analyse" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Configurer l'analyse" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analyser les documents par type" @@ -185,59 +185,59 @@ msgstr "" "Chemin vers l'exécutable poppler pdftotext, utilisé pour extraire du texte à" " partir des fichiers PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "Supprimer le contenu analysé du document sélectionné?" msgstr[1] "Supprimer le contenu analysé des documents sélectionnés?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Contenu du document : %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Contenu pour la page du document: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Erreurs d'analyse pour le document : %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d document ajouté à la file d'attente d'analyse" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d documents ajoutés à la file d'attente d'analyse" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Ajouter %(count)d document à la file d'attente d'analyse ?" msgstr[1] "Ajouter %(count)d documents à la file d'attente d'analyse" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Ajouter le document \"%s\" à la file d'attente d'analyse" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Modifiez les paramètres d'analyse pour le type de document: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Soumettre tous les documents d'un type pour analyse." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d documents ajoutés dans la file d'attente pour analyse." diff --git a/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po index 4744e002fd..5699377e7d 100644 --- a/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: molnars , 2018\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" @@ -30,7 +30,7 @@ msgstr "dokumentum értelmezés" msgid "Result" msgstr "Eredmény" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Tartalom" @@ -60,27 +60,27 @@ msgstr "Oldal %(page_number)d" msgid "Contents" msgstr "Tartalom" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "értelmezési hiba" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "dokumentum tartalom" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "értelmezésre küld" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "dokumentum értelmezés típusonként" @@ -174,59 +174,59 @@ msgstr "" "elérési útvonal a poppler féle pdftotext programhoz ami PDF-ből szöveget " "nyer ki" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "dokumentum: %s tartalma" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "dokumentum értelmezési hibái: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d dokumentum hozzáadva az értelmezési munkasorhoz" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumentumok hozzáadva az értelmezési munkasorhoz" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "%(count)d dokumentum feladása az értelmezési sorhoz" msgstr[1] "%(count)d dokumentum feladása az értelmezési sorba" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "\"%s\" dokumentum feladása az értelmezési sorba" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/id/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/id/LC_MESSAGES/django.po index c2f75e83c4..5bfa2c3685 100644 --- a/mayan/apps/document_parsing/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/id/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Adek Lanin, 2019\n" "Language-Team: Indonesian (https://www.transifex.com/rosarior/teams/13584/id/)\n" @@ -30,7 +30,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Isi" @@ -60,27 +60,27 @@ msgstr "" msgid "Contents" msgstr "Isi" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -172,57 +172,57 @@ msgid "" "files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.po index 4da1da3608..2e37771720 100644 --- a/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Daniele Bortoluzzi , 2019\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" @@ -33,7 +33,7 @@ msgstr "Analisi del documento" msgid "Result" msgstr "Risultato" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Contenuto " @@ -64,27 +64,27 @@ msgstr "Pagina %(page_number)d" msgid "Contents" msgstr "Contenuti" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Errori di analisi" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Scarica contenuto" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Sottoponi ad analisi" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Configura analisi" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analizza documenti per tipo" @@ -181,59 +181,59 @@ msgstr "" "Percorso del programma poppler pdftotext.usato per estrarre il testo dai " "file PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Contenuto per il documento: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Contenuto per la pagina %s del documento" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Errori di analisi per il documento: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d documento aggiunto alla coda di analisi" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d documenti aggiunti alla coda di analisi" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Aggiungi %(count)d documenti alla coda di analisi?" msgstr[1] "Aggiungi %(count)d documenti alla coda di analisi" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Aggiungi il documento \"%s\" alla coda di analisi" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Modifica le impostazioni di analisi per il tipo di documento: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Sottoponi ad analisi tutti i documenti di un certo tipo." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d documenti aggiunti alla coda di analisi." diff --git a/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.po index 71328bd386..46c8cd1bfc 100644 --- a/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Māris Teivāns , 2019\n" "Language-Team: Latvian (https://www.transifex.com/rosarior/teams/13584/lv/)\n" @@ -29,7 +29,7 @@ msgstr "Dokumentu analīze" msgid "Result" msgstr "Rezultāts" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Saturs" @@ -60,27 +60,27 @@ msgstr "Lapa %(page_number)d" msgid "Contents" msgstr "Saturs" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Parsēšanas kļūdas" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Lejupielādējiet saturu" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Iesniegt parsēšanai" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Iestatīšanas analīze" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Parsēt dokumentus katram tipam" @@ -175,39 +175,39 @@ msgstr "" "Failu ceļš uz poppler pdftotext programmu, ko izmanto, lai iegūtu tekstu no " "PDF failiem." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Dokumenta saturs: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Dokumenta lapas saturs: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Analīzes kļūdas dokumentam: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d dokuments pievienots parsēšanas rindai" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumenti, kas pievienoti parsēšanas rindai" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -215,21 +215,21 @@ msgstr[0] "Iesniegt %(count)d dokumentus parsēšanas rindā" msgstr[1] "Iesniegt %(count)d dokumentu parsēšanas rindā?" msgstr[2] "Iesniegt %(count)d dokumentus parsēšanas rindā" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Iesniegt parsēšanas rindā dokumentu \"%s\"" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Rediģēt parsēšanas iestatījumus dokumenta tipam: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Iesniedziet visus parsēšanai nepieciešamos dokumentus." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d dokumenti, kas pievienoti parsēšanas rindai." diff --git a/mayan/apps/document_parsing/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/nl_NL/LC_MESSAGES/django.po index 01a3359141..1dbe627ba5 100644 --- a/mayan/apps/document_parsing/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/nl_NL/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Lucas Weel , 2018\n" "Language-Team: Dutch (Netherlands) (https://www.transifex.com/rosarior/teams/13584/nl_NL/)\n" @@ -32,7 +32,7 @@ msgstr "" msgid "Result" msgstr "Resultaat" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Inhoud" @@ -62,27 +62,27 @@ msgstr "Pagina %(page_number)d" msgid "Contents" msgstr "Inhoud" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -176,59 +176,59 @@ msgstr "" "Bestandspad naar 'poppler's' pdftotext programma voor het extraheren van PDF" " files." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/pl/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/pl/LC_MESSAGES/django.po index 01b96c0f1a..e5a2107232 100644 --- a/mayan/apps/document_parsing/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/pl/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Wojciech Warczakowski , 2018\n" "Language-Team: Polish (https://www.transifex.com/rosarior/teams/13584/pl/)\n" @@ -31,7 +31,7 @@ msgstr "" msgid "Result" msgstr "Wynik" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Zawartość" @@ -61,27 +61,27 @@ msgstr "" msgid "Contents" msgstr "Zawartość" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -173,7 +173,7 @@ msgid "" "files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" @@ -181,32 +181,32 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -215,21 +215,21 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/pt/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/pt/LC_MESSAGES/django.po index 8f0b17b8db..7427eee1c5 100644 --- a/mayan/apps/document_parsing/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/pt/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Emerson Soares , 2018\n" "Language-Team: Portuguese (https://www.transifex.com/rosarior/teams/13584/pt/)\n" @@ -30,7 +30,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Conteúdo" @@ -60,27 +60,27 @@ msgstr "" msgid "Contents" msgstr "Conteúdos" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -174,59 +174,59 @@ msgstr "" "Caminho para o programa pdftotext de poppler, usado para extrair texto de " "ficheiros PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.po index 6363133478..9578da44bd 100644 --- a/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: José Samuel Facundo da Silva , 2018\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" @@ -32,7 +32,7 @@ msgstr "Análise de documentos" msgid "Result" msgstr "resultado" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Conteúdo" @@ -62,27 +62,27 @@ msgstr "Pagina: %(page_number)d" msgid "Contents" msgstr "Conteúdos" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Erros de análise" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Baixar conteúdo" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Enviar para análise" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Configurar análise" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analisar documentos por tipo" @@ -181,59 +181,59 @@ msgstr "" "Caminho para o programa poppler pdftotext usado para extrair texto de " "arquivos PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Conteúdo do documento: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Conteúdo da página do documento: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Erros de análise do documento: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d documento adicionado à fila de análise" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d documentos adicionados à fila de análise" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "Envie o documento %(count)d para a fila de análise?" msgstr[1] "Envie os documentos %(count)d para a fila de análise" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Enviar documento \"%s\" para a fila de análise" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.po index aa33afe27e..1021cafacb 100644 --- a/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Harald Ersch, 2019\n" "Language-Team: Romanian (Romania) (https://www.transifex.com/rosarior/teams/13584/ro_RO/)\n" @@ -32,7 +32,7 @@ msgstr "Analiza documentelor" msgid "Result" msgstr "Rezultat" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Conținut" @@ -64,27 +64,27 @@ msgstr "Pagina %(page_number)d" msgid "Contents" msgstr "Conţinut" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "Ștergeți conținutul analizat" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "Erori de analiză" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "Descărcați conținut" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "Trimiteți pentru analiză" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "Configurarea analizării" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "Analizare pe tipuri de documente" @@ -182,39 +182,39 @@ msgstr "" "Calea de fișier pentru programul pdftotext folosit pentru a extrage textul " "din fișiere PDF." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "Ștergeți conținutul analizat al documentului selectat?" msgstr[1] "Ștergeți conținutul analizat al documentelor selectate?" msgstr[2] "Ștergeți conținutul analizat al documentelor selectate?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "Conținutul pentru documentul: %s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "Conținutul pentru pagina documentului: %s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "Erori de analiză pentru documentul: %s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d document adăugat la coada de analiză" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d documente adăugate la coada de analiză" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -222,21 +222,21 @@ msgstr[0] "Trimiteți documentul %(count)d la coada de analiză?" msgstr[1] "Trimiteți documente %(count)d în coada de analiză" msgstr[2] "Trimiteți %(count)d documente în coada de analiză" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Trimiteți documentul \"%s\" în coada de analiză" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Editați setările de analiză pentru tipul de document: %s." -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "Trimiteți toate documentele de un anume tip pentru parsare." -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "%(count)d documente adăugate la coada de analiză." diff --git a/mayan/apps/document_parsing/locale/ru/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/ru/LC_MESSAGES/django.po index 53d2e934ed..0ea4325819 100644 --- a/mayan/apps/document_parsing/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/ru/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: lilo.panic, 2018\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" @@ -31,7 +31,7 @@ msgstr "" msgid "Result" msgstr "Результат" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Содержимое" @@ -61,27 +61,27 @@ msgstr "Страница %(page_number)d" msgid "Contents" msgstr "Содержание" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -175,7 +175,7 @@ msgstr "" "Путь к файлу программы pdftotext Poppler, используемой для извлечения текста" " из PDF файлов." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" @@ -183,32 +183,32 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -217,21 +217,21 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/sl_SI/LC_MESSAGES/django.po index 7f75ba56d2..75ba1f4d13 100644 --- a/mayan/apps/document_parsing/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/sl_SI/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: kontrabant , 2018\n" "Language-Team: Slovenian (Slovenia) (https://www.transifex.com/rosarior/teams/13584/sl_SI/)\n" @@ -29,7 +29,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Vsebina" @@ -59,27 +59,27 @@ msgstr "" msgid "Contents" msgstr "Vsebina" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -171,7 +171,7 @@ msgid "" "files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" @@ -179,32 +179,32 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" @@ -213,21 +213,21 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/tr_TR/LC_MESSAGES/django.po index e09c4f193b..049e6a619f 100644 --- a/mayan/apps/document_parsing/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/tr_TR/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: serhatcan77 , 2018\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" @@ -29,7 +29,7 @@ msgstr "" msgid "Result" msgstr "Sonuç" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "İçerik" @@ -59,27 +59,27 @@ msgstr "Sayfa %(page_number)d" msgid "Contents" msgstr "İçindekiler" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -173,59 +173,59 @@ msgstr "" "PDF dosyalarından metin ayıklamak için kullanılan poppler'ın pptotext " "programının dosya yolu." -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/vi_VN/LC_MESSAGES/django.po index c77f74f731..9c7c6c34fa 100644 --- a/mayan/apps/document_parsing/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/vi_VN/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Trung Phan Minh , 2018\n" "Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/rosarior/teams/13584/vi_VN/)\n" @@ -29,7 +29,7 @@ msgstr "" msgid "Result" msgstr "" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "Nội dung" @@ -59,27 +59,27 @@ msgstr "" msgid "Contents" msgstr "Nội dung" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "" @@ -171,57 +171,57 @@ msgid "" "files." msgstr "" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.po b/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.po index 4992b4d9ea..3c1f09dae9 100644 --- a/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:13-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: yulin Gong <540538248@qq.com>, 2019\n" "Language-Team: Chinese (https://www.transifex.com/rosarior/teams/13584/zh/)\n" @@ -29,7 +29,7 @@ msgstr "文档解析" msgid "Result" msgstr "结果" -#: apps.py:135 apps.py:139 links.py:16 links.py:33 models.py:27 +#: apps.py:135 apps.py:139 links.py:21 links.py:38 models.py:27 msgid "Content" msgstr "内容" @@ -59,27 +59,27 @@ msgstr "第%(page_number)d页" msgid "Contents" msgstr "内容" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" msgstr "" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:224 msgid "Parsing errors" msgstr "解析错误" -#: links.py:45 +#: links.py:50 msgid "Download content" msgstr "下载内容" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" msgstr "提交解析" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" msgstr "设置解析" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" msgstr "解析每种类型的文档" @@ -171,57 +171,57 @@ msgid "" "files." msgstr "poppler的pdftotext程序的文件路径,用于从PDF文件中提取文本。" -#: views.py:37 +#: views.py:36 msgid "Delete the parsed content of the selected document?" msgid_plural "Delete the parsed content of the selected documents?" msgstr[0] "" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" msgstr "文件内容:%s" -#: views.py:106 +#: views.py:105 #, python-format msgid "Content for document page: %s" msgstr "文档页面的内容:%s" -#: views.py:121 +#: views.py:120 #, python-format msgid "Parsing errors for document: %s" msgstr "解析文档错误:%s" -#: views.py:133 +#: views.py:132 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d文档已添加到解析队列中" -#: views.py:136 +#: views.py:135 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d文档已添加到解析队列中" -#: views.py:144 +#: views.py:143 #, python-format msgid "Submit %(count)d document to the parsing queue?" msgid_plural "Submit %(count)d documents to the parsing queue" msgstr[0] "将%(count)d文档提交到解析队列" -#: views.py:157 +#: views.py:156 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "将文档“%s”提交到解析队列" -#: views.py:182 +#: views.py:181 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 +#: views.py:191 msgid "Submit all documents of a type for parsing." msgstr "" -#: views.py:213 +#: views.py:212 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/tests/test_api.py b/mayan/apps/document_parsing/tests/test_api.py index 4d1b0d5825..323ce5af45 100644 --- a/mayan/apps/document_parsing/tests/test_api.py +++ b/mayan/apps/document_parsing/tests/test_api.py @@ -4,8 +4,9 @@ from django.test import override_settings from rest_framework import status -from mayan.apps.documents.tests import DocumentTestMixin, TEST_HYBRID_DOCUMENT -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.documents.tests.literals import TEST_HYBRID_DOCUMENT +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..permissions import permission_content_view @@ -27,7 +28,7 @@ class DocumentParsingAPITestCase(DocumentTestMixin, BaseAPITestCase): def test_get_document_version_page_content_no_access(self): response = self._request_document_page_content_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_get_document_version_page_content_with_access(self): self.grant_access( diff --git a/mayan/apps/document_parsing/tests/test_indexing.py b/mayan/apps/document_parsing/tests/test_indexing.py index 4936cf4352..96e8d0dbde 100644 --- a/mayan/apps/document_parsing/tests/test_indexing.py +++ b/mayan/apps/document_parsing/tests/test_indexing.py @@ -1,7 +1,8 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.tests import DocumentTestMixin, TEST_HYBRID_DOCUMENT +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.documents.tests.literals import TEST_HYBRID_DOCUMENT +from mayan.apps.documents.tests.mixins import DocumentTestMixin from mayan.apps.document_indexing.models import Index, IndexInstanceNode from mayan.apps.document_indexing.tests.literals import TEST_INDEX_LABEL diff --git a/mayan/apps/document_parsing/tests/test_models.py b/mayan/apps/document_parsing/tests/test_models.py index ee5ccb55a3..72db48398c 100644 --- a/mayan/apps/document_parsing/tests/test_models.py +++ b/mayan/apps/document_parsing/tests/test_models.py @@ -2,7 +2,8 @@ from __future__ import unicode_literals from django.test import override_settings -from mayan.apps.documents.tests import GenericDocumentTestCase, TEST_HYBRID_DOCUMENT +from mayan.apps.documents.tests.base import GenericDocumentTestCase +from mayan.apps.documents.tests.literals import TEST_HYBRID_DOCUMENT from .literals import TEST_DOCUMENT_CONTENT diff --git a/mayan/apps/document_parsing/tests/test_parsers.py b/mayan/apps/document_parsing/tests/test_parsers.py index 1a4f731503..237bccc567 100644 --- a/mayan/apps/document_parsing/tests/test_parsers.py +++ b/mayan/apps/document_parsing/tests/test_parsers.py @@ -1,7 +1,8 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.tests import DocumentTestMixin, TEST_HYBRID_DOCUMENT +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.documents.tests.literals import TEST_HYBRID_DOCUMENT +from mayan.apps.documents.tests.mixins import DocumentTestMixin from ..parsers import PopplerParser diff --git a/mayan/apps/document_parsing/tests/test_views.py b/mayan/apps/document_parsing/tests/test_views.py index 13856cdadf..9a62b42530 100644 --- a/mayan/apps/document_parsing/tests/test_views.py +++ b/mayan/apps/document_parsing/tests/test_views.py @@ -2,9 +2,8 @@ from __future__ import unicode_literals from django.test import override_settings -from mayan.apps.documents.tests import ( - GenericDocumentViewTestCase, TEST_HYBRID_DOCUMENT -) +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase +from mayan.apps.documents.tests.literals import TEST_HYBRID_DOCUMENT from ..models import DocumentPageContent from ..permissions import ( @@ -44,6 +43,13 @@ class DocumentContentViewTestMixin(object): } ) + def _request_test_document_parsing_error_list_view(self): + return self.get( + viewname='document_parsing:document_parsing_error_list', kwargs={ + 'pk': self.test_document.pk, + } + ) + @override_settings(DOCUMENT_PARSING_AUTO_PARSING=True) class DocumentContentViewsTestCase( @@ -98,7 +104,7 @@ class DocumentContentViewsTestCase( def test_document_page_content_view_with_access(self): self.grant_access( - permission=permission_content_view, obj=self.test_document + obj=self.test_document, permission=permission_content_view ) response = self._request_test_document_page_content_view() @@ -110,10 +116,12 @@ class DocumentContentViewsTestCase( response = self._request_test_document_content_download_view() self.assertEqual(response.status_code, 403) - def test_download_view_with_access(self): - self.expected_content_types = ('application/octet-stream; charset=utf-8',) + def test_document_parsing_download_view_with_access(self): + self.expected_content_types = ( + 'application/octet-stream; charset=utf-8', + ) self.grant_access( - permission=permission_content_view, obj=self.test_document + obj=self.test_document, permission=permission_content_view ) response = self._request_test_document_content_download_view() @@ -125,6 +133,18 @@ class DocumentContentViewsTestCase( ), ) + def test_document_parsing_error_list_view_no_permission(self): + response = self._request_test_document_parsing_error_list_view() + self.assertEqual(response.status_code, 404) + + def test_document_parsing_error_list_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_parse_document + ) + + response = self._request_test_document_parsing_error_list_view() + self.assertEqual(response.status_code, 200) + class DocumentTypeContentViewsTestMixin(object): def _request_test_document_type_parsing_settings(self): @@ -145,19 +165,17 @@ class DocumentTypeContentViewsTestCase( def test_document_type_parsing_settings_view_with_access(self): self.grant_access( - permission=permission_document_type_parsing_setup, - obj=self.test_document_type + obj=self.test_document_type, + permission=permission_document_type_parsing_setup ) response = self._request_test_document_type_parsing_settings() self.assertEqual(response.status_code, 200) -class DocumentContentToolsViewsTestCase(GenericDocumentViewTestCase): - _skip_file_descriptor_test = True - - # Ensure we use a PDF file - test_document_filename = TEST_HYBRID_DOCUMENT +class DocumentContentToolsViewsTestMixin(object): + def _request_document_parsing_error_list_view(self): + return self.get(viewname='document_parsing:error_list') def _request_document_parsing_tool_view(self): return self.post( @@ -166,10 +184,33 @@ class DocumentContentToolsViewsTestCase(GenericDocumentViewTestCase): } ) + +class DocumentContentToolsViewsTestCase( + DocumentContentToolsViewsTestMixin, GenericDocumentViewTestCase +): + _skip_file_descriptor_test = True + auto_upload_document = False + + # Ensure we use a PDF file + test_document_filename = TEST_HYBRID_DOCUMENT + def _get_document_content(self): - return ''.join(list(get_document_content(document=self.test_document))) + return ''.join( + list(get_document_content(document=self.test_document)) + ) + + def test_document_parsing_error_list_view_no_permission(self): + response = self._request_document_parsing_error_list_view() + self.assertEqual(response.status_code, 403) + + def test_document_parsing_error_list_view_with_permission(self): + self.grant_permission(permission=permission_parse_document) + + response = self._request_document_parsing_error_list_view() + self.assertEqual(response.status_code, 200) def test_document_parsing_tool_view_no_permission(self): + self.upload_document() response = self._request_document_parsing_tool_view() self.assertEqual(response.status_code, 200) @@ -185,6 +226,8 @@ class DocumentContentToolsViewsTestCase(GenericDocumentViewTestCase): def test_document_parsing_tool_view_with_permission(self): self.grant_permission(permission=permission_parse_document) + self.upload_document() + response = self._request_document_parsing_tool_view() self.assertEqual(response.status_code, 302) diff --git a/mayan/apps/document_parsing/views.py b/mayan/apps/document_parsing/views.py index de9cb3ef0b..286da29787 100644 --- a/mayan/apps/document_parsing/views.py +++ b/mayan/apps/document_parsing/views.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals from django.contrib import messages from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _, ungettext @@ -107,23 +106,23 @@ class DocumentPageContentView(SingleObjectDetailView): } -class DocumentParsingErrorsListView(SingleObjectListView): - view_permission = permission_content_view - - def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) +class DocumentParsingErrorsListView( + ExternalObjectMixin, SingleObjectListView +): + external_object_class = Document + external_object_permission = permission_parse_document def get_extra_context(self): return { 'hide_object': True, - 'object': self.get_document(), + 'object': self.external_object, 'title': _( 'Parsing errors for document: %s' - ) % self.get_document(), + ) % self.external_object, } def get_source_queryset(self): - return self.get_document().latest_version.parsing_errors.all() + return self.external_object.latest_version.parsing_errors.all() class DocumentSubmitView(MultipleObjectConfirmActionView): @@ -224,7 +223,7 @@ class ParseErrorListView(SingleObjectListView): 'hide_object': True, 'title': _('Parsing errors'), } - view_permission = permission_document_type_parsing_setup + view_permission = permission_parse_document def get_source_queryset(self): return DocumentVersionParseError.objects.all() diff --git a/mayan/apps/document_signatures/api_views.py b/mayan/apps/document_signatures/api_views.py new file mode 100644 index 0000000000..6762a85e6c --- /dev/null +++ b/mayan/apps/document_signatures/api_views.py @@ -0,0 +1,389 @@ +from __future__ import absolute_import, unicode_literals + +from django.shortcuts import get_object_or_404 + +from rest_framework import status +from rest_framework.response import Response + +from mayan.apps.acls.models import AccessControlList +from mayan.apps.documents.models import Document +from mayan.apps.rest_api import generics + +from .models import DetachedSignature, EmbeddedSignature +from .permissions import ( + permission_document_version_sign_detached, + permission_document_version_sign_embedded, + permission_document_version_signature_delete, + permission_document_version_signature_upload, + permission_document_version_signature_view +) +from .serializers import ( + DetachedSignatureSerializer, EmbeddedSignatureSerializer, + SignDetachedSerializer, SignEmbeddedSerializer +) + + +class APIDocumentSignDetachedView(generics.GenericAPIView): + """ + post: Sign a document version with a detached signature. + """ + serializer_class = SignDetachedSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'POST': + permission = permission_document_version_sign_detached + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return DetachedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super( + APIDocumentSignDetachedView, self + ).get_serializer(*args, **kwargs) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super( + APIDocumentSignDetachedView, self + ).get_serializer_context() + + if self.kwargs: + context.update( + { + 'document_version': self.get_document_version(), + } + ) + + return context + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.sign( + key_id=request.data['key_id'], + passphrase=request.data['passphrase'] + ) + return Response(status=status.HTTP_200_OK) + + +class APIDocumentSignEmbeddedView(generics.GenericAPIView): + """ + post: Sign a document version with an embedded signature. + """ + serializer_class = SignEmbeddedSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'POST': + permission = permission_document_version_sign_embedded + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return DetachedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super( + APIDocumentSignEmbeddedView, self + ).get_serializer(*args, **kwargs) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super( + APIDocumentSignEmbeddedView, self + ).get_serializer_context() + + if self.kwargs: + context.update( + { + 'document_version': self.get_document_version(), + } + ) + + return context + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.sign( + key_id=request.data['key_id'], + passphrase=request.data['passphrase'] + ) + return Response(status=status.HTTP_200_OK) + + +class APIDocumentDetachedSignatureListView(generics.ListCreateAPIView): + """ + get: Returns a list of all the detached signatures of a document version. + post: Create an detached signature for a document version. + """ + serializer_class = DetachedSignatureSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'GET': + permission = permission_document_version_signature_view + elif self.request.method == 'POST': + permission = permission_document_version_signature_upload + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return DetachedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super( + APIDocumentDetachedSignatureListView, self + ).get_serializer(*args, **kwargs) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super( + APIDocumentDetachedSignatureListView, self + ).get_serializer_context() + if self.kwargs: + context.update( + { + 'document_version': self.get_document_version(), + } + ) + + return context + + +class APIDocumentDetachedSignatureView(generics.RetrieveDestroyAPIView): + """ + delete: Delete an detached signature of the selected document. + get: Returns the details of the selected detached signature. + """ + lookup_url_kwarg = 'detached_signature_id' + serializer_class = DetachedSignatureSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'GET': + permission = permission_document_version_signature_view + elif self.request.method == 'POST': + permission = permission_document_version_signature_view + elif self.request.method == 'DELETE': + permission = permission_document_version_signature_delete + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return DetachedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super(APIDocumentDetachedSignatureView, self).get_serializer_context() + if self.kwargs: + context.update( + { + 'document': self.get_document(), + } + ) + + return context + + +class APIDocumentEmbeddedSignatureListView(generics.ListAPIView): + """ + get: Returns a list of all the embedded signatures of a document version. + """ + serializer_class = EmbeddedSignatureSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'GET': + permission = permission_document_version_signature_view + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return EmbeddedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer(self, *args, **kwargs): + if not self.request: + return None + + return super( + APIDocumentEmbeddedSignatureListView, self + ).get_serializer(*args, **kwargs) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super( + APIDocumentEmbeddedSignatureListView, self + ).get_serializer_context() + if self.kwargs: + context.update( + { + 'document_version': self.get_document_version(), + } + ) + + return context + + +class APIDocumentEmbeddedSignatureView(generics.RetrieveAPIView): + """ + get: Returns the details of the selected embedded signature. + """ + lookup_url_kwarg = 'embedded_signature_id' + serializer_class = EmbeddedSignatureSerializer + + def get_document(self): + return get_object_or_404( + klass=self.get_document_queryset(), pk=self.kwargs['document_id'] + ) + + def get_document_queryset(self): + if self.request.method == 'GET': + permission = permission_document_version_signature_view + elif self.request.method == 'POST': + permission = permission_document_version_signature_view + + return AccessControlList.objects.restrict_queryset( + permission=permission, queryset=Document.objects.all(), + user=self.request.user + ) + + def get_document_version(self): + return get_object_or_404( + klass=self.get_document_version_queryset(), + pk=self.kwargs['document_version_id'] + ) + + def get_document_version_queryset(self): + return self.get_document().versions.all() + + def get_queryset(self): + return EmbeddedSignature.objects.filter( + document_version=self.get_document_version() + ) + + def get_serializer_context(self): + """ + Extra context provided to the serializer class. + """ + context = super(APIDocumentEmbeddedSignatureView, self).get_serializer_context() + if self.kwargs: + context.update( + { + 'document': self.get_document(), + } + ) + + return context diff --git a/mayan/apps/document_signatures/apps.py b/mayan/apps/document_signatures/apps.py index 12dfc3e18a..9e522e878c 100644 --- a/mayan/apps/document_signatures/apps.py +++ b/mayan/apps/document_signatures/apps.py @@ -42,6 +42,7 @@ logger = logging.getLogger(__name__) class DocumentSignaturesApp(MayanAppConfig): app_namespace = 'signatures' app_url = 'signatures' + has_rest_api = True has_tests = True name = 'mayan.apps.document_signatures' verbose_name = _('Document signatures') diff --git a/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.mo index 43a9b00f7d..d2ebc1f590 100644 Binary files a/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.po index dd793434f2..c7d42db0d4 100644 --- a/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Document signatures" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Date" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Key ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "لا شيء" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "النوع" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Signature file" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "On large databases this operation may take some time to execute." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.mo index 3af9aff460..71d266fc55 100644 Binary files a/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po index bb46526fa0..6be7ebcc5d 100644 --- a/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-16 16:25+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-04 16:58+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -19,41 +19,41 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Подписване на документи" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Дата" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Ключ №" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Подпис №" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Няма" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Тип" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Ключ" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "Фраза парола за отключване на ключа и разрешаване на използването му за подписване на версията на документа." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Фраза парола" @@ -145,47 +145,55 @@ msgstr "Версия на документа" msgid "Date signed" msgstr "Дата на подписване" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "Идентификационен номер на ключа, който ще бъде използван за подписване на документа." + +#: models.py:57 msgid "Public key fingerprint" msgstr "Отпечатък на публичния ключ" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Подпис на версията на документа" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Подписи на версията на документа" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Отделен" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Вграден" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Вграден подпис на версия на документа" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Вградени подписи на версия на документа" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "Предварително създаден файл с подпис." + +#: models.py:137 msgid "Signature file" msgstr "Файл с подпис" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Отделен подпис на версия на документа" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Отделени подписи на версия на документа" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "подпис" @@ -233,75 +241,91 @@ msgstr "Проверете версията на документа" msgid "Verify missing embedded signature" msgstr "Проверете за липсващ вграден подпис" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Път към подклас Storage, който да се използва при съхранение на отделени подписи." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Аргументи за подаване към SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "За отключване на този ключ е необходима фраза парола." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Фразата парола е неправилна." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Версията на документа е подписана успешно." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "Подпишете" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Подпишете версия на документа "%s" с отделен подпис" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Подпишете версия на документа "%s" с вграден подпис" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Изтрийте отделен подпис: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Подробности за подпис: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Подписите помагат за предоставяне на доказателства за авторство и откриване на подправки. Те са много сигурни и трудно подправящи се. Подписът може да бъде вграден като част от самия документ или качен като отделен файл." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Няма подписи за този документ." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Подписи за версия на документа: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Качете отделен подпис за версия на документа: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "При големи бази данни тази операция може да отнеме известно време за изпълнение." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Проверете всички документи за подписи?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Проверката на подписа успешно е поставена на опашка." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "Личен ключ, който ще се използва за подписване на версията на документа." + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "Документ за подписване (отделен)" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "Документ за подписване (вграден)" diff --git a/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.mo index e25ef59004..2c1bfc9898 100644 Binary files a/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.po index f876b62def..917727b692 100644 --- a/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/bs_BA/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -20,41 +20,41 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Potpisi dokumenta" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Datum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID ključa" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID potpisa" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nijedno" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tip" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Ključ" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Passphrase" @@ -146,47 +146,55 @@ msgstr "Verzija dokumenta" msgid "Date signed" msgstr "Datum prijave" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Otisak prsta javnog ključa" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Potpis verzija dokumenta" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Potpisi verzija dokumenta" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Odvojen" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Ugradjen" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Verzija dokumenta sa ugrađenim potpisom" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Verzija dokumenta sa ugrađenim potpisima" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Datoteka potpisa" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Verzija dokumenta odvojen potpis" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Verzija dokumenta odvojen potpisima" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "potpis" @@ -234,75 +242,91 @@ msgstr "Proverite verziju dokumenta" msgid "Verify missing embedded signature" msgstr "Proverite nedostajući ugrađeni potpis" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Potrebna je lozinka za otključavanje ovog ključa." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Govorna fraza je netačna." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Verzija dokumenta uspešno je potpisana." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Potpisati verziju dokumenta \"%s\" sa odvojenim potpisom" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Potpisati verziju dokumenta \"%s\" sa ugrađenim potpisom" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Obriši detektovani potpis:%s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Detalji za potpis: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Potpisi za verziju dokumenta: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Otpremanje odvojenog potpisa za verziju dokumenta: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Na velikim bazama podataka ove operacije mogu potrajati neko vrijeme." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Proverite sve dokumente za potpis?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Provera potpisa je u redu." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.mo index 5b0f8a385f..56fb68677b 100644 Binary files a/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po index fd49c5f362..f2d3a94960 100644 --- a/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-15 17:41+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,41 +18,41 @@ msgstr "" "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:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Podpisy dokumentů" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Datum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID klíče" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID podpisu" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "žádný" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Typ" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Klíč" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "Heslo pro odemčení klíče a umožnění jeho použití k podepsání verzí dokumentu." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Přístupová fráze" @@ -144,47 +144,55 @@ msgstr "Verze dokumentu" msgid "Date signed" msgstr "Datum podepsání" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Otisk veřejného klíče" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Podpis verze dokumentu" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Podpisy verze dokumentu" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Odpojeno" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Vloženo" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Vložený podpis verze dokumentu" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Vložené podpisy verze dokumentu" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Podpisový soubor" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Podpis verze dokumentu byl odpojen." -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Oddělené podpisy verze dokumentu" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "podpis" @@ -232,75 +240,91 @@ msgstr "Ověřte verzi dokumentu" msgid "Verify missing embedded signature" msgstr "Ověřte chybějící vložený podpis" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Cesta k podtřídě Storage, která se použije při ukládání oddělených podpisů." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumenty, které mají být předány na SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "K odemčení tohoto klíče je třeba heslo." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Heslo je nesprávné." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Verze dokumentu byla úspěšně podepsána." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Podepište verzi dokumentu „%s“ odpojeným podpisem" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Podepište verzi dokumentu "%s" vloženým podpisem" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Odstranit odpojený podpis: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Podrobnosti pro podpis: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Podpisy pomáhají poskytovat důkazy o autorství a detekci neoprávněných zásahů. Jsou velmi bezpečné a těžko obejítelné. Podpis lze vložit jako součást samotného dokumentu nebo nahrát jako samostatný soubor." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Pro tento dokument neexistují žádné podpisy." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Podpisy pro verzi dokumentu: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Nahrajte odpojený podpis pro verzi dokumentu: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Ve velkých databázích může provedení této operace nějakou dobu trvat." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Ověřit podpis všech dokumentů?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Ověření podpisu bylo ve frontě úspěšně." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.mo index 91f25e5b8f..bb24d245db 100644 Binary files a/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.po index 3031508dbb..cbef28e878 100644 --- a/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -17,41 +17,41 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Ingen" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Type" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -143,47 +143,55 @@ msgstr "Dokumentversion" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -231,75 +239,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.mo index ea9850911b..4823b1296b 100644 Binary files a/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.po index 797cdb9a98..4b903b8bdc 100644 --- a/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/de_DE/LC_MESSAGES/django.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-05-08 22:16+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,41 +24,41 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Dokumentenunterschriften" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Datum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Schlüssel-ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Unterschrifts-ID" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nichts" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Typ" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Schlüssel" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "Das Passwort zum Entsperren des Schlüssels um die Dokumentenversion zu unterschreiben." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Passwort" @@ -150,47 +150,55 @@ msgstr "Dokumentenversion" msgid "Date signed" msgstr "Datum der Signierung" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Fingerabdruck des öffentlichen Schlüssels" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Dokumentenversion Unterschrift" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Dokumentenversionen Unterschriften" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Separat" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Eingebettet" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Dokumentenversion der eingebetteten Unterschrift" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Dokumentenversion der eingebetteten Unterschriften" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Unterschriftsdatei" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Dokumentenversion der seperaten Unterschrift" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Dokumentenversion der seperaten Unterschriften" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "Unterschrift" @@ -238,75 +246,91 @@ msgstr "Dokumentenversion verifizieren" msgid "Verify missing embedded signature" msgstr "Fehlende eingebettete Unterschrift überprüfen" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Pfad zu der Speicherklasse (Storage subclass) für die Speicherung separater Unterschriften." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumente die an das SIGNATURE_STORAGE_BACKEND weitergereicht werden." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Passphrase wird benötigt um den Schlüssel zu entsperren" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Passphrase ist ungültig" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Dokumentenversion wurde erfolgreich signiert." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Dokumentenversion \"%s\" mit seperater Unterschrift signieren" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Dokumentenversion \"%s\" mit eingebetteter Unterschrift signieren" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Separate Unterschrift %s löschen" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Details für Signatur %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Unterschriften dienen der Ermittlung der Autorenschaft und der Entdeckung von Fälschungen. Sie sind sehr sicher und schwer zu fälschen. Eine Unterschrift kann als Teil des Dokuments in dieses eingebettet sein oder separat erstellt und hochgeladen werden." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Keine Unterschriften für dieses Dokument vorhanden." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Unterschriften für Dokumentenversion: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Seperate Unterschrift für Dokumentenversion %s hochladen" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Bei großen Datenbanken kann dieser Vorgang einige Zeit in Anspruch nehmen." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Alle Dokumentenunterschriften überprüfen?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Überprüfung der Unterschriften erfolgreich eingereiht." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.mo index 02c2a462e2..9ba275ede2 100644 Binary files a/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.po index 8374e2c4f8..0070541135 100644 --- a/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/el/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -17,41 +17,41 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Υπογραφές εγγράφου" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Ημερομηνία" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Αναγνωριστικό κλειδιού" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Αναγνωριστικό υπογραφής" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Κανένα" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Τύπος" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Κλειδί" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Μυστική φράση" @@ -143,47 +143,55 @@ msgstr "Έκδοση εγγράφου" msgid "Date signed" msgstr "Ημερομηνία υπογραφής" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Δακτυλικό αποτύπωμα δημόσιου κλειδιού" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Υπογραφή έκδοσης εγγράφου" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Υπογραφές έκδοσης εγγράφου" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Αποσπασμένο" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Συμπεριλαμβανόμενο" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Συμπεριλαμβανόμενο κλειδί έκδοσης εγγράφου" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Συμπεριλαμβανόμενα κλειδιά έκδοσης εγγράφου" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Αρχείο υπογραφής" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Αποσπασμένο κλειδί έκδοσης εγγράφου" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Αποσπασμένα κλειδιά έκδοσης εγγράφου" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "Υπογραφή" @@ -231,75 +239,91 @@ msgstr "Επαλήθευση έκδοσης εγγράφου" msgid "Verify missing embedded signature" msgstr "Επαλήθευση συμπεριλαμβανόμενης υπογραφής που λείπει" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Απαιτείται η φράση ασφαλείας για να ξεκλειδώσετε αυτό το κλειδί." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Η φράση ασφαλείας δεν είναι ορθή." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Η έκδοση του εγγράφου υπογράφηκε επιτυχώς." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Υπογραφή έκδοσης εγγράφου \"%s\" με μια αποσπασμένη υπογραφή\\" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Υπογραφή έκδοσης εγγράφου \"%s\" με μια συμπεριλαμβανόμενη υπογραφή" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Διαγραφή αποσπασμένης υπογραφής: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Λεπτομέρειες της υπογραφής: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Υπογραφές για την έκδοση του εγγράφου: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Ανέβασμα αποσπασμένης υπογραφής για την έκδοση του εγγράφου: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Σε μεγάλες βάσεις δεδομένων αυτή η ενέργεια μπορεί να χρειαστεί αρκετό χρόνο για να ολοκληρωθεί." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Επαλήθευση όλων των υπογρφών για έγγραφα;" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Η ενέργεια επαλήθευσης υπογραφών προστέθηκε στην λίστα επιτυχώς." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/en/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/en/LC_MESSAGES/django.po index 39dd9f3964..cb50934a68 100644 --- a/mayan/apps/document_signatures/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,41 +17,41 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -143,47 +143,55 @@ msgstr "" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -231,75 +239,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.mo index b97b7469fe..7b2949d5b0 100644 Binary files a/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.po index 11ef09888f..4c035b6705 100644 --- a/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/es/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-30 16:40+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:56+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -21,41 +21,41 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Firmas de documentos" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Fecha" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Identificador de llave" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID de firma" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Ninguno" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tipo" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Llave" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "La frase de contraseña para desbloquear la llave y permitir que se use para firmar la versión del documento." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Contraseña" @@ -147,47 +147,55 @@ msgstr "Versión de documento" msgid "Date signed" msgstr "Fecha firmado" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "Identificación de la llave que se utilizará para firmar el documento." + +#: models.py:57 msgid "Public key fingerprint" msgstr "Huella de llave publica" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Firma de versión de documento" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Firmas de versión de documento" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Aparte" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Integrado" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Firma integrada de versión de documento" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Firmas integradas de version de documento" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "Archivo de firma generado previamente." + +#: models.py:137 msgid "Signature file" msgstr "Archivo de firma" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Firma aparte de versión de documento" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Firmas aparte de versión de documento" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "firma" @@ -235,75 +243,91 @@ msgstr "Verificar la versión del documento" msgid "Verify missing embedded signature" msgstr "Verificar la firma integrada que falta" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Ruta a la subclase Storage para usar cuando se almacenan firmas separadas." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumentos para pasar a SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Se necesita contraseña para acceder a esta llave." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Contraseña incorrecta." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Versión de documento firmada con éxito." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "Firmar" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Firmar versión de documento \"%s\" con una firma aparte " -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Firmar versión de documento \"%s\" con una firma integrada" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Borrar firma aparte: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Detalles para la firma: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Las firmas ayudan a proporcionar evidencia de autoría y detección de manipulación. Son muy seguras y difíciles de falsificar. Una firma puede integrarse como parte del documento en sí o cargarse como un archivo separado." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "No hay firmas para este documento." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Firmas para la versión de documento: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Subir firma aparte para la versión de documento: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "En bases de datos de gran tamaño esta operación puede tardar algún tiempo en ejecutarse." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "¿Verificar todos los documentos para firmas?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Verificación de firmas colocada en la cola." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "Llave privada que se usará para firmar la versión del documento." + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "Firmar documento (separado)" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "Firmar documento (integrado)" diff --git a/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.mo index 03ed476e1e..8b896555c5 100644 Binary files a/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.po index 79a502ba1a..310f7d1c03 100644 --- a/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "امضا سند" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "تاریخ" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "شناسه کلیدی" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "شناسه امضا" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "هیچ یک" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "تایپ کنید" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "کلید" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "عبارت عبور" @@ -144,47 +144,55 @@ msgstr "نسخه سند" msgid "Date signed" msgstr "تاریخ امضا شده" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "اثر انگشت کلید عمومی" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "امضای نسخه اسناد" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "امضای سند نسخه" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "جدا" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "جاسازی شده" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "نسخه سند embedded امضا" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "نسخه سند embedded امضا" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "فایل امضا" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "نسخه سند امضای جداگانه" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "نسخه سند امضاهای جداگانه" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "امضا" @@ -232,75 +240,91 @@ msgstr "نسخه سند را تایید کنید" msgid "Verify missing embedded signature" msgstr "امضای جاسازی نشده را تأیید کنید" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "رمز عبور برای باز کردن قفل این کلید ضروری است." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "عبارت عبور اشتباه است" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "نسخه سند با موفقیت امضا شد" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "نسخه سند \"%s\" را با امضای جداگانه وارد کنید" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "نسخه سند \"%s\" را با امضای جاسازی شده وارد کنید" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "امضای جداگانه را حذف کنید: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "جزئیات برای امضا: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "امضا برای نسخه سند: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "امضای جداگانه برای نسخه سند آپلود: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "در پایگاه داده های بزرگ این عملیات ممکن است برای اجرای برخی از زمان ها طول بکشد." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "همه سند را برای امضاء تأیید کنید؟" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "تأیید امضا با موفقیت انجام شد." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.mo index 061e027bc8..52597c9243 100644 Binary files a/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.po index ff673d6f26..83696a2a88 100644 --- a/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/fr/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # Christophe CHAUVET , 2015,2017 # Christophe CHAUVET , 2015 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Pierre Lhoste , 2012 # Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-05-17 12:04+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-08 19:18+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,41 +24,41 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Signatures du document" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Date" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID de la clé" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID de la signature" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Aucune" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Type" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Clé" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "La phrase secrète permettant de déverrouiller la clé pour pouvoir signer la version du document." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Phrase secrète" @@ -149,47 +150,55 @@ msgstr "Version du document" msgid "Date signed" msgstr "Date de signature" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "ID de la clé qui sera utilisée pour signer le document." + +#: models.py:57 msgid "Public key fingerprint" msgstr "Empreinte de la clef publique" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Signature de la version du document" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Signatures pour la version du document" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Détachée" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Intégrée" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Signature intégrée de la version du document" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Signatures intégrées de la version du document" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "Fichier de signature généré précédemment." + +#: models.py:137 msgid "Signature file" msgstr "Fichier de signature" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Signature détachée de la version du document" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Signatures détachées de la version du document" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "signature" @@ -237,75 +246,91 @@ msgstr "Vérifier la version du document" msgid "Verify missing embedded signature" msgstr "Vérifier la signature intégrée manquante" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Emplacement de la sous-classe de stockage à utiliser lors du stockage des signatures détachées." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Arguments à transmettre à SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Une phrase secrète est nécessaire pour déverrouiller cette clé." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Phrase secrète incorrecte." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Signature de la version du document réussie." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "Signer" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Signer la version \"%s\" du document avec une signature détachée" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Signer la version \"%s\" du document avec une signature intégrée" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Supprimer la signature détachée : %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Détails de la signature : %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Les signatures aident à fournir des preuves d’auteur et la détection d’altération. Ils sont très sécurisés et difficiles à copier. Une signature peut être incorporée dans le document lui-même ou dans un fichier séparé." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Il n'y a pas de signatures pour ce document." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Signatures pour cette version du document : %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Transférer une signature détachée pour la version du document : %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Sur de grosses bases de données, cette opération peut prendre un certain temps." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Vérifier les signatures de tous les documents ?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Vérification de la signature ajoutée à la file d'attente avec succès." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "Clé privée qui sera utilisée pour signer la version du document." + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "Signer le document (détachée)" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "Signer le document (intégrée)" diff --git a/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.mo index b66c8964a5..48724530af 100644 Binary files a/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.po index e22dc0f370..8f724d81fb 100644 --- a/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Dokumentum aláírások" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Dátum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Kulcs ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Aláírás azonosító" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Semmi" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Típus" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "Dokumentum verzió" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Aláíró állomány" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "A nagy adatbázisok esetében a művelet sokáig is tarthat." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.mo index 49c38e9576..80f6841b42 100644 Binary files a/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.po index 774bce924a..5894543874 100644 --- a/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/id/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-05-12 17:54+0000\n" -"Last-Translator: Adek Lanin\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,41 +17,41 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nihil" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tipe" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -143,47 +143,55 @@ msgstr "Versi dokumen" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -231,75 +239,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Pada database yang besar pekerjaan berikut mungkin akan membutuhkan waktu untuk dilaksanakan." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.mo index 32367b9187..0bb65656bc 100644 Binary files a/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.po index 6c7dc02e41..8d8b1346a2 100644 --- a/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/it/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-08-28 12:12+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,41 +21,41 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Firme documento" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Data" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID Chiave" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID Firma" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nessuno" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tipo" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Chiave" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "La password per sbloccare la chiave e consentirne l'uso per la firma della versione del documento." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Passphrase" @@ -147,47 +147,55 @@ msgstr "Versione documento" msgid "Date signed" msgstr "Data firma" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Chiave pubblica impronta" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Versione della firma del documento" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Versioni delle firma del documento" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Distaccato" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Incorporata" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Firma incorporata versione documento" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Firme incorporate versione documento" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "File della firma" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Firma versione del documento distaccata" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Firma distaccata versione dei documenti" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "firma" @@ -235,75 +243,91 @@ msgstr "Verifica versione documento" msgid "Verify missing embedded signature" msgstr "Verifica firma incorporata mancante" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Percorso alla sottoclasse Storage da usare per l'archiviazione delle firme separate." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argomenti da passare al SIGNATURE_STORAGE_BACKEND. " -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "è richiesta la passphrase per sbloccare questa chiave." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "La passphrase non è corretta." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "La versione del documento è stata firmata con successo." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Firma la versione del documento \"%s\" con firma allegata" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Firma la versione del documento \"%s\" con la firma integrata" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Cancella la firma allegata: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Dettagli per la firma: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Le firme servono a provare la paternità del documento e a impedirne la contraffazione. Sono molto sicure e molto difficili da falsificare. Una firma può essere incorporata nel documento stesso oppure caricata come file separato." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Non ci sono firme per questo documento." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Firme per la versione del documento: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Carica la firma scollegata per la versione documento: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Per un database di grosse dimensioni l'operazione protrebbe aver bisogno di tempo." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Verificare le firme per tutti i documenti?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Verifica firme messo in coda con successo." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.mo index 15dab31ec0..237a551ea0 100644 Binary files a/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.po index cf4e64d93d..be86f11b18 100644 --- a/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-27 13:01+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,41 +18,41 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Dokumentu paraksti" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Datums" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Atslēgas ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Paraksta ID" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nav neviens" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tips" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Atslēga" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "Ieejas frāze, lai atbloķētu atslēgu un ļautu to izmantot dokumenta versijas parakstīšanai." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Ieejas frāze" @@ -144,47 +144,55 @@ msgstr "Dokumenta versija" msgid "Date signed" msgstr "Parakstīšanas datums" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Publiskās atslēgas pirkstu nospiedums" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Dokumenta versijas parakstīšana" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Dokumenta versijas paraksti" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Atdalīts" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Iegultās" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Dokumenta versijas iegultais paraksts" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Dokumenta versijas iegultie paraksti" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Paraksta fails" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Dokumenta versijas atdalītais paraksts" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Dokumenta versijas atdalītie paraksti" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "parakstu" @@ -232,75 +240,91 @@ msgstr "Pārbaudiet dokumenta versiju" msgid "Verify missing embedded signature" msgstr "Pārbaudiet trūkstošo iegulto parakstu" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Ceļš uz glabāšanas apakšklasi, kas jāizmanto, uzglabājot atdalītos parakstus." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumenti, kas jānodod SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Lai atslēgtu šo atslēgu, ir nepieciešama ieejas frāze." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Parole ir nepareiza." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Dokumenta versija ir veiksmīgi parakstīta." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Parakstiet dokumenta versiju \"%s\" ar atdalītu parakstu" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Parakstiet dokumenta versiju \"%s\" ar iegulto parakstu" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Noņemt atdalīto parakstu: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Sīkāka informācija par parakstu: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Paraksti palīdz nodrošināt autorības pierādījumus un manipulāciju atklāšanu. Viņi ir ļoti droši un grūti veidojami. Parakstu var ievietot kā daļu no dokumenta vai augšupielādēt kā atsevišķu failu." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Šim dokumentam nav parakstu." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Paraksti dokumenta versijai: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Augšupielādējiet atdalītu parakstu dokumenta versijai: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Lielās datubāzēs šī darbība var aizņemt kādu laiku, lai izpildītu." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Pārbaudiet visus dokumentus parakstiem?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Paraksta verifikācija veiksmīgi rindā." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.mo index 369234c836..b705e649d9 100644 Binary files a/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.po index 7c0286d83b..1d3836340a 100644 --- a/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/nl_NL/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Documenthandtekeningen" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Datum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Sleutel-ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "Handtekening-ID" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Geen" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Type" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Sleutel" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "Documentversie" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Losgekoppeld" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Ingesloten" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Handtekeningbestand" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "Handtekening" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Voor een grote database kan deze operatie lang duren." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.mo index e4839a1335..569b82aa5c 100644 Binary files a/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.po index 2cf6b92eea..32053f9355 100644 --- a/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/pl/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "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:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Document signatures" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Data" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Key ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Brak" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Typ" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Klucz" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "Wersja dokumentu" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Signature file" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Na dużych bazach danych operacja może chwilę potrwać." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.mo index 9bac19923b..7e507d4809 100644 Binary files a/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.po index cae1c2c831..a18b6617ae 100644 --- a/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/pt/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Assinaturas do documento" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Data" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID da chave" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nenhum" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Ficheiro de assinatura" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Esta operação pode levar algum tempo em bases de dados grandes." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.mo index 9467d2b25b..38a378f99f 100644 Binary files a/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.po index d25e89d8d4..dff412c9c4 100644 --- a/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/pt_BR/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-27 00:24+0000\n" -"Last-Translator: Rodrigo de Almeida Sottomaior Macedo \n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,41 +21,41 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Assinaturas de documentos" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Data" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID da chave" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID da assinatura" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nenhum" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tipo" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Chave" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "A senha para desbloquear a chave e permitir que ela seja usada para assinar a versão do documento." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Senha" @@ -147,47 +147,55 @@ msgstr "Versão do Documento" msgid "Date signed" msgstr "Data da assinatura" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Impressão digital da chave pública" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Versão do documento da assinatura " -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Versão do documento das assinaturas" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Destacado" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Embutido" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Versão do documento da assinatura integrada" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Versão do documento das assinaturas integradas" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Arquivo de assinatura" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Versão do documento da assinatura destacada" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Versão do documento das assinaturas destacadas" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "assinatura" @@ -235,75 +243,91 @@ msgstr "Verificar versão de documento" msgid "Verify missing embedded signature" msgstr "Verificar assinatura integrada que falta" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Caminho para a subclasse Storage que será usada para armazenar firmas separadas." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumentos para passar ao SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "É preciso senha para acessar a chave." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Senha incorreta." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "A versão do documento foi assinada com sucesso." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Assinar a versão do documento \"%s\" com uma assinatura destacada" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Assinar uma versão do documento \"%s\" com uma assinatura integrada" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Excluir assinatura destacada: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Detalhes para a assinatura: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Assinaturas ajudam a proporcionar evidência de autoria e detecção de manipulação. São muito seguras e difíceis de falsificar. Uma assinatura pode ser integrada ao próprio documento ou carregada como um arquivo separado." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Não há assinaturas para este documento." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Assinaturas para a versão do documento: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Carregar a assinatura destacada para a versão do documento: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Em grandes bases de dados esta operação pode levar algum tempo para executar." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Verificar todos os documentos para assinaturas?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Verificação de assinaturas colocada em fila." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.mo index c74c589a03..986129d433 100644 Binary files a/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.po index 5cd9437356..6e1785982e 100644 --- a/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/ro_RO/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-05-02 05:17+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 13:28+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -19,41 +19,41 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Document de semnături" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Data" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID cheie" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID-ul de semnătură" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Nici unul" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Tip" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Cheie" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "Fraza de acces pentru a debloca cheia și a permite utilizarea acesteia pentru a semna versiunea documentului." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Expresie de acces" @@ -145,47 +145,55 @@ msgstr "Versiune document" msgid "Date signed" msgstr "Data semnăturii" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "ID-ul cheii care va fi folosit pentru semnarea documentului." + +#: models.py:57 msgid "Public key fingerprint" msgstr "Amprenta digitală a cheii publice" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Semnarea versiunii de document" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Semnăturile versiunii de document" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Detașat" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Încorporat" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Semnătură încorporată a versiunii de document" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Semnături încorporate a versiunii de document" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "Fișier de semnătură generat anterior." + +#: models.py:137 msgid "Signature file" msgstr "Fisier semnătura" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Semnătură detașată a documentului" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Semnături detașate a versiunii de document" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "semnătură" @@ -233,75 +241,91 @@ msgstr "Verificați versiunea documentului" msgid "Verify missing embedded signature" msgstr "Verificați semnatura încorporată lipsă" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "Calea către subclasa de stocare care trebuie utilizată la stocarea semnăturilor detașate." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "Argumentele care trec la SIGNATURE_STORAGE_BACKEND." -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Fraza de acces este necesară pentru a debloca această cheie." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Fraza de acces este incorectă." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Versiunea de document a fost semnată cu succes." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "Semnați" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Semnează versiunea documentului \"%s\" cu semnătura detașată" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Semnează versiunea documentului \"%s\" cu o semnătura încorporată" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Ștergeți semnătura detașată: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Detalii pentru semnătura: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "Semnăturile vă ajută să furnizați dovezi de autorizare și detectarea fraudelor. Sunt foarte sigure și greu de falsificat. O semnătură poate fi încorporată ca parte a documentului sau încărcată ca fișier separat." -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "Nu există semnături pentru acest document." -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Semnături pentru versiunea documentului: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Încărcați semnătura detașată pentru versiunea documentului: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Pe baze de date mari, această operație poate dura ceva timp pentru a executa." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Verificați toate documentele pentru semnături?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Verificarea semnăturilor a intrat în coada de așteptare." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "Cheie privată care va fi folosită pentru a semna versiunea documentului." + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "Semnare document (detașat)" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "Semnare document (încorporat)" diff --git a/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.mo index 9e08221f0b..d67abb2e71 100644 Binary files a/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.po index 60c7ca262d..d6142a372d 100644 --- a/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/ru/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -19,41 +19,41 @@ msgstr "" "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" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Подписи документа" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Дата" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "ID ключа" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "ID подписи" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Ни один" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "Тип" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "Ключ" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Кодовая фраза" @@ -145,47 +145,55 @@ msgstr "Версия документа" msgid "Date signed" msgstr "Дата подписи" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Отпечаток публичного ключа" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Подпись версии документа" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Подписи версий документов" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Отделена" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Встроена" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Встроенная подпись версии документа" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Встроенные подписи версий документов" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "Файл подписи" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Отделённая подпись версии документа" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Отделённые подписи версий документов" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "подпись" @@ -233,75 +241,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Для разблокироваки этого ключа необходима кодовая фраза" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Кодовая фраза неверна." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Версия документа успешно подписана." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Подписать версию документа \"%s\" отделённой подписью" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Подписать версию документа \"%s\" встроенной подписью" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Удалить отделённую подпись: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "Подробности для подписи: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Подписи для документа версии: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Выгрузить отделённую подпись для версии документа: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "В больших базах данных эта операция может занять некоторое время для выполнения." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "Проверить подписи во всех документах?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "Верификация сигнатуры добавлена в очередь." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.mo index 4a2af92ec4..803af82aaa 100644 Binary files a/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.po index 06a2e7fcb8..b48817af97 100644 --- a/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -17,41 +17,41 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Brez" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -143,47 +143,55 @@ msgstr "" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -231,75 +239,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Če je baza velika lahko operacija zahteva nekaj več časa da se izvrši." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.mo index ec04b993d8..b7f7f37715 100644 Binary files a/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.po index 4510c75a75..f81cf7fdcf 100644 --- a/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/tr_TR/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Belge imzaları" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Tarih" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Anahtar Kimliği" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "İmza Kimliği" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "Yok" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "tip" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "anahtar" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "Parola" @@ -144,47 +144,55 @@ msgstr "Belge versiyonu" msgid "Date signed" msgstr "İmzalanan tarih" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "Ortak anahtar parmak izi" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "Belge sürümünün imzası" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "Belge sürüm imzaları" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "Ayrılmış" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "Gömülü" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "Gömülü imza belge sürümü" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "Gömülü imza belge sürümü" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "İmza dosyası" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "Belge versiyonu ayrılmış imza" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "Belge versiyonu müstakil imzalar" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "imza" @@ -232,75 +240,91 @@ msgstr "Belge sürümünü doğrula" msgid "Verify missing embedded signature" msgstr "Eksik gömülü imzayı doğrula" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "Bu anahtarın kilidini açmak için parolanın kullanılması gerekir." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "Parola yanlış." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "Belge sürümü başarıyla imzalandı." -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "Ayrılmış bir imzayla \"%s\" belgesini imzala" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "Gömülü bir imzayla \"%s\" belge sürümünü imzalayın" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "Ayrılmış imza silin: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "İmza ayrıntıları: %s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "Belge sürümünün imzaları: %s" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Belge versiyonu için ayrılmış imza yükle: %s" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "Büyük veritabanlarında bu işlemin yürütülmesi biraz zaman alabilir." -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "İmzalar için tüm belgeleri doğruluyor musunuz?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "İmza doğrulama işlemi başarıyla sıraya alındı." + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.mo index d377493a3f..e382e867e3 100644 Binary files a/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.po index ffa4237e91..dd5ae2f9ea 100644 --- a/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/vi_VN/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "Chữ kí tài liệu" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "Ngày" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "Key ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "None" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "" @@ -144,47 +144,55 @@ msgstr "" msgid "Date signed" msgstr "" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "File lưu chữ kí" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "" @@ -232,75 +240,91 @@ msgstr "" msgid "Verify missing embedded signature" msgstr "" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.mo index 8c2fa0af73..733520ffde 100644 Binary files a/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.po b/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.po index ca65fa6619..ee850b1a08 100644 --- a/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:31-0400\n" +"PO-Revision-Date: 2019-12-03 05:22+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -18,41 +18,41 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:47 permissions.py:8 settings.py:10 +#: apps.py:48 permissions.py:8 settings.py:13 msgid "Document signatures" msgstr "文档签名" -#: apps.py:94 +#: apps.py:95 msgid "Date" msgstr "日期" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" msgstr "密钥ID" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" msgstr "签名ID" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" msgstr "没有" -#: apps.py:105 +#: apps.py:106 msgid "Type" msgstr "类型" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" msgstr "密钥" -#: forms.py:24 +#: forms.py:24 serializers.py:35 workflow_actions.py:31 msgid "" "The passphrase to unlock the key and allow it to be used to sign the " "document version." msgstr "" -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" msgstr "密码" @@ -144,47 +144,55 @@ msgstr "文件版本" msgid "Date signed" msgstr "签署日期" -#: models.py:54 +#: models.py:47 +msgid "ID of the key that will be used to sign the document." +msgstr "" + +#: models.py:57 msgid "Public key fingerprint" msgstr "公钥指纹" -#: models.py:60 +#: models.py:64 msgid "Document version signature" msgstr "文档版本签名" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" msgstr "文档版本签名" -#: models.py:80 +#: models.py:84 msgid "Detached" msgstr "分离的" -#: models.py:82 +#: models.py:86 msgid "Embedded" msgstr "嵌入的" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" msgstr "文档版嵌入签名" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" msgstr "文档版嵌入签名" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "" + +#: models.py:137 msgid "Signature file" msgstr "签名文件" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" msgstr "文档版本分离签名" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" msgstr "文档版本分离签名" -#: models.py:142 +#: models.py:147 msgid "signature" msgstr "签名" @@ -232,75 +240,91 @@ msgstr "验证文档版本" msgid "Verify missing embedded signature" msgstr "验证缺少的嵌入签名" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." msgstr "存储分离签名时要使用的存储子类的路径。" -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " msgstr "传递给SIGNATURE_STORAGE_BACKEND的参数。" -#: views.py:68 views.py:159 +#: views.py:70 views.py:152 msgid "Passphrase is needed to unlock this key." msgstr "解密此密钥需要的密码。" -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." msgstr "密码不正确。" -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." msgstr "文档版本已成功签名。" -#: views.py:127 +#: views.py:118 views.py:207 +msgid "Sign" +msgstr "" + +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" msgstr "以分离签名签署文档版本“%s”" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" msgstr "以嵌入签名签署文档版本“%s”" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" msgstr "删除分离签名:%s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" msgstr "签名详情:%s" -#: views.py:300 +#: views.py:276 msgid "" "Signatures help provide authorship evidence and tamper detection. They are " "very secure and hard to forge. A signature can be embedded as part of the " "document itself or uploaded as a separate file." msgstr "签名有助于提供作者证据和篡改检测。它们非常安全且难以伪造。签名可以作为文档本身的一部分嵌入,也可以作为单独的文件上传。" -#: views.py:328 +#: views.py:304 msgid "There are no signatures for this document." msgstr "此文档没有签名。" -#: views.py:331 +#: views.py:307 #, python-format msgid "Signatures for document version: %s" msgstr "文档版本%s的签名" -#: views.py:361 +#: views.py:337 #, python-format msgid "Upload detached signature for document version: %s" msgstr "上传文档版本%s的分离签名" -#: views.py:378 +#: views.py:354 msgid "On large databases this operation may take some time to execute." msgstr "在大型数据库上,此操作可能需要一些时间才能执行。" -#: views.py:379 +#: views.py:355 msgid "Verify all document for signatures?" msgstr "验证签名的所有文档?" -#: views.py:389 +#: views.py:365 msgid "Signature verification queued successfully." msgstr "签名验证成功排队。" + +#: workflow_actions.py:23 +msgid "Private key that will be used to sign the document version." +msgstr "" + +#: workflow_actions.py:38 +msgid "Sign document (detached)" +msgstr "" + +#: workflow_actions.py:68 +msgid "Sign document (embedded)" +msgstr "" diff --git a/mayan/apps/document_signatures/managers.py b/mayan/apps/document_signatures/managers.py index c8ace7c6c3..1718f27731 100644 --- a/mayan/apps/document_signatures/managers.py +++ b/mayan/apps/document_signatures/managers.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import logging import os +from django.core.files import File from django.db import models from mayan.apps.django_gpg.exceptions import DecryptionError @@ -13,6 +14,29 @@ from mayan.apps.storage.utils import mkstemp logger = logging.getLogger(__name__) +class DetachedSignatureManager(models.Manager): + def sign_document_version( + self, document_version, key, passphrase=None, user=None + ): + temporary_file_object, temporary_filename = mkstemp() + + try: + with document_version.open() as file_object: + key.sign_file( + binary=True, detached=True, file_object=file_object, + output=temporary_filename, passphrase=passphrase + ) + except Exception: + raise + else: + return self.create( + document_version=document_version, + signature_file=File(temporary_file_object) + ) + finally: + os.unlink(temporary_filename) + + class EmbeddedSignatureManager(models.Manager): def open_signed(self, file_object, document_version): for signature in self.filter(document_version=document_version): @@ -28,7 +52,9 @@ class EmbeddedSignatureManager(models.Manager): else: return file_object - def sign_document_version(self, document_version, key, passphrase=None, user=None): + def sign_document_version( + self, document_version, key, passphrase=None, user=None + ): temporary_file_object, temporary_filename = mkstemp() try: @@ -44,11 +70,13 @@ class EmbeddedSignatureManager(models.Manager): new_version = document_version.document.new_version( file_object=file_object, _user=user ) + # This is a potential race condition but we have not way + # to access the final signature at this point. + signature = self.filter(document_version=new_version).first() + return signature or self.none() finally: os.unlink(temporary_filename) - return new_version - def unsigned_document_versions(self): return DocumentVersion.objects.exclude( pk__in=self.values('document_version') diff --git a/mayan/apps/document_signatures/migrations/0004_auto_20160325_0418.py b/mayan/apps/document_signatures/migrations/0004_auto_20160325_0418.py index e0350ad5f1..7d6f83e712 100644 --- a/mayan/apps/document_signatures/migrations/0004_auto_20160325_0418.py +++ b/mayan/apps/document_signatures/migrations/0004_auto_20160325_0418.py @@ -31,7 +31,8 @@ class Migration(migrations.Migration): name='document_version', field=models.ForeignKey( related_name='signatures', editable=False, - to='documents.DocumentVersion', verbose_name='Document version' + to='documents.DocumentVersion', + verbose_name='Document version' ), ), migrations.AlterField( diff --git a/mayan/apps/document_signatures/migrations/0009_auto_20190711_0544.py b/mayan/apps/document_signatures/migrations/0009_auto_20190711_0544.py new file mode 100644 index 0000000000..626a0eccf2 --- /dev/null +++ b/mayan/apps/document_signatures/migrations/0009_auto_20190711_0544.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.document_signatures.models +import mayan.apps.storage.classes + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_signatures', '0008_auto_20180429_0759'), + ] + + operations = [ + migrations.AlterField( + model_name='detachedsignature', + name='signature_file', + field=models.FileField( + blank=True, null=True, + storage=mayan.apps.storage.classes.FakeStorageSubclass(), + upload_to=mayan.apps.document_signatures.models.upload_to, + verbose_name='Signature file' + ), + ), + ] diff --git a/mayan/apps/document_signatures/migrations/0010_auto_20191201_0146.py b/mayan/apps/document_signatures/migrations/0010_auto_20191201_0146.py new file mode 100644 index 0000000000..77c6550a42 --- /dev/null +++ b/mayan/apps/document_signatures/migrations/0010_auto_20191201_0146.py @@ -0,0 +1,42 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.document_signatures.models +import mayan.apps.storage.classes + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_signatures', '0009_auto_20190711_0544'), + ] + + operations = [ + migrations.AlterModelOptions( + name='signaturebasemodel', + options={ + 'ordering': ('pk',), + 'verbose_name': 'Document version signature', + 'verbose_name_plural': 'Document version signatures' + }, + ), + migrations.AlterField( + model_name='detachedsignature', + name='signature_file', + field=models.FileField( + blank=True, help_text='Signature file previously generated.', + null=True, + storage=mayan.apps.storage.classes.FakeStorageSubclass(), + upload_to=mayan.apps.document_signatures.models.upload_to, + verbose_name='Signature file' + ), + ), + migrations.AlterField( + model_name='signaturebasemodel', + name='key_id', + field=models.CharField( + help_text='ID of the key that will be used to sign the ' + 'document.', max_length=40, verbose_name='Key ID' + ), + ), + ] diff --git a/mayan/apps/document_signatures/models.py b/mayan/apps/document_signatures/models.py index 524fb893ee..ab5a77228e 100644 --- a/mayan/apps/document_signatures/models.py +++ b/mayan/apps/document_signatures/models.py @@ -14,7 +14,7 @@ from mayan.apps.django_gpg.exceptions import VerificationError from mayan.apps.django_gpg.models import Key from mayan.apps.documents.models import DocumentVersion -from .managers import EmbeddedSignatureManager +from .managers import DetachedSignatureManager, EmbeddedSignatureManager from .storages import storage_detachedsignature logger = logging.getLogger(__name__) @@ -43,7 +43,10 @@ class SignatureBaseModel(models.Model): date = models.DateField( blank=True, editable=False, null=True, verbose_name=_('Date signed') ) - key_id = models.CharField(max_length=40, verbose_name=_('Key ID')) + key_id = models.CharField( + help_text=_('ID of the key that will be used to sign the document.'), + max_length=40, verbose_name=_('Key ID') + ) # With proper key signature_id = models.CharField( blank=True, editable=False, null=True, max_length=64, @@ -57,6 +60,7 @@ class SignatureBaseModel(models.Model): objects = InheritanceManager() class Meta: + ordering = ('pk',) verbose_name = _('Document version signature') verbose_name_plural = _('Document version signatures') @@ -127,12 +131,13 @@ class EmbeddedSignature(SignatureBaseModel): @python_2_unicode_compatible class DetachedSignature(SignatureBaseModel): signature_file = models.FileField( - blank=True, null=True, storage=storage_detachedsignature, + blank=True, help_text=_( + 'Signature file previously generated.' + ), null=True, storage=storage_detachedsignature, upload_to=upload_to, verbose_name=_('Signature file') ) - # Don't inherit the SignatureBaseModel manager - objects = models.Manager() + objects = DetachedSignatureManager() class Meta: verbose_name = _('Document version detached signature') diff --git a/mayan/apps/document_signatures/serializers.py b/mayan/apps/document_signatures/serializers.py new file mode 100644 index 0000000000..103e113b47 --- /dev/null +++ b/mayan/apps/document_signatures/serializers.py @@ -0,0 +1,207 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from rest_framework import serializers +from rest_framework.exceptions import ValidationError + +from mayan.apps.acls.models import AccessControlList +from mayan.apps.django_gpg.models import Key +from mayan.apps.django_gpg.permissions import permission_key_sign +from mayan.apps.rest_api.relations import MultiKwargHyperlinkedIdentityField + +from .models import DetachedSignature, EmbeddedSignature + + +class BaseSignatureSerializer(serializers.HyperlinkedModelSerializer): + document_version_url = MultiKwargHyperlinkedIdentityField( + view_kwargs=( + { + 'lookup_field': 'document_version_id', + 'lookup_url_kwarg': 'version_pk', + }, + { + 'lookup_field': 'document_version.document.pk', + 'lookup_url_kwarg': 'pk', + } + ), + view_name='rest_api:documentversion-detail' + ) + + +class BaseSignSerializer(serializers.HyperlinkedModelSerializer): + passphrase = serializers.CharField( + help_text=_( + 'The passphrase to unlock the key and allow it to be used to ' + 'sign the document version.' + ), + required=False, write_only=True + ) + + +class DetachedSignatureSerializer(BaseSignatureSerializer): + url = MultiKwargHyperlinkedIdentityField( + view_kwargs=( + { + 'lookup_field': 'document_version.document.pk', + 'lookup_url_kwarg': 'document_id', + }, + { + 'lookup_field': 'document_version_id', + 'lookup_url_kwarg': 'document_version_id', + }, + { + 'lookup_field': 'pk', + 'lookup_url_kwarg': 'detached_signature_id', + }, + ), + view_name='rest_api:detachedsignature-detail' + ) + + class Meta: + extra_kwargs = { + 'signature_file': {'write_only': True}, + } + fields = ( + 'date', 'document_version_url', 'key_id', 'signature_file', + 'signature_id', 'public_key_fingerprint', 'url' + ) + model = DetachedSignature + read_only_fields = ('key_id',) + + def create(self, validated_data): + validated_data['document_version'] = self.context['document_version'] + return super(DetachedSignatureSerializer, self).create( + validated_data=validated_data + ) + + +class EmbeddedSignatureSerializer(serializers.HyperlinkedModelSerializer): + document_version_url = MultiKwargHyperlinkedIdentityField( + view_kwargs=( + { + 'lookup_field': 'document_version_id', + 'lookup_url_kwarg': 'version_pk', + }, + { + 'lookup_field': 'document_version.document.pk', + 'lookup_url_kwarg': 'pk', + } + ), + view_name='rest_api:documentversion-detail' + ) + + url = MultiKwargHyperlinkedIdentityField( + view_kwargs=( + { + 'lookup_field': 'document_version.document.pk', + 'lookup_url_kwarg': 'document_id', + }, + { + 'lookup_field': 'document_version_id', + 'lookup_url_kwarg': 'document_version_id', + }, + { + 'lookup_field': 'pk', + 'lookup_url_kwarg': 'embedded_signature_id', + }, + ), + view_name='rest_api:embeddedsignature-detail' + ) + passphrase = serializers.CharField(required=False, write_only=True) + + class Meta: + fields = ( + 'date', 'document_version_url', 'key_id', 'signature_id', + 'passphrase', 'public_key_fingerprint', 'url' + ) + model = EmbeddedSignature + + def create(self, validated_data): + key_id = validated_data.pop('key_id') + passphrase = validated_data.pop('passphrase', None) + + key_queryset = AccessControlList.objects.restrict_queryset( + permission=permission_key_sign, queryset=Key.objects.all(), + user=self.context['request'].user + ) + + try: + key = key_queryset.get(fingerprint__endswith=key_id) + except Key.DoesNotExist: + raise ValidationError( + { + 'key_id': [ + 'Key "{}" not found.'.format(key_id) + ] + }, code='invalid' + ) + + signature = EmbeddedSignature.objects.sign_document_version( + document_version=self.context['document_version'], key=key, + passphrase=passphrase, user=self.context['request'].user + ) + + return signature + + +class SignDetachedSerializer(BaseSignatureSerializer, BaseSignSerializer): + class Meta: + fields = ( + 'date', 'document_version_url', 'key_id', 'signature_id', + 'passphrase', 'public_key_fingerprint', 'url' + ) + model = DetachedSignature + + def sign(self, key_id, passphrase): + key_queryset = AccessControlList.objects.restrict_queryset( + permission=permission_key_sign, queryset=Key.objects.all(), + user=self.context['request'].user + ) + + try: + key = key_queryset.get(fingerprint__endswith=key_id) + except Key.DoesNotExist: + raise ValidationError( + { + 'key_id': [ + 'Key "{}" not found.'.format(key_id) + ] + }, code='invalid' + ) + + return DetachedSignature.objects.sign_document_version( + document_version=self.context['document_version'], key=key, + passphrase=passphrase, user=self.context['request'].user + ) + + +class SignEmbeddedSerializer(SignDetachedSerializer): + class Meta: + fields = ( + 'date', 'document_version_url', 'key_id', 'signature_id', + 'passphrase', 'public_key_fingerprint', 'url' + ) + model = EmbeddedSignature + + def sign(self, key_id, passphrase): + key_queryset = AccessControlList.objects.restrict_queryset( + permission=permission_key_sign, queryset=Key.objects.all(), + user=self.context['request'].user + ) + + try: + key = key_queryset.get(fingerprint__endswith=key_id) + except Key.DoesNotExist: + raise ValidationError( + { + 'key_id': [ + 'Key "{}" not found.'.format(key_id) + ] + }, code='invalid' + ) + + return EmbeddedSignature.objects.sign_document_version( + document_version=self.context['document_version'], key=key, + passphrase=passphrase, user=self.context['request'].user + ) diff --git a/mayan/apps/document_signatures/setting_migrations.py b/mayan/apps/document_signatures/setting_migrations.py new file mode 100644 index 0000000000..232048637c --- /dev/null +++ b/mayan/apps/document_signatures/setting_migrations.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from mayan.apps.common.serialization import yaml_load +from mayan.apps.smart_settings.classes import NamespaceMigration + + +class DocumentSignaturesSettingMigration(NamespaceMigration): + """ + From version 0001 to 0002 backend arguments are no longer quoted + but YAML valid too. Changed in version 3.3. + """ + def signatures_storage_backend_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) diff --git a/mayan/apps/document_signatures/settings.py b/mayan/apps/document_signatures/settings.py index e146ec667a..7c348bda68 100644 --- a/mayan/apps/document_signatures/settings.py +++ b/mayan/apps/document_signatures/settings.py @@ -7,7 +7,13 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.smart_settings.classes import Namespace -namespace = Namespace(label=_('Document signatures'), name='signatures') +from .setting_migrations import DocumentSignaturesSettingMigration + +namespace = Namespace( + label=_('Document signatures'), + migration_class=DocumentSignaturesSettingMigration, name='signatures', + version='0002' +) setting_storage_backend = namespace.add_setting( default='django.core.files.storage.FileSystemStorage', @@ -18,9 +24,9 @@ setting_storage_backend = namespace.add_setting( ) setting_storage_backend_arguments = namespace.add_setting( global_name='SIGNATURES_STORAGE_BACKEND_ARGUMENTS', - default='{{location: {}}}'.format( - os.path.join(settings.MEDIA_ROOT, 'document_signatures') - ), quoted=True, help_text=_( + default={ + 'location': os.path.join(settings.MEDIA_ROOT, 'document_signatures') + }, help_text=_( 'Arguments to pass to the SIGNATURE_STORAGE_BACKEND. ' ) ) diff --git a/mayan/apps/document_signatures/storages.py b/mayan/apps/document_signatures/storages.py index 45d5d63d5e..423f11c1e5 100644 --- a/mayan/apps/document_signatures/storages.py +++ b/mayan/apps/document_signatures/storages.py @@ -1,23 +1,11 @@ from __future__ import unicode_literals -import yaml - -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader - -from django.utils.module_loading import import_string +from mayan.apps.storage.utils import get_storage_subclass from .settings import ( setting_storage_backend, setting_storage_backend_arguments ) -storage_detachedsignature = import_string( +storage_detachedsignature = get_storage_subclass( dotted_path=setting_storage_backend.value -)( - **yaml.load( - stream=setting_storage_backend_arguments.value or '{}', - Loader=SafeLoader - ) -) +)(**setting_storage_backend_arguments.value) diff --git a/mayan/apps/document_signatures/tests/mixins.py b/mayan/apps/document_signatures/tests/mixins.py index 9f51427a3a..9bd93f2b12 100644 --- a/mayan/apps/document_signatures/tests/mixins.py +++ b/mayan/apps/document_signatures/tests/mixins.py @@ -10,6 +10,59 @@ from ..models import DetachedSignature from .literals import TEST_KEY_FILE_PATH, TEST_SIGNATURE_FILE_PATH +class DetachedSignatureAPIViewTestMixin(object): + def _request_test_document_signature_detached_create_view(self): + with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: + return self.post( + viewname='rest_api:document-version-signature-detached-list', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk + }, data={'signature_file': file_object} + ) + + def _request_test_document_signature_detached_delete_view(self): + return self.delete( + viewname='rest_api:detachedsignature-detail', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk, + 'detached_signature_id': self.test_document_version.signatures.first().pk + } + ) + + def _request_test_document_signature_detached_detail_view(self): + return self.get( + viewname='rest_api:detachedsignature-detail', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk, + 'detached_signature_id': self.test_document_version.signatures.first().pk + } + ) + + def _request_test_document_signature_detached_list_view(self): + return self.get( + viewname='rest_api:document-version-signature-detached-list', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk + } + ) + + def _request_test_document_signature_detached_sign_view(self): + return self.post( + viewname='rest_api:document-version-signature-detached-sign', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk + }, data={ + 'key_id': self.test_key_private.key_id, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + + class DetachedSignatureViewTestMixin(object): def _request_test_document_version_signature_create_view(self): return self.post( @@ -35,6 +88,39 @@ class DetachedSignatureViewTestMixin(object): ) +class EmbeddedSignatureAPIViewTestMixin(object): + def _request_test_document_signature_embedded_detail_view(self): + return self.get( + viewname='rest_api:embeddedsignature-detail', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk, + 'embedded_signature_id': self.test_document_version.signatures.first().pk + } + ) + + def _request_test_document_signature_embedded_list_view(self): + return self.get( + viewname='rest_api:document-version-signature-embedded-list', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk + } + ) + + def _request_test_document_signature_embedded_sign_view(self): + return self.post( + viewname='rest_api:document-version-signature-embedded-sign', + kwargs={ + 'document_id': self.test_document.pk, + 'document_version_id': self.test_document_version.pk + }, data={ + 'key_id': self.test_key_private.key_id, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + + class EmbeddedSignatureViewTestMixin(object): def _request_test_document_version_signature_create_view(self): return self.post( diff --git a/mayan/apps/document_signatures/tests/test_api.py b/mayan/apps/document_signatures/tests/test_api.py new file mode 100644 index 0000000000..14c439477d --- /dev/null +++ b/mayan/apps/document_signatures/tests/test_api.py @@ -0,0 +1,342 @@ +from __future__ import unicode_literals + +from rest_framework import status + +from mayan.apps.django_gpg.permissions import permission_key_sign +from mayan.apps.django_gpg.tests.mixins import KeyTestMixin +from mayan.apps.documents.tests.mixins import DocumentTestMixin +from mayan.apps.rest_api.tests.base import BaseAPITestCase + +from ..permissions import ( + permission_document_version_sign_detached, + permission_document_version_sign_embedded, + permission_document_version_signature_delete, + permission_document_version_signature_view, + permission_document_version_signature_upload +) + +from .literals import TEST_KEY_PUBLIC_ID, TEST_SIGNED_DOCUMENT_PATH +from .mixins import ( + DetachedSignatureAPIViewTestMixin, EmbeddedSignatureAPIViewTestMixin, + SignatureTestMixin +) + + +class DetachedSignatureDocumentAPIViewTestCase( + DocumentTestMixin, DetachedSignatureAPIViewTestMixin, + KeyTestMixin, SignatureTestMixin, BaseAPITestCase +): + auto_upload_document = False + + def test_document_signature_detached_create_view_no_permission(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_signature_detached_create_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_detached_create_view_with_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_upload + ) + + response = self._request_test_document_signature_detached_create_view() + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) + + def test_document_signature_detached_delete_no_permission(self): + self.upload_document() + self._create_test_detached_signature() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_signature_detached_delete_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_detached_delete_with_access(self): + self.upload_document() + self._create_test_detached_signature() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_delete + ) + + response = self._request_test_document_signature_detached_delete_view() + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures - 1 + ) + + def test_document_signature_detached_detail_no_permission(self): + self.upload_document() + self._create_test_detached_signature() + + response = self._request_test_document_signature_detached_detail_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_document_signature_detached_detail_with_access(self): + self.upload_document() + self._create_test_detached_signature() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_view + ) + + response = self._request_test_document_signature_detached_detail_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual( + response.data['key_id'], TEST_KEY_PUBLIC_ID + ) + + def test_document_signature_detached_list_view_no_permission(self): + self.upload_document() + self._create_test_detached_signature() + + response = self._request_test_document_signature_detached_list_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_document_signature_detached_list_view_with_access(self): + self.upload_document() + self._create_test_detached_signature() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_view + ) + + response = self._request_test_document_signature_detached_list_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + response.data['results'][0]['key_id'], TEST_KEY_PUBLIC_ID + ) + + def test_document_signature_detached_sign_view_with_no_permission(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_signature_detached_sign_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_detached_sign_view_with_document_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_detached + ) + + response = self._request_test_document_signature_detached_sign_view() + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_detached_sign_view_with_key_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_signature_detached_sign_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_detached_sign_view_with_full_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_detached + ) + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_signature_detached_sign_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) + + +class EmbeddedSignatureDocumentAPIViewTestCase( + DocumentTestMixin, EmbeddedSignatureAPIViewTestMixin, + KeyTestMixin, BaseAPITestCase +): + auto_upload_document = False + + def test_document_signature_embedded_sign_view_with_no_permission(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_signature_embedded_sign_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_embedded_sign_view_with_document_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_embedded + ) + + response = self._request_test_document_signature_embedded_sign_view() + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_embedded_sign_view_with_key_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_signature_embedded_sign_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_document_signature_embedded_sign_view_with_full_access(self): + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_sign_embedded + ) + self.grant_access( + obj=self.test_key_private, + permission=permission_key_sign + ) + + response = self._request_test_document_signature_embedded_sign_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) + + def test_document_signature_embedded_detail_no_permission(self): + self.test_document_path = TEST_SIGNED_DOCUMENT_PATH + self.upload_document() + + response = self._request_test_document_signature_embedded_detail_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_document_signature_embedded_detail_with_access(self): + self.test_document_path = TEST_SIGNED_DOCUMENT_PATH + self.upload_document() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_view + ) + + response = self._request_test_document_signature_embedded_detail_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual( + response.data['key_id'], TEST_KEY_PUBLIC_ID + ) + + def test_document_signature_embedded_list_view_no_permission(self): + self.test_document_path = TEST_SIGNED_DOCUMENT_PATH + self.upload_document() + + response = self._request_test_document_signature_embedded_list_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_document_signature_embedded_list_view_with_access(self): + self.test_document_path = TEST_SIGNED_DOCUMENT_PATH + self.upload_document() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_view + ) + + response = self._request_test_document_signature_embedded_list_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + response.data['results'][0]['key_id'], TEST_KEY_PUBLIC_ID + ) diff --git a/mayan/apps/document_signatures/tests/test_links.py b/mayan/apps/document_signatures/tests/test_links.py index 46800e4b89..2c66572839 100644 --- a/mayan/apps/document_signatures/tests/test_links.py +++ b/mayan/apps/document_signatures/tests/test_links.py @@ -2,9 +2,8 @@ from __future__ import unicode_literals from django.urls import reverse -from mayan.apps.documents.tests import ( - GenericDocumentViewTestCase, TEST_SMALL_DOCUMENT_PATH -) +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase +from mayan.apps.documents.tests.literals import TEST_SMALL_DOCUMENT_PATH from ..links import ( link_document_version_signature_delete, @@ -57,7 +56,9 @@ class DocumentSignatureLinksTestCase( resolved_link.url, reverse( viewname=link_document_version_signature_details.view, - args=(self.test_document.latest_version.signatures.first().pk,) + kwargs={ + 'pk': self.test_document.latest_version.signatures.first().pk, + } ) ) @@ -99,6 +100,8 @@ class DocumentSignatureLinksTestCase( resolved_link.url, reverse( viewname=link_document_version_signature_delete.view, - args=(self.test_document.latest_version.signatures.first().pk,) + kwargs={ + 'pk': self.test_document.latest_version.signatures.first().pk, + } ) ) diff --git a/mayan/apps/document_signatures/tests/test_models.py b/mayan/apps/document_signatures/tests/test_models.py index 5bbd3a07d4..8930e896f6 100644 --- a/mayan/apps/document_signatures/tests/test_models.py +++ b/mayan/apps/document_signatures/tests/test_models.py @@ -6,8 +6,9 @@ import time from mayan.apps.django_gpg.tests.literals import TEST_KEY_PRIVATE_PASSPHRASE from mayan.apps.django_gpg.tests.mixins import KeyTestMixin from mayan.apps.documents.models import DocumentVersion -from mayan.apps.documents.tests import ( - GenericDocumentTestCase, TEST_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH +from mayan.apps.documents.tests.base import GenericDocumentTestCase +from mayan.apps.documents.tests.literals import ( + TEST_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH ) from ..models import DetachedSignature, EmbeddedSignature @@ -103,7 +104,8 @@ class DocumentSignaturesTestCase(SignatureTestMixin, GenericDocumentTestCase): self.assertEqual(DetachedSignature.objects.count(), 1) self.assertEqual( - self.test_signature.document_version, self.test_document.latest_version + self.test_signature.document_version, + self.test_document.latest_version ) self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(self.test_signature.public_key_fingerprint, None) @@ -118,7 +120,8 @@ class DocumentSignaturesTestCase(SignatureTestMixin, GenericDocumentTestCase): self.assertEqual(DetachedSignature.objects.count(), 1) self.assertEqual( - self.test_signature.document_version, self.test_document.latest_version + self.test_signature.document_version, + self.test_document.latest_version ) self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( @@ -267,7 +270,7 @@ class EmbeddedSignaturesTestCase(KeyTestMixin, GenericDocumentTestCase): file_object.seek(0) original_hash = hashlib.sha256(file_object.read()).hexdigest() - new_version = EmbeddedSignature.objects.sign_document_version( + signature = EmbeddedSignature.objects.sign_document_version( document_version=self.test_document.latest_version, key=self.test_key_private, passphrase=TEST_KEY_PRIVATE_PASSPHRASE @@ -275,7 +278,7 @@ class EmbeddedSignaturesTestCase(KeyTestMixin, GenericDocumentTestCase): self.assertEqual(EmbeddedSignature.objects.count(), 1) - with new_version.open() as file_object: + with signature.document_version.open() as file_object: file_object.seek(0, 2) new_size = file_object.tell() file_object.seek(0) diff --git a/mayan/apps/document_signatures/tests/test_setting_migrations.py b/mayan/apps/document_signatures/tests/test_setting_migrations.py new file mode 100644 index 0000000000..76fc83a7c3 --- /dev/null +++ b/mayan/apps/document_signatures/tests/test_setting_migrations.py @@ -0,0 +1,39 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.utils.encoding import force_bytes + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.storage.utils import NamedTemporaryFile + +from ..settings import setting_storage_backend_arguments + + +class DocumentSignaturesSettingMigrationTestCase( + EnvironmentTestCaseMixin, BaseTestCase +): + def test_signatures_storage_backend_arguments_0001_migration(self): + + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'SIGNATURES_STORAGE_BACKEND_ARGUMENTS', + '"{}"'.format( + Setting.serialize_value(value=test_value) + ) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_storage_backend_arguments.value, + test_value + ) diff --git a/mayan/apps/document_signatures/tests/test_views.py b/mayan/apps/document_signatures/tests/test_views.py index 016d93f36a..ff37dd1182 100644 --- a/mayan/apps/document_signatures/tests/test_views.py +++ b/mayan/apps/document_signatures/tests/test_views.py @@ -5,9 +5,9 @@ from django_downloadview.test import assert_download_response from mayan.apps.django_gpg.permissions import permission_key_sign from mayan.apps.django_gpg.tests.mixins import KeyTestMixin from mayan.apps.documents.models import DocumentVersion -from mayan.apps.documents.tests import ( - GenericDocumentViewTestCase, TEST_DOCUMENT_PATH, - TEST_SMALL_DOCUMENT_PATH +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase +from mayan.apps.documents.tests.literals import ( + TEST_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH ) from ..models import DetachedSignature, EmbeddedSignature @@ -105,7 +105,7 @@ class SignaturesViewTestCase( response = self._request_test_document_version_signature_list_view( document=self.test_document ) - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_signature_list_view_with_access(self): self.test_document_path = TEST_SMALL_DOCUMENT_PATH diff --git a/mayan/apps/document_signatures/tests/test_workflow_actions.py b/mayan/apps/document_signatures/tests/test_workflow_actions.py new file mode 100644 index 0000000000..686a05730c --- /dev/null +++ b/mayan/apps/document_signatures/tests/test_workflow_actions.py @@ -0,0 +1,41 @@ +from __future__ import unicode_literals + +from mayan.apps.django_gpg.tests.literals import TEST_KEY_PRIVATE_PASSPHRASE +from mayan.apps.django_gpg.tests.mixins import KeyTestMixin +from mayan.apps.document_states.tests.mixins import WorkflowTestMixin +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase + +from ..models import DetachedSignature, EmbeddedSignature +from ..workflow_actions import ( + DocumentSignatureDetachedAction, DocumentSignatureEmbeddedAction +) + + +class DocumentSignatureWorkflowActionTestCase( + GenericDocumentViewTestCase, KeyTestMixin, WorkflowTestMixin, +): + def test_document_signature_detached_action(self): + self._create_test_key_private() + signature_count = DetachedSignature.objects.count() + + action = DocumentSignatureDetachedAction( + form_data={ + 'key': self.test_key_private, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + action.execute(context={'document': self.test_document}) + self.assertNotEqual(signature_count, DetachedSignature.objects.count()) + + def test_document_signature_embedded_action(self): + self._create_test_key_private() + signature_count = EmbeddedSignature.objects.count() + + action = DocumentSignatureEmbeddedAction( + form_data={ + 'key': self.test_key_private, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + action.execute(context={'document': self.test_document}) + self.assertNotEqual(signature_count, EmbeddedSignature.objects.count()) diff --git a/mayan/apps/document_signatures/urls.py b/mayan/apps/document_signatures/urls.py index a70ec1c85c..547a614200 100644 --- a/mayan/apps/document_signatures/urls.py +++ b/mayan/apps/document_signatures/urls.py @@ -2,6 +2,12 @@ from __future__ import unicode_literals from django.conf.urls import url +from .api_views import ( + APIDocumentSignDetachedView, APIDocumentDetachedSignatureListView, + APIDocumentDetachedSignatureView, APIDocumentEmbeddedSignatureListView, + APIDocumentEmbeddedSignatureView, APIDocumentSignEmbeddedView +) + from .views import ( AllDocumentSignatureVerifyView, DocumentVersionDetachedSignatureCreateView, DocumentVersionEmbeddedSignatureCreateView, @@ -12,37 +18,37 @@ from .views import ( urlpatterns = [ url( - regex=r'^(?P\d+)/details/$', + regex=r'^signatures/(?P\d+)/details/$', view=DocumentVersionSignatureDetailView.as_view(), name='document_version_signature_details' ), url( - regex=r'^signature/(?P\d+)/download/$', + regex=r'^signatures/(?P\d+)/download/$', view=DocumentVersionSignatureDownloadView.as_view(), name='document_version_signature_download' ), url( - regex=r'^document/version/(?P\d+)/signatures/list/$', + regex=r'^documents/versions/(?P\d+)/signatures/$', view=DocumentVersionSignatureListView.as_view(), name='document_version_signature_list' ), url( - regex=r'^documents/version/(?P\d+)/signature/detached/upload/$', + regex=r'^documents/versions/(?P\d+)/signatures/detached/upload/$', view=DocumentVersionSignatureUploadView.as_view(), name='document_version_signature_upload' ), url( - regex=r'^documents/version/(?P\d+)/signature/detached/create/$', + regex=r'^documents/versions/(?P\d+)/signatures/detached/create/$', view=DocumentVersionDetachedSignatureCreateView.as_view(), name='document_version_signature_detached_create' ), url( - regex=r'^documents/version/(?P\d+)/signature/embedded/create/$', + regex=r'^documents/versions/(?P\d+)/signatures/embedded/create/$', view=DocumentVersionEmbeddedSignatureCreateView.as_view(), name='document_version_signature_embedded_create' ), url( - regex=r'^signature/(?P\d+)/delete/$', + regex=r'^signatures/(?P\d+)/delete/$', view=DocumentVersionSignatureDeleteView.as_view(), name='document_version_signature_delete' ), @@ -52,3 +58,36 @@ urlpatterns = [ name='all_document_version_signature_verify' ), ] + +api_urls = [ + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/detached/$', + view=APIDocumentDetachedSignatureListView.as_view(), + name='document-version-signature-detached-list' + ), + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/detached/sign/$', + view=APIDocumentSignDetachedView.as_view(), + name='document-version-signature-detached-sign' + ), + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/detached/(?P[0-9]+)/$', + view=APIDocumentDetachedSignatureView.as_view(), + name='detachedsignature-detail' + ), + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/embedded/$', + view=APIDocumentEmbeddedSignatureListView.as_view(), + name='document-version-signature-embedded-list' + ), + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/embedded/sign/$', + view=APIDocumentSignEmbeddedView.as_view(), + name='document-version-signature-embedded-sign' + ), + url( + regex=r'^documents/(?P[0-9]+)/versions/(?P[0-9]+)/signatures/embedded/(?P[0-9]+)/$', + view=APIDocumentEmbeddedSignatureView.as_view(), + name='embeddedsignature-detail' + ), +] diff --git a/mayan/apps/document_signatures/views.py b/mayan/apps/document_signatures/views.py index 4f436bc0c5..6e890104a4 100644 --- a/mayan/apps/document_signatures/views.py +++ b/mayan/apps/document_signatures/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages -from django.core.files import File from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.template import RequestContext @@ -16,22 +15,26 @@ from mayan.apps.common.generics import ( ConfirmView, FormView, SingleObjectCreateView, SingleObjectDeleteView, SingleObjectDetailView, SingleObjectDownloadView, SingleObjectListView ) +from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.django_gpg.exceptions import NeedPassphrase, PassphraseError from mayan.apps.django_gpg.permissions import permission_key_sign from mayan.apps.documents.models import DocumentVersion -from mayan.apps.storage.utils import TemporaryFile from .forms import ( DocumentVersionSignatureCreateForm, DocumentVersionSignatureDetailForm ) -from .icons import icon_document_signature_list +from .icons import ( + icon_document_signature_list, + icon_document_version_signature_detached_create, + icon_document_version_signature_embedded_create +) from .links import ( link_document_version_signature_detached_create, link_document_version_signature_embedded_create, link_document_version_signature_upload ) -from .models import DetachedSignature, SignatureBaseModel +from .models import DetachedSignature, EmbeddedSignature, SignatureBaseModel from .permissions import ( permission_document_version_sign_detached, permission_document_version_sign_embedded, @@ -58,11 +61,10 @@ class DocumentVersionDetachedSignatureCreateView(FormView): ) try: - with self.get_document_version().open() as file_object: - detached_signature = key.sign_file( - file_object=file_object, detached=True, - passphrase=passphrase - ) + DetachedSignature.objects.sign_document_version( + document_version=self.get_document_version(), + key=key, passphrase=passphrase, user=self.request.user + ) except NeedPassphrase: messages.error( message=_('Passphrase is needed to unlock this key.'), @@ -86,17 +88,6 @@ class DocumentVersionDetachedSignatureCreateView(FormView): ) ) else: - temporary_file_object = TemporaryFile() - temporary_file_object.write(detached_signature.data) - temporary_file_object.seek(0) - - DetachedSignature.objects.create( - document_version=self.get_document_version(), - signature_file=File(temporary_file_object) - ) - - temporary_file_object.close() - messages.success( message=_('Document version signed successfully.'), request=self.request @@ -123,6 +114,8 @@ class DocumentVersionDetachedSignatureCreateView(FormView): def get_extra_context(self): return { 'object': self.get_document_version(), + 'submit_icon_class': icon_document_version_signature_detached_create, + 'submit_label': _('Sign'), 'title': _( 'Sign document version "%s" with a detached signature' ) % self.get_document_version(), @@ -150,10 +143,10 @@ class DocumentVersionEmbeddedSignatureCreateView(FormView): ) try: - with self.get_document_version().open() as file_object: - signature_result = key.sign_file( - binary=True, file_object=file_object, passphrase=passphrase - ) + new_version = EmbeddedSignature.objects.sign_document_version( + document_version=self.get_document_version(), + key=key, passphrase=passphrase, user=self.request.user + ) except NeedPassphrase: messages.error( message=_('Passphrase is needed to unlock this key.'), @@ -177,16 +170,6 @@ class DocumentVersionEmbeddedSignatureCreateView(FormView): ) ) else: - temporary_file_object = TemporaryFile() - temporary_file_object.write(signature_result.data) - temporary_file_object.seek(0) - - new_version = self.get_document_version().document.new_version( - file_object=temporary_file_object, _user=self.request.user - ) - - temporary_file_object.close() - messages.success( message=_('Document version signed successfully.'), request=self.request @@ -220,6 +203,8 @@ class DocumentVersionEmbeddedSignatureCreateView(FormView): def get_extra_context(self): return { 'object': self.get_document_version(), + 'submit_icon_class': icon_document_version_signature_embedded_create, + 'submit_label': _('Sign'), 'title': _( 'Sign document version "%s" with a embedded signature' ) % self.get_document_version(), @@ -277,20 +262,11 @@ class DocumentVersionSignatureDownloadView(SingleObjectDownloadView): ) -class DocumentVersionSignatureListView(SingleObjectListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - obj=self.get_document_version(), - permissions=(permission_document_version_signature_view,), - user=request.user - ) - - return super( - DocumentVersionSignatureListView, self - ).dispatch(request, *args, **kwargs) - - def get_document_version(self): - return get_object_or_404(klass=DocumentVersion, pk=self.kwargs['pk']) +class DocumentVersionSignatureListView( + ExternalObjectMixin, SingleObjectListView +): + external_object_class = DocumentVersion + external_object_permission = permission_document_version_signature_view def get_extra_context(self): return { @@ -306,34 +282,34 @@ class DocumentVersionSignatureListView(SingleObjectListView): link_document_version_signature_detached_create.resolve( RequestContext( request=self.request, dict_={ - 'object': self.get_document_version() + 'object': self.external_object } ) ), link_document_version_signature_embedded_create.resolve( RequestContext( request=self.request, dict_={ - 'object': self.get_document_version() + 'object': self.external_object } ) ), link_document_version_signature_upload.resolve( RequestContext( request=self.request, dict_={ - 'object': self.get_document_version() + 'object': self.external_object } ) ), ], 'no_results_title': _('There are no signatures for this document.'), - 'object': self.get_document_version(), + 'object': self.external_object, 'title': _( 'Signatures for document version: %s' - ) % self.get_document_version(), + ) % self.external_object, } def get_source_queryset(self): - return self.get_document_version().signatures.all() + return self.external_object.signatures.all() class DocumentVersionSignatureUploadView(SingleObjectCreateView): diff --git a/mayan/apps/document_signatures/workflow_actions.py b/mayan/apps/document_signatures/workflow_actions.py new file mode 100644 index 0000000000..c2e77b8173 --- /dev/null +++ b/mayan/apps/document_signatures/workflow_actions.py @@ -0,0 +1,75 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.acls.models import AccessControlList +from mayan.apps.django_gpg.models import Key +from mayan.apps.django_gpg.permissions import permission_key_sign +from mayan.apps.document_states.classes import WorkflowAction + +from .models import DetachedSignature, EmbeddedSignature + +logger = logging.getLogger(__name__) + + +class DocumentSignatureDetachedAction(WorkflowAction): + fields = { + 'key': { + 'label': _('Key'), + 'class': 'django.forms.ModelChoiceField', 'kwargs': { + 'help_text': _( + 'Private key that will be used to sign the document ' + 'version.' + ), 'queryset': Key.objects.none(), + }, + }, 'passphrase': { + 'label': _('Passphrase'), + 'class': 'django.forms.CharField', 'kwargs': { + 'help_text': _( + 'The passphrase to unlock the key and allow it to be ' + 'used to sign the document version.' + ), 'required': False + }, + }, + } + field_order = ('key', 'passphrase') + label = _('Sign document (detached)') + widgets = { + 'passphrase': { + 'class': 'django.forms.widgets.PasswordInput', + } + } + + def get_form_schema(self, request): + user = request.user + logger.debug('user: %s', user) + + queryset = AccessControlList.objects.restrict_queryset( + permission=permission_key_sign, queryset=Key.objects.all(), + user=user + ) + + self.fields['key']['kwargs']['queryset'] = queryset + return super(DocumentSignatureDetachedAction, self).get_form_schema( + request=request + ) + + def execute(self, context): + DetachedSignature.objects.sign_document_version( + document_version=context['document'].latest_version, + key=self.form_data['key'], + passphrase=self.form_data.get('passphrase'), + ) + + +class DocumentSignatureEmbeddedAction(DocumentSignatureDetachedAction): + label = _('Sign document (embedded)') + + def execute(self, context): + EmbeddedSignature.objects.sign_document_version( + document_version=context['document'].latest_version, + key=self.form_data['key'], + passphrase=self.form_data.get('passphrase'), + ) diff --git a/mayan/apps/document_states/api_views.py b/mayan/apps/document_states/api_views.py index 78e4e31893..e96742a0f2 100644 --- a/mayan/apps/document_states/api_views.py +++ b/mayan/apps/document_states/api_views.py @@ -1,15 +1,15 @@ from __future__ import absolute_import, unicode_literals +from django.http import HttpResponse from django.shortcuts import get_object_or_404 - -from rest_framework import generics +from django.views.decorators.cache import cache_control, patch_cache_control from mayan.apps.acls.models import AccessControlList from mayan.apps.documents.models import Document, DocumentType from mayan.apps.documents.permissions import permission_document_type_view -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics +from .literals import WORKFLOW_IMAGE_TASK_TIMEOUT from .models import Workflow from .permissions import ( permission_workflow_create, permission_workflow_delete, @@ -23,12 +23,14 @@ from .serializers import ( WritableWorkflowTransitionSerializer ) +from .settings import settings_workflow_image_cache_time +from .tasks import task_generate_workflow_image -class APIDocumentTypeWorkflowListView(generics.ListAPIView): + +class APIDocumentTypeWorkflowRuntimeProxyListView(generics.ListAPIView): """ get: Returns a list of all the document type workflows. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'GET': (permission_workflow_view,), } @@ -55,7 +57,6 @@ class APIWorkflowDocumentTypeList(generics.ListCreateAPIView): get: Returns a list of all the document types attached to a workflow. post: Attach a document type to a specified workflow. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'GET': (permission_document_type_view,), } @@ -117,7 +118,6 @@ class APIWorkflowDocumentTypeView(generics.RetrieveDestroyAPIView): delete: Remove a document type from the selected workflow. get: Returns the details of the selected workflow document type. """ - filter_backends = (MayanObjectPermissionsFilter,) lookup_url_kwarg = 'document_type_pk' mayan_object_permissions = { 'GET': (permission_document_type_view,), @@ -172,22 +172,55 @@ class APIWorkflowDocumentTypeView(generics.RetrieveDestroyAPIView): self.get_workflow().document_types.remove(instance) -class APIWorkflowListView(generics.ListCreateAPIView): +class APIWorkflowImageView(generics.RetrieveAPIView): + """ + get: Returns an image representation of the selected workflow. + """ + mayan_object_permissions = { + 'GET': (permission_workflow_view,), + } + queryset = Workflow.objects.all() + + def get_serializer(self, *args, **kwargs): + return None + + def get_serializer_class(self): + return None + + @cache_control(private=True) + def retrieve(self, request, *args, **kwargs): + task = task_generate_workflow_image.apply_async( + kwargs=dict( + document_state_id=self.get_object().pk, + ) + ) + + cache_filename = task.get(timeout=WORKFLOW_IMAGE_TASK_TIMEOUT) + cache_file = self.get_object().cache_partition.get_file(filename=cache_filename) + with cache_file.open() as file_object: + response = HttpResponse(file_object.read(), content_type='image') + if '_hash' in request.GET: + patch_cache_control( + response, + max_age=settings_workflow_image_cache_time.value + ) + return response + + +class APIWorkflowRuntimeProxyListView(generics.ListCreateAPIView): """ get: Returns a list of all the workflows. post: Create a new workflow. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_workflow_view,)} mayan_view_permissions = {'POST': (permission_workflow_create,)} - permission_classes = (MayanPermission,) queryset = Workflow.objects.all() def get_serializer(self, *args, **kwargs): if not self.request: return None - return super(APIWorkflowListView, self).get_serializer(*args, **kwargs) + return super(APIWorkflowRuntimeProxyListView, self).get_serializer(*args, **kwargs) def get_serializer_class(self): if self.request.method == 'GET': @@ -203,7 +236,6 @@ class APIWorkflowView(generics.RetrieveUpdateDestroyAPIView): patch: Edit the selected workflow. put: Edit the selected workflow. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'DELETE': (permission_workflow_delete,), 'GET': (permission_workflow_view,), @@ -425,7 +457,6 @@ class APIWorkflowInstanceListView(generics.ListAPIView): """ get: Returns a list of all the document workflows. """ - filter_backends = (MayanObjectPermissionsFilter,) serializer_class = WorkflowInstanceSerializer mayan_object_permissions = { 'GET': (permission_workflow_view,), @@ -449,7 +480,6 @@ class APIWorkflowInstanceView(generics.RetrieveAPIView): """ get: Return the details of the selected document workflow. """ - filter_backends = (MayanObjectPermissionsFilter,) lookup_url_kwarg = 'workflow_pk' mayan_object_permissions = { 'GET': (permission_workflow_view,), @@ -488,7 +518,6 @@ class APIWorkflowInstanceLogEntryListView(generics.ListCreateAPIView): Failing that, check for ACLs for any of the workflow's transitions. Failing that, then raise PermissionDenied """ - # TODO: Improvement above AccessControlList.objects.check_access( obj=document, permissions=(permission_workflow_view,), user=self.request.user diff --git a/mayan/apps/document_states/apps.py b/mayan/apps/document_states/apps.py index 4e69e0d474..dc8b8073e8 100644 --- a/mayan/apps/document_states/apps.py +++ b/mayan/apps/document_states/apps.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from django.apps import apps -from django.db.models.signals import post_save +from django.db.models.signals import post_migrate, post_save from django.utils.translation import ugettext_lazy as _ from mayan.apps.acls.classes import ModelPermission @@ -24,32 +24,37 @@ from mayan.apps.navigation.classes import SourceColumn from .classes import DocumentStateHelper, WorkflowAction from .events import event_workflow_edited from .handlers import ( - handler_index_document, handler_launch_workflow, handler_trigger_transition + handler_create_workflow_image_cache, handler_index_document, + handler_launch_workflow, handler_trigger_transition ) +from .html_widgets import WorkflowLogExtraDataWidget, widget_transition_events from .links import ( - link_document_workflow_instance_list, link_setup_document_type_workflows, - link_setup_workflow_document_types, link_setup_workflow_create, - link_setup_workflow_delete, link_setup_workflow_edit, - link_setup_workflow_list, link_setup_workflow_states, - link_setup_workflow_state_action_delete, - link_setup_workflow_state_action_edit, - link_setup_workflow_state_action_list, - link_setup_workflow_state_action_selection, - link_setup_workflow_state_create, link_setup_workflow_state_delete, - link_setup_workflow_state_edit, link_setup_workflow_transitions, - link_setup_workflow_transition_create, - link_setup_workflow_transition_delete, link_setup_workflow_transition_edit, - link_tool_launch_all_workflows, link_workflow_instance_detail, + link_workflow_instance_list, link_document_type_workflow_templates, + link_workflow_template_document_types, link_workflow_template_create, + link_workflow_template_delete, link_workflow_template_edit, + link_workflow_template_list, link_workflow_template_state_list, + link_workflow_template_state_action_delete, + link_workflow_template_state_action_edit, + link_workflow_template_state_action_list, + link_workflow_template_state_action_selection, + link_workflow_template_state_create, link_workflow_template_state_delete, + link_workflow_template_state_edit, link_workflow_template_transition_list, + link_workflow_template_transition_create, + link_workflow_template_transition_delete, link_workflow_template_transition_edit, + link_workflow_template_transition_field_create, + link_workflow_template_transition_field_delete, + link_workflow_template_transition_field_edit, + link_workflow_template_transition_field_list, + link_tool_launch_workflows, link_workflow_instance_detail, link_workflow_instance_transition, link_workflow_runtime_proxy_document_list, - link_workflow_runtime_proxy_list, link_workflow_preview, + link_workflow_runtime_proxy_list, link_workflow_template_preview, link_workflow_runtime_proxy_state_document_list, link_workflow_runtime_proxy_state_list, - link_workflow_transition_events + link_workflow_template_transition_events ) from .permissions import ( permission_workflow_delete, permission_workflow_edit, permission_workflow_transition, permission_workflow_view ) -from .widgets import widget_transition_events class DocumentStatesApp(MayanAppConfig): @@ -85,6 +90,7 @@ class DocumentStatesApp(MayanAppConfig): WorkflowStateAction = self.get_model('WorkflowStateAction') WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy') WorkflowTransition = self.get_model('WorkflowTransition') + WorkflowTransitionField = self.get_model('WorkflowTransitionField') WorkflowTransitionTriggerEvent = self.get_model( 'WorkflowTransitionTriggerEvent' ) @@ -127,6 +133,10 @@ class DocumentStatesApp(MayanAppConfig): permission_workflow_view, ) ) + ModelPermission.register( + model=WorkflowTransition, + permissions=(permission_workflow_transition,) + ) ModelPermission.register_inheritance( model=WorkflowInstance, related='workflow', @@ -135,11 +145,6 @@ class DocumentStatesApp(MayanAppConfig): model=WorkflowInstanceLogEntry, related='workflow_instance__workflow', ) - ModelPermission.register( - model=WorkflowTransition, - permissions=(permission_workflow_transition,) - ) - ModelPermission.register_inheritance( model=WorkflowState, related='workflow', ) @@ -149,6 +154,9 @@ class DocumentStatesApp(MayanAppConfig): ModelPermission.register_inheritance( model=WorkflowTransition, related='workflow', ) + ModelPermission.register_inheritance( + model=WorkflowTransitionField, related='transition', + ) ModelPermission.register_inheritance( model=WorkflowTransitionTriggerEvent, related='transition__workflow', @@ -157,9 +165,10 @@ class DocumentStatesApp(MayanAppConfig): SourceColumn( attribute='label', is_sortable=True, source=Workflow ) - SourceColumn( + column_workflow_internal_name = SourceColumn( attribute='internal_name', is_sortable=True, source=Workflow ) + column_workflow_internal_name.add_exclude(source=WorkflowRuntimeProxy) SourceColumn( attribute='get_initial_state', empty_value=_('None'), source=Workflow @@ -200,12 +209,25 @@ class DocumentStatesApp(MayanAppConfig): source=WorkflowInstanceLogEntry, label=_('User'), attribute='user' ) SourceColumn( - source=WorkflowInstanceLogEntry, label=_('Transition'), - attribute='transition' + source=WorkflowInstanceLogEntry, + attribute='transition__origin_state', is_sortable=True ) SourceColumn( - source=WorkflowInstanceLogEntry, label=_('Comment'), - attribute='comment' + source=WorkflowInstanceLogEntry, + attribute='transition', is_sortable=True + ) + SourceColumn( + source=WorkflowInstanceLogEntry, + attribute='transition__destination_state', is_sortable=True + ) + SourceColumn( + source=WorkflowInstanceLogEntry, + attribute='comment', is_sortable=True + ) + SourceColumn( + source=WorkflowInstanceLogEntry, + attribute='get_extra_data', label=_('Additional details'), + widget=WorkflowLogExtraDataWidget ) SourceColumn( @@ -253,45 +275,100 @@ class DocumentStatesApp(MayanAppConfig): ) ) + SourceColumn( + attribute='name', is_identifier=True, is_sortable=True, + source=WorkflowTransitionField + ) + SourceColumn( + attribute='label', is_sortable=True, source=WorkflowTransitionField + ) + SourceColumn( + attribute='get_field_type_display', label=_('Type'), + source=WorkflowTransitionField + ) + SourceColumn( + attribute='required', is_sortable=True, + source=WorkflowTransitionField, widget=TwoStateWidget + ) + SourceColumn( + attribute='get_widget_display', label=_('Widget'), + is_sortable=False, source=WorkflowTransitionField + ) + SourceColumn( + attribute='widget_kwargs', is_sortable=True, + source=WorkflowTransitionField + ) + + SourceColumn( + source=WorkflowRuntimeProxy, label=_('Documents'), + func=lambda context: context['object'].get_document_count( + user=context['request'].user + ), order=99 + ) + SourceColumn( + source=WorkflowStateRuntimeProxy, label=_('Documents'), + func=lambda context: context['object'].get_document_count( + user=context['request'].user + ), order=99 + ) + menu_facet.bind_links( - links=(link_document_workflow_instance_list,), sources=(Document,) + links=(link_workflow_instance_list,), sources=(Document,) ) menu_list_facet.bind_links( links=( link_acl_list, link_events_for_object, link_object_event_types_user_subcriptions_list, - link_setup_workflow_document_types, - link_setup_workflow_states, link_setup_workflow_transitions, - link_workflow_preview + link_workflow_template_document_types, + link_workflow_template_state_list, link_workflow_template_transition_list, + link_workflow_template_preview ), sources=(Workflow,) ) + + menu_list_facet.unbind_links( + links=( + link_acl_list, link_events_for_object, + link_object_event_types_user_subcriptions_list, + link_workflow_template_document_types, + link_workflow_template_state_list, link_workflow_template_transition_list, + link_workflow_template_preview + ), sources=(WorkflowRuntimeProxy,) + ) + menu_list_facet.bind_links( links=( - link_setup_document_type_workflows, + link_document_type_workflow_templates, ), sources=(DocumentType,) ) menu_main.bind_links(links=(link_workflow_runtime_proxy_list,), position=10) menu_object.bind_links( links=( - link_setup_workflow_delete, link_setup_workflow_edit + link_workflow_template_delete, link_workflow_template_edit ), sources=(Workflow,) ) menu_object.bind_links( links=( - link_setup_workflow_state_edit, - link_setup_workflow_state_action_list, - link_setup_workflow_state_delete + link_workflow_template_state_edit, + link_workflow_template_state_action_list, + link_workflow_template_state_delete ), sources=(WorkflowState,) ) menu_object.bind_links( links=( - link_setup_workflow_transition_edit, - link_workflow_transition_events, link_acl_list, - link_setup_workflow_transition_delete + link_workflow_template_transition_edit, + link_workflow_template_transition_events, + link_workflow_template_transition_field_list, link_acl_list, + link_workflow_template_transition_delete ), sources=(WorkflowTransition,) ) + menu_object.bind_links( + links=( + link_workflow_template_transition_field_delete, + link_workflow_template_transition_field_edit + ), sources=(WorkflowTransitionField,) + ) menu_object.bind_links( links=( link_workflow_instance_detail, @@ -312,17 +389,23 @@ class DocumentStatesApp(MayanAppConfig): ) menu_object.bind_links( links=( - link_setup_workflow_state_action_edit, + link_workflow_template_state_action_edit, link_object_error_list, - link_setup_workflow_state_action_delete, + link_workflow_template_state_action_delete, ), sources=(WorkflowStateAction,) ) menu_secondary.bind_links( - links=(link_setup_workflow_list, link_setup_workflow_create), + links=(link_workflow_template_list, link_workflow_template_create), sources=( - Workflow, 'document_states:setup_workflow_create', - 'document_states:setup_workflow_list' + Workflow, 'document_states:workflow_template_create', + 'document_states:workflow_template_list' + ) + ) + menu_secondary.bind_links( + links=(link_workflow_template_transition_field_create,), + sources=( + WorkflowTransition, ) ) menu_secondary.bind_links( @@ -332,31 +415,31 @@ class DocumentStatesApp(MayanAppConfig): ) ) menu_secondary.bind_links( - links=(link_setup_workflow_state_action_selection,), + links=(link_workflow_template_state_action_selection,), sources=( WorkflowState, ) ) menu_secondary.bind_links( links=( - link_setup_workflow_transition_create, + link_workflow_template_transition_create, ), sources=( WorkflowTransition, - 'document_states:setup_workflow_transition_list', + 'document_states:workflow_template_transition_list', ) ) menu_secondary.bind_links( links=( - link_setup_workflow_state_create, + link_workflow_template_state_create, ), sources=( WorkflowState, - 'document_states:setup_workflow_state_list', + 'document_states:workflow_template_state_list', ) ) - menu_setup.bind_links(links=(link_setup_workflow_list,)) + menu_setup.bind_links(links=(link_workflow_template_list,)) - menu_tools.bind_links(links=(link_tool_launch_all_workflows,)) + menu_tools.bind_links(links=(link_tool_launch_workflows,)) post_save.connect( dispatch_uid='workflows_handler_launch_workflow', @@ -366,6 +449,10 @@ class DocumentStatesApp(MayanAppConfig): # Index updating + post_migrate.connect( + dispatch_uid='workflows_handler_create_workflow_image_cache', + receiver=handler_create_workflow_image_cache, + ) post_save.connect( dispatch_uid='workflows_handler_index_document_save', receiver=handler_index_document, diff --git a/mayan/apps/document_states/fields.py b/mayan/apps/document_states/fields.py new file mode 100644 index 0000000000..75a3e7b958 --- /dev/null +++ b/mayan/apps/document_states/fields.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import, unicode_literals + +from django import forms + +from .widgets import WorkflowImageWidget + + +class WorfklowImageField(forms.fields.Field): + widget = WorkflowImageWidget diff --git a/mayan/apps/document_states/forms.py b/mayan/apps/document_states/forms.py index 971b17bd2d..e2320e2b46 100644 --- a/mayan/apps/document_states/forms.py +++ b/mayan/apps/document_states/forms.py @@ -12,10 +12,10 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.common.forms import DynamicModelForm from .classes import WorkflowAction +from .fields import WorfklowImageField from .models import ( Workflow, WorkflowState, WorkflowStateAction, WorkflowTransition ) -from .widgets import WorkflowImageWidget class WorkflowActionSelectionForm(forms.Form): @@ -165,32 +165,25 @@ WorkflowTransitionTriggerEventRelationshipFormSet = formset_factory( ) -class WorkflowInstanceTransitionForm(forms.Form): +class WorkflowInstanceTransitionSelectForm(forms.Form): def __init__(self, *args, **kwargs): user = kwargs.pop('user') workflow_instance = kwargs.pop('workflow_instance') - super(WorkflowInstanceTransitionForm, self).__init__(*args, **kwargs) + super(WorkflowInstanceTransitionSelectForm, self).__init__(*args, **kwargs) self.fields[ 'transition' ].queryset = workflow_instance.get_transition_choices(_user=user) transition = forms.ModelChoiceField( + help_text=_('Select a transition to execute in the next step.'), label=_('Transition'), queryset=WorkflowTransition.objects.none() ) - comment = forms.CharField( - help_text=_('Optional comment to attach to the transition.'), - label=_('Comment'), required=False, widget=forms.widgets.Textarea( - attrs={ - 'rows': 3 - } - ) - ) class WorkflowPreviewForm(forms.Form): - preview = forms.CharField(widget=WorkflowImageWidget()) + workflow = WorfklowImageField() def __init__(self, *args, **kwargs): instance = kwargs.pop('instance', None) super(WorkflowPreviewForm, self).__init__(*args, **kwargs) - self.fields['preview'].initial = instance + self.fields['workflow'].initial = instance diff --git a/mayan/apps/document_states/handlers.py b/mayan/apps/document_states/handlers.py index a0e3ee6899..8fc226b59b 100644 --- a/mayan/apps/document_states/handlers.py +++ b/mayan/apps/document_states/handlers.py @@ -6,6 +6,22 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.document_indexing.tasks import task_index_document from mayan.apps.events.classes import EventType +from .literals import ( + WORKFLOW_IMAGE_CACHE_STORAGE_INSTANCE_PATH, WORKFLOW_IMAGE_CACHE_NAME +) +from .settings import setting_workflow_image_cache_maximum_size + + +def handler_create_workflow_image_cache(sender, **kwargs): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + Cache.objects.update_or_create( + defaults={ + 'label': _('Workflow images'), + 'storage_instance_path': WORKFLOW_IMAGE_CACHE_STORAGE_INSTANCE_PATH, + 'maximum_size': setting_workflow_image_cache_maximum_size.value, + }, name=WORKFLOW_IMAGE_CACHE_NAME, + ) + def handler_index_document(sender, **kwargs): task_index_document.apply_async( diff --git a/mayan/apps/document_states/html_widgets.py b/mayan/apps/document_states/html_widgets.py new file mode 100644 index 0000000000..58d3da1773 --- /dev/null +++ b/mayan/apps/document_states/html_widgets.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +from django.template.loader import render_to_string +from django.utils.html import format_html_join + + +def widget_transition_events(transition): + return format_html_join( + sep='\n', format_string='
    {}
    ', args_generator=( + ( + transition_trigger.event_type.label, + ) for transition_trigger in transition.trigger_events.all() + ) + ) + + +class WorkflowLogExtraDataWidget(object): + template_name = 'document_states/extra_data.html' + + def render(self, name=None, value=None): + return render_to_string( + template_name=self.template_name, context={ + 'value': value + } + ) diff --git a/mayan/apps/document_states/icons.py b/mayan/apps/document_states/icons.py index ec6aaae232..3115901935 100644 --- a/mayan/apps/document_states/icons.py +++ b/mayan/apps/document_states/icons.py @@ -3,43 +3,42 @@ from __future__ import absolute_import, unicode_literals from mayan.apps.appearance.classes import Icon from mayan.apps.documents.icons import icon_document, icon_document_type - icon_workflow = Icon(driver_name='fontawesome', symbol='sitemap') -icon_document_type_workflow_list = icon_workflow +icon_tool_launch_workflows = icon_workflow -icon_document_workflow_instance_list = Icon( - driver_name='fontawesome', symbol='sitemap' -) -icon_setup_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap') -icon_tool_launch_all_workflows = Icon( - driver_name='fontawesome', symbol='sitemap' -) -icon_workflow_create = Icon( +icon_document_type_workflow_list = icon_workflow +icon_workflow_template_create = Icon( driver_name='fontawesome-dual', primary_symbol='sitemap', secondary_symbol='plus' ) -icon_workflow_delete = Icon(driver_name='fontawesome', symbol='times') -icon_workflow_document_type_list = icon_document_type -icon_workflow_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') -icon_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap') -icon_workflow_preview = Icon(driver_name='fontawesome', symbol='eye') +icon_workflow_template_delete = Icon(driver_name='fontawesome', symbol='times') +icon_workflow_template_document_type_list = icon_document_type +icon_workflow_template_edit = Icon( + driver_name='fontawesome', symbol='pencil-alt' +) +icon_workflow_template_list = icon_workflow +icon_workflow_template_preview = Icon(driver_name='fontawesome', symbol='eye') +# Workflow instances -icon_workflow_instance_detail = Icon(driver_name='fontawesome', symbol='sitemap') +icon_workflow_instance_detail = icon_workflow +icon_workflow_instance_list = icon_workflow icon_workflow_instance_transition = Icon( driver_name='fontawesome', symbol='arrows-alt-h' ) +# Workflow runtime proxies + icon_workflow_runtime_proxy_document_list = icon_document -icon_workflow_runtime_proxy_list = Icon( - driver_name='fontawesome', symbol='sitemap' -) +icon_workflow_runtime_proxy_list = icon_workflow icon_workflow_runtime_proxy_state_document_list = icon_document icon_workflow_runtime_proxy_state_list = Icon( driver_name='fontawesome', symbol='circle' ) +# Workflow transition states + icon_workflow_state_action_delete = Icon( driver_name='fontawesome', symbol='times' ) @@ -57,14 +56,25 @@ icon_workflow_state_create = Icon( icon_workflow_state_delete = Icon(driver_name='fontawesome', symbol='times') icon_workflow_state_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') +# Workflow transition state actions + icon_workflow_state_action = Icon(driver_name='fontawesome', symbol='code') -icon_workflow_state_action_delete = Icon(driver_name='fontawesome', symbol='times') -icon_workflow_state_action_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') +icon_workflow_state_action_delete = Icon( + driver_name='fontawesome', symbol='times' +) +icon_workflow_state_action_edit = Icon( + driver_name='fontawesome', symbol='pencil-alt' +) icon_workflow_state_action_selection = Icon( driver_name='fontawesome-dual', primary_symbol='code', secondary_symbol='plus' ) -icon_workflow_state_action_list = Icon(driver_name='fontawesome', symbol='code') +icon_workflow_state_action_list = Icon( + driver_name='fontawesome', symbol='code' +) + +# Workflow transitions + icon_workflow_transition = Icon( driver_name='fontawesome', symbol='arrows-alt-h' ) @@ -72,10 +82,31 @@ icon_workflow_transition_create = Icon( driver_name='fontawesome-dual', primary_symbol='arrows-alt-h', secondary_symbol='plus' ) -icon_workflow_transition_delete = Icon(driver_name='fontawesome', symbol='times') +icon_workflow_transition_delete = Icon( + driver_name='fontawesome', symbol='times' +) icon_workflow_transition_edit = Icon( driver_name='fontawesome', symbol='pencil-alt' ) + +# Workflow transition fields + +icon_workflow_transition_field = Icon( + driver_name='fontawesome', symbol='table' +) +icon_workflow_transition_field_delete = Icon( + driver_name='fontawesome', symbol='times' +) +icon_workflow_transition_field_edit = Icon( + driver_name='fontawesome', symbol='pencil-alt' +) +icon_workflow_transition_field_create = Icon( + driver_name='fontawesome-dual', primary_symbol='table', + secondary_symbol='plus' +) +icon_workflow_transition_field_list = Icon( + driver_name='fontawesome', symbol='table' +) icon_workflow_transition_triggers = Icon( driver_name='fontawesome', symbol='bolt' ) diff --git a/mayan/apps/document_states/links.py b/mayan/apps/document_states/links.py index 430a283b6d..681123a425 100644 --- a/mayan/apps/document_states/links.py +++ b/mayan/apps/document_states/links.py @@ -12,182 +12,227 @@ from .permissions import ( permission_workflow_view, ) -link_setup_document_type_workflows = Link( +# Workflow templates + +link_document_type_workflow_templates = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_document_type_workflow_list', permissions=(permission_document_type_edit,), text=_('Workflows'), - view='document_states:document_type_workflows', + view='document_states:document_type_workflow_templates', ) -link_setup_workflow_create = Link( - icon_class_path='mayan.apps.document_states.icons.icon_workflow_create', +link_workflow_template_create = Link( + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_create', permissions=(permission_workflow_create,), - text=_('Create workflow'), view='document_states:setup_workflow_create' + text=_('Create workflow'), view='document_states:workflow_template_create' ) -link_setup_workflow_delete = Link( +link_workflow_template_delete = Link( args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_workflow_delete', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_delete', permissions=(permission_workflow_delete,), tags='dangerous', text=_('Delete'), - view='document_states:setup_workflow_delete', + view='document_states:workflow_template_delete', ) -link_setup_workflow_document_types = Link( +link_workflow_template_document_types = Link( args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_workflow_document_type_list', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_document_type_list', permissions=(permission_workflow_edit,), text=_('Document types'), - view='document_states:setup_workflow_document_types', + view='document_states:workflow_template_document_types', ) -link_setup_workflow_edit = Link( +link_workflow_template_edit = Link( args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_workflow_edit', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_edit', permissions=(permission_workflow_edit,), - text=_('Edit'), view='document_states:setup_workflow_edit', + text=_('Edit'), view='document_states:workflow_template_edit', ) -link_setup_workflow_list = Link( - icon_class_path='mayan.apps.document_states.icons.icon_setup_workflow_list', +link_workflow_template_list = Link( + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_list', permissions=(permission_workflow_view,), text=_('Workflows'), - view='document_states:setup_workflow_list' + view='document_states:workflow_template_list' ) -link_setup_workflow_state_action_delete = Link( +link_workflow_template_preview = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_template_preview', + permissions=(permission_workflow_view,), + text=_('Preview'), view='document_states:workflow_template_preview' +) + +# Workflow template state actions + +link_workflow_template_state_action_delete = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_delete', permissions=(permission_workflow_edit,), tags='dangerous', text=_('Delete'), - view='document_states:setup_workflow_state_action_delete', + view='document_states:workflow_template_state_action_delete', ) -link_setup_workflow_state_action_edit = Link( +link_workflow_template_state_action_edit = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_edit', permissions=(permission_workflow_edit,), - text=_('Edit'), view='document_states:setup_workflow_state_action_edit', + text=_('Edit'), view='document_states:workflow_template_state_action_edit', ) -link_setup_workflow_state_action_list = Link( +link_workflow_template_state_action_list = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action_list', permissions=(permission_workflow_edit,), text=_('Actions'), - view='document_states:setup_workflow_state_action_list', + view='document_states:workflow_template_state_action_list', ) -link_setup_workflow_state_action_selection = Link( +link_workflow_template_state_action_selection = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_action', permissions=(permission_workflow_edit,), text=_('Create action'), - view='document_states:setup_workflow_state_action_selection', + view='document_states:workflow_template_state_action_selection', ) -link_setup_workflow_state_create = Link( + +# Workflow template states + +link_workflow_template_state_create = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_create', permissions=(permission_workflow_edit,), text=_('Create state'), - view='document_states:setup_workflow_state_create', + view='document_states:workflow_template_state_create', ) -link_setup_workflow_state_delete = Link( +link_workflow_template_state_delete = Link( args='object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_delete', permissions=(permission_workflow_edit,), tags='dangerous', text=_('Delete'), - view='document_states:setup_workflow_state_delete', + view='document_states:workflow_template_state_delete', ) -link_setup_workflow_state_edit = Link( +link_workflow_template_state_edit = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state_edit', permissions=(permission_workflow_edit,), - text=_('Edit'), view='document_states:setup_workflow_state_edit', + text=_('Edit'), view='document_states:workflow_template_state_edit', ) -link_setup_workflow_states = Link( +link_workflow_template_state_list = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_state', permissions=(permission_workflow_view,), text=_('States'), - view='document_states:setup_workflow_state_list', + view='document_states:workflow_template_state_list', ) -link_setup_workflow_transition_create = Link( + +# Workflow template transitions + +link_workflow_template_transition_create = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_create', permissions=(permission_workflow_edit,), text=_('Create transition'), - view='document_states:setup_workflow_transition_create', + view='document_states:workflow_template_transition_create', ) -link_setup_workflow_transition_delete = Link( +link_workflow_template_transition_delete = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_delete', permissions=(permission_workflow_edit,), tags='dangerous', text=_('Delete'), - view='document_states:setup_workflow_transition_delete', + view='document_states:workflow_template_transition_delete', ) -link_setup_workflow_transition_edit = Link( +link_workflow_template_transition_edit = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_edit', permissions=(permission_workflow_edit,), - text=_('Edit'), view='document_states:setup_workflow_transition_edit', + text=_('Edit'), view='document_states:workflow_template_transition_edit', ) -link_setup_workflow_transitions = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition', - permissions=(permission_workflow_view,), text=_('Transitions'), - view='document_states:setup_workflow_transition_list', -) -link_workflow_transition_events = Link( +link_workflow_template_transition_events = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_triggers', permissions=(permission_workflow_edit,), text=_('Transition triggers'), - view='document_states:setup_workflow_transition_events' + view='document_states:workflow_template_transition_events' ) -link_workflow_preview = Link( +link_workflow_template_transition_list = Link( args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_workflow_preview', - permissions=(permission_workflow_view,), - text=_('Preview'), view='document_states:workflow_preview' + icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition', + permissions=(permission_workflow_view,), text=_('Transitions'), + view='document_states:workflow_template_transition_list', ) -link_tool_launch_all_workflows = Link( - icon_class_path='mayan.apps.document_states.icons.icon_tool_launch_all_workflows', - permissions=(permission_workflow_tools,), - text=_('Launch all workflows'), - view='document_states:tool_launch_all_workflows' + +# Workflow transition fields + +link_workflow_template_transition_field_create = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field', + permissions=(permission_workflow_edit,), text=_('Create field'), + view='document_states:workflow_template_transition_field_create', +) +link_workflow_template_transition_field_delete = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_delete', + permissions=(permission_workflow_edit,), + tags='dangerous', text=_('Delete'), + view='document_states:workflow_template_transition_field_delete', +) +link_workflow_template_transition_field_edit = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_edit', + permissions=(permission_workflow_edit,), + text=_('Edit'), view='document_states:workflow_template_transition_field_edit', +) +link_workflow_template_transition_field_list = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_transition_field_list', + permissions=(permission_workflow_edit,), + text=_('Fields'), + view='document_states:workflow_template_transition_field_list', ) # Document workflow instances -link_document_workflow_instance_list = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_states.icons.icon_document_workflow_instance_list', - permissions=(permission_workflow_view,), text=_('Workflows'), - view='document_states:document_workflow_instance_list', -) + link_workflow_instance_detail = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_detail', permissions=(permission_workflow_view,), text=_('Detail'), view='document_states:workflow_instance_detail', ) +link_workflow_instance_list = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_list', + permissions=(permission_workflow_view,), text=_('Workflows'), + view='document_states:workflow_instance_list', +) link_workflow_instance_transition = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_instance_transition', text=_('Transition'), - view='document_states:workflow_instance_transition', + view='document_states:workflow_instance_transition_selection', ) # Runtime proxies + link_workflow_runtime_proxy_document_list = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_document_list', permissions=(permission_workflow_view,), text=_('Workflow documents'), - view='document_states:workflow_document_list', + view='document_states:workflow_runtime_proxy_document_list', ) link_workflow_runtime_proxy_list = Link( condition=get_cascade_condition( app_label='document_states', model_name='WorkflowRuntimeProxy', object_permission=permission_workflow_view, ), icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_list', - text=_('Workflows'), view='document_states:workflow_list' + text=_('Workflows'), view='document_states:workflow_runtime_proxy_list' ) link_workflow_runtime_proxy_state_document_list = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_state_document_list', permissions=(permission_workflow_view,), text=_('State documents'), - view='document_states:workflow_state_document_list', + view='document_states:workflow_runtime_proxy_state_document_list', ) link_workflow_runtime_proxy_state_list = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_state_list', permissions=(permission_workflow_view,), - text=_('States'), view='document_states:workflow_state_list', + text=_('States'), view='document_states:workflow_runtime_proxy_state_list', +) + +# Tools + +link_tool_launch_workflows = Link( + icon_class_path='mayan.apps.document_states.icons.icon_tool_launch_workflows', + permissions=(permission_workflow_tools,), + text=_('Launch all workflows'), + view='document_states:tool_launch_workflows' ) diff --git a/mayan/apps/document_states/literals.py b/mayan/apps/document_states/literals.py index 79fc51f828..ee4d5a085e 100644 --- a/mayan/apps/document_states/literals.py +++ b/mayan/apps/document_states/literals.py @@ -2,6 +2,29 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ +DEFAULT_WORKFLOW_IMAGE_CACHE_MAXIMUM_SIZE = 50 * 2 ** 20 # 50 Megabytes + +FIELD_TYPE_CHOICE_CHAR = 1 +FIELD_TYPE_CHOICE_INTEGER = 2 +FIELD_TYPE_CHOICES = ( + (FIELD_TYPE_CHOICE_CHAR, _('Character')), + (FIELD_TYPE_CHOICE_INTEGER, _('Number (Integer)')), +) + +FIELD_TYPE_MAPPING = { + FIELD_TYPE_CHOICE_CHAR: 'django.forms.CharField', + FIELD_TYPE_CHOICE_INTEGER: 'django.forms.IntegerField', +} + +WIDGET_CLASS_TEXTAREA = 1 +WIDGET_CLASS_CHOICES = ( + (WIDGET_CLASS_TEXTAREA, _('Text area')), +) + +WIDGET_CLASS_MAPPING = { + WIDGET_CLASS_TEXTAREA: 'django.forms.widgets.Textarea', +} + WORKFLOW_ACTION_ON_ENTRY = 1 WORKFLOW_ACTION_ON_EXIT = 2 @@ -9,3 +32,6 @@ WORKFLOW_ACTION_WHEN_CHOICES = ( (WORKFLOW_ACTION_ON_ENTRY, _('On entry')), (WORKFLOW_ACTION_ON_EXIT, _('On exit')), ) +WORKFLOW_IMAGE_CACHE_NAME = 'workflow_images' +WORKFLOW_IMAGE_CACHE_STORAGE_INSTANCE_PATH = 'mayan.apps.document_states.storages.storage_workflowimagecache' +WORKFLOW_IMAGE_TASK_TIMEOUT = 60 diff --git a/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.mo index fa29ee9a0e..ecc2f1f09e 100644 Binary files a/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.po index aba7f54c4f..1ea8bec5b5 100644 --- a/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Yaman Sanobar \n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "لا شيء" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "مستخدم" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Additional details" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "تعليق" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "النوع" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "الوثائق" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "العنوان" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "مفعل" @@ -115,230 +125,314 @@ msgstr "لا" msgid "Yes" msgstr "نعم" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "حذف" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "تحرير" -#: links.py:67 -msgid "Actions" -msgstr "الإجراءات" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "الإجراءات" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Event type" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Event type" + +#: models.py:522 msgid "Document" msgstr "" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "تعليق" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "ارسال" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Select" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.mo index 35398ef268..08c41924a6 100644 Binary files a/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po index 0915ff68a0..0cc48ea021 100644 --- a/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-22 13:11+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-04 17:34+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -18,69 +18,78 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Работни потоци" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Текущо състояние на работен поток" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Информирай за текущото състояние на избрания работен поток" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Информирай за стойността на завършване на текущото състояние на избрания работен поток" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Няма" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Сегашно състояние" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Потребител" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Последен преход" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Дата и час" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Завършване" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Преход" +#: apps.py:229 +msgid "Additional details" +msgstr "Допълнителни детайли" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Коментар" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Кога?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Тип на действието" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Тригери" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Тип" + +#: apps.py:294 +msgid "Widget" +msgstr "Управляващ елемент" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Документи" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Действия за състояние на работния поток" @@ -100,11 +109,12 @@ msgstr "Действие" msgid "Namespace" msgstr "Именно пространство" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Етикет" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Активиран" @@ -116,230 +126,314 @@ msgstr "Не" msgid "Yes" msgstr "Да" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Незадължителен коментар за прикачване към прехода." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "Изберете преход за изпълнение на следващ етап." -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Преход" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "Изображения на работния процес" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Задействане на събитието: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Създайте работен поток" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Изтрийте" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Типове документи" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Редактиране" -#: links.py:67 -msgid "Actions" -msgstr "Действия" - -#: links.py:73 -msgid "Create action" -msgstr "Създайте действие" - -#: links.py:79 -msgid "Create state" -msgstr "Създаване на състояние" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Състояния" - -#: links.py:104 -msgid "Create transition" -msgstr "Създаване на преход" - -#: links.py:123 -msgid "Transitions" -msgstr "Преходи" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Тригери на прехода" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Предварителен преглед" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Стартирайте всички работни потоци" +#: links.py:78 +msgid "Actions" +msgstr "Действия" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Създайте действие" + +#: links.py:93 +msgid "Create state" +msgstr "Създаване на състояние" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Състояния" + +#: links.py:121 +msgid "Create transition" +msgstr "Създаване на преход" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Тригери на прехода" + +#: links.py:147 +msgid "Transitions" +msgstr "Преходи" + +#: links.py:156 +msgid "Create field" +msgstr "Създаване на поле" + +#: links.py:176 +msgid "Fields" +msgstr "Полета" + +#: links.py:186 msgid "Detail" msgstr "Подробности" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Документи в работния поток" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Документи в състоянието" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Стартирайте всички работни потоци" + +#: literals.py:10 +msgid "Character" +msgstr "Знак" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "Номер (цяло число)" + +#: literals.py:21 +msgid "Text area" +msgstr "Текстова област" + +#: literals.py:32 msgid "On entry" msgstr "При влизане" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "На излизане" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Тази стойност ще бъде използвана от други приложения за препратка към този работен поток. Може да съдържа само букви, цифри и подчертавания." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Вътрешно име" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Работен поток" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Начално състояние" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Изберете дали това ще бъде състоянието, в което искате да започне работният поток. Само едно състояние може да бъде начално състояние." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "Състоянието, в което ще започне работният процес. Само едно състояние може да бъде първоначално състояние." -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Начално" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Въведете процента на завършеност, който това състояние представлява по отношение на работния поток. Използвайте числа без знака за процент." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "Процентът на завършеност, който това състояние представлява по отношение на работния процес. Използвайте числа без знака за процент." -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Състояние на работния поток" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Състояния на работния поток" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Прост идентификатор за това действие." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "В кой момент на състоянието това действие ще се извърши" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "В кой момент на състоянието ще се извърши това действие." -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Кога" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Пунктираният Python път към класа на действието на работния поток, който трябва да се изпълни." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Входна пътека за действие" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Входни данни за действия" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Действие на състояние на работния поток" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "Неизвестен тип действие" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Състояние на изхода" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Състояние на местоназначението" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Преход на работния поток" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Преходи на работния поток" -#: models.py:376 -msgid "Event type" -msgstr "Тип на събитието" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "Името, което ще се използва за идентифициране на това поле в други части на системата на работния процес." -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "Името на полето, което ще бъде показано в потребителския интерфейс." + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "Незадължително съобщение, което ще помогне на потребителите да разберат по-добре целта на полето и данните, които да предоставят." + +#: models.py:463 +msgid "Help text" +msgstr "Помощен текст" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "Дали това поле трябва да бъде попълнено или не, за да продължите." + +#: models.py:468 +msgid "Required" +msgstr "Задължително" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "Незадължителен клас за промяна на представянето по подразбиране на полето." + +#: models.py:473 +msgid "Widget class" +msgstr "Клас на управляващ елемент" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "Група от ключови аргументи за персонализиране на управляващия елемент. Използвайте YAML формат." + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "Аргументи на ключови думи на управляващия елемент" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Събитие задействащо прехода на работния поток" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Събития задействащи прехода на работния поток" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Тип на събитието" + +#: models.py:522 msgid "Document" msgstr "Документ" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "Контекст" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Копие на работния поток" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Копия на работния поток" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Дата и час" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Коментар" + +#: models.py:673 +msgid "Extra data" +msgstr "Допълнителни данни" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Запис в дневника на работния поток" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Записи в дневника на работния поток" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Не е валиден избор на преход." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Прокси за изпълнение на работния поток" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Прокси сървъри за изпълнение на работния поток" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Прокси сървър за състояние на работния поток" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Прокси сървъри за състояние на работния поток" @@ -375,6 +469,14 @@ msgstr "Изпълнете инструменти за работния пото msgid "Document states" msgstr "Състояния на документа" +#: queues.py:12 +msgid "Document states fast" +msgstr "Бързо избиране състояния на документа" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "Генериране на визуализации на работния процес" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Основен ключ на типа документ, който трябва да се добави." @@ -413,318 +515,386 @@ msgstr "Разделен със запетаи списък на основни msgid "Primary key of the transition to be added." msgstr "Основен ключ на прехода, който трябва да бъде добавен." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "Прагът, при който WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND ще започне да изтрива най-старите файлове за кеш на изображения на работния процес. Посочете размера в байтове." + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "Време в секунди, за което браузърът трябва да кешира предоставените изображения на работния процес. По подразбиране 31559626 секунди съответстват на 1 година." + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "Път към подклас Съхранение, който да се използва при съхранение на кешираните файлове с изображения на работния процес." + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "Аргументи предавани към WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Визуализация на работния поток" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Задайте работни потоци към типа на документа, за да може този документ да изпълнява тези работни потоци." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "За този документ няма работен поток" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Работни потоци за документ: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Този изглед ще покаже промените в състоянието при преминаване на инстанция на работен поток." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Няма подробности за това копие на работния поток" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Подробности за работния поток: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Документът "%s" е преминал успешно" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Подаване" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Направете преход за работния процес: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "Изпълнете преход "%(transition)s" за работен поток: %(workflow)s" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Незадължителен коментар за прикачване към прехода." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Изберете" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "Изберете преход за работен поток: %s" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Свържете работен поток с някои типове документи и документи от тези типове ще бъдат изброени в този изглед." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Няма документи, изпълняващи този работен поток" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Документи с работния поток: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Създайте някои работни потоци и ги свържете с тип документ. Тук ще бъдат показани активни работни процеси и документите, за които се изпълняват." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Няма работни потоци" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "В това състояние няма документи" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Документи в работния поток "%s", състояние "%s"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Създайте състояния и ги свържете с помощта на преходи." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Този работен поток няма състояние" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Състояния на работния поток: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Налични работни потоци" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Работни потоци прикачени към този тип документ" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "Премахването на работен поток от типа документ също ще премахне всички работещи копия на този работен поток." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Работни потоци прикачени към този тип документ: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Работните потоци съхраняват серия състояния и следят текущото състояние на документа. Преходите се използват за промяна на текущото състояние в ново." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Не са дефинирани работни потоци" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Изтриване на работния поток: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Редактиране на работния поток: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Налични типове документи" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Типове документи прикачени към този работен поток" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Премахването на тип документ от работен поток също ще премахне всички работещи копия на този работен поток за документи от току-що премахнатия тип документ." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Типове документи присвоили работния поток: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Създайте действие за състояние на работен поток "%s"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Изтрийте действие за състояние на работен поток: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Редактиране на действие за състояние на работен поток: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Действията за състояние на работен поток са макроси, които се изпълняват, когато документите влизат или напускат състоянието, в което пребивават." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "За това състояние на работния поток няма действия" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Действия за състояние на работния поток: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Избор на ново действие за състояние на работен поток" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Създайте състояния за работен поток: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Изтриване на състояние на работен поток: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Редактиране на състояние на работен поток: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Този работен поток няма състояния" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Създайте преходи за работния поток: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Изтриване на преход на работния поток: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Редактиране на преход на работния поток: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Създайте преход и го използвайте за преместване на работен поток от едно състояние в друго." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Този работен поток няма преходи" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Преходи на работния поток: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Грешка при актуализиране на събитията задействащи прехода на работния поток; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Събитията задействащи прехода на работния поток са актуализирани успешно" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Тригерите са събития, които предизвикват този преход да се изпълни автоматично." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Събития задействащи прехода на работния поток за: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "Създайте поле за преход на работния поток: %s" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "Изтрийте полето за преход на работния поток: %s" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "Редактиране на поле за преход на работния поток: %s" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "Полетата за преход на работния поток позволяват добавяне на данни в контекста на работния поток. След това тези допълнителни данни за контекста могат да бъдат използвани от други елементи на системата на работния поток, като действията на състоянието на работния поток." + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "Няма полета за този преход на работния поток" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "Полета за преход на работния поток: %s" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Налични работни потоци" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Работни потоци прикачени към този тип документ" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "Премахването на работен поток от типа документ също ще премахне всички работещи копия на този работен поток." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Работни потоци прикачени към този тип документ: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Работните потоци съхраняват серия състояния и следят текущото състояние на документа. Преходите се използват за промяна на текущото състояние в ново." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Не са дефинирани работни потоци" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Изтриване на работния поток: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Редактиране на работния поток: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Налични типове документи" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Типове документи прикачени към този работен поток" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Премахването на тип документ от работен поток също ще премахне всички работещи копия на този работен поток за документи от току-що премахнатия тип документ." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Типове документи присвоили работния поток: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Визуализация на: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Пусни всички работни потоци?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Това ще пусне всички работни потоци, създадени след като вече са качени документи." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Пускането на работния поток е поставено в опашката успешно." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Визуализация на: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Визуализация на работния поток" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Етикет на документа" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "Новият етикет, който ще бъде прикачен към документа. Може да бъде низ или шаблон." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Описание на документа" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "Новото описание, което трябва да бъде прикачено към документа. Може да бъде низ или шаблон." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Променяне свойствата на документа" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "Промяна на свойствата на документа" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Грешка в шаблона на етикета на документа: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Грешка в шаблона за описание на документа: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Може да бъде IP адрес, домейн или шаблон. Шаблоните получават запис в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя характеристиките „workflow_instance“, „datetime“, „transition“, „user“ и „comment“." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Изтичане на времето" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Време за секунди за изчакване на отговор." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "Време в секунди за изчакване на отговор. Може да бъде статична стойност или шаблон." -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Полезен товар" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Документ JSON за включване в заявката. Може да бъде и шаблон, който връща документ JSON. Шаблоните получават запис в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя характеристиките „workflow_instance“, „datetime“, „transition“, „user“ и „comment“." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Име на потребител" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Потребителско име, което да използвате за отправяне на заявката с HTTP Basic Auth. Може да бъде статична стойност или шаблон. Шаблоните получават инстанцията за въвеждане в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя атрибутите „workflow_instance“, „timetime“, „transition“, „user“ и „comment“." + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Парола" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Парола, която да използвате за отправяне на заявката с HTTP Basic Auth. Може да бъде статична стойност или шаблон. Шаблоните получават инстанцията за въвеждане в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя атрибутите „workflow_instance“, „datetime“, „transition“, „user“ и „comment“." + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "Заглавки" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "Заглавки за изпращане с HTTP заявката. Трябва да са във формат JSON. Може да бъдат статична стойност или шаблон. Шаблоните получават инстанцията за въвеждане в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя атрибутите „workflow_instance“, „datetime“, „transition“, „user“ и „comment“." + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Изпълнете POST заявка" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Грешка в шаблона на URL: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "%(field_name)s JSON грешка: %(exception)s" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Грешка в шаблона на полезния товар: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Грешка в JSON за полезен товар: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "%(field_name)s грешка в шаблона: %(exception)s" diff --git a/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.mo index 9d3b3ce83b..7bf570401b 100644 Binary files a/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.po index a71daad796..090deda295 100644 --- a/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/bs_BA/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Atdhe Tabaku \n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Radni tok" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Trenutno stanje toka posla" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Vratite trenutno stanje odabranog toka posla" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Vratite završnu vrijednost trenutnog stanja izabranog toka posla" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nijedno" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Trenutna stanje" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Korisnik" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Poslednja tranzicija" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum i vreme" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Završetak" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Tranzicija" +#: apps.py:229 +msgid "Additional details" +msgstr "Dodatni detalji" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Kada?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Vrsta akcije" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Uzroci" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tip" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenti" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Akcije stanja rada" @@ -100,11 +109,12 @@ msgstr "Akcija" msgid "Namespace" msgstr "Imenovani prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Labela" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Omogućeno" @@ -116,230 +126,314 @@ msgstr "Ne" msgid "Yes" msgstr "Da" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Tranzicija" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Uzroci događaja: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Kreirati radni tok" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Obriši" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipovi dokumenta" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Urediti" -#: links.py:67 -msgid "Actions" -msgstr "Akcije" - -#: links.py:73 -msgid "Create action" -msgstr "Stvorite akciju" - -#: links.py:79 -msgid "Create state" -msgstr "Kreiraj stanje" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Stanje" - -#: links.py:104 -msgid "Create transition" -msgstr "Kreirajte tranziciju" - -#: links.py:123 -msgid "Transitions" -msgstr "Tranzicije" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Uzroci tranzicije" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Pregled" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Pokrenite sve tokove rada" +#: links.py:78 +msgid "Actions" +msgstr "Akcije" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Stvorite akciju" + +#: links.py:93 +msgid "Create state" +msgstr "Kreiraj stanje" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Stanje" + +#: links.py:121 +msgid "Create transition" +msgstr "Kreirajte tranziciju" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Uzroci tranzicije" + +#: links.py:147 +msgid "Transitions" +msgstr "Tranzicije" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detalji" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Dokumenti radnog toka" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Stanje dokumenta" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Pokrenite sve tokove rada" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Prilikom ulaska" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Na izlazu" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Ova vrijednost će koristiti druge aplikacije za upućivanje na ovaj tok posla. Može sadržavati samo slova, brojeve i podvučice." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Interno ime" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Radni tok" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Početno stanje" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Izaberite da li će ovo biti stanje s kojom želite da radni tok započne. Samo jedno stanje može biti početno stanje." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Inicijalno" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Unesite procenat završetka koji ovo stanje predstavlja u odnosu na radni tok. Koristite brojeve bez znakova procenata." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Stanje radnog toka" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Stanje Radnog toka" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "U kojem momentu stanje ova akcija će se izvršiti" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Kada" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Podešena staza Python do klase akcije radnog toka." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Putanja za ulaznu akciju" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Podaci o ulaznoj akciji" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Stanje akcije radnog toka" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Stanje porekla" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Stanje destinacije" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Prelazak na radni tok" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Prelazak na radni tok" -#: models.py:376 -msgid "Event type" -msgstr "Tip događaja" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Obavezno" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Događaji tranzicije radnog toka" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Događaji tranzicije radnog toka" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tip događaja" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Primjer posla" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Primeri toka posla" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Datum i vrijeme" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Unos tragova u procesu toka posla" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Unos tragova u procesu toka posla" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Izbor tranzicije nije validan." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Vrijeme radnog toka proxy" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Vrijeme radnog toka proxies" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Proxy za izvršavanje radnog procesa" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Radni proksi za izvršavanje posla" @@ -375,6 +469,14 @@ msgstr "Izvodi alate toka posla" msgid "Document states" msgstr "Stanje dokumenata" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Primarni ključ vrste dokumenta koji treba dodati." @@ -413,318 +515,386 @@ msgstr "Lista odvojenih primarnih ključeva tipova dokumenata na koje se taj rad msgid "Primary key of the transition to be added." msgstr "Primarni ključ tranzicije koji treba dodati." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Radni tokovi za dokument: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detail o radnom toku: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Dokument \"%s\" uspešno prelazi" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Podnijeti" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Da li prelazak za radni tok: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Odabrati" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Dokumenti sa radnim tokovima: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Dokumenti u toku posla \"%s\", stanje \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Stanje toka posla: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Dostupni tipovi dokumenta" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tipovi dokumenata dodeljeni ovim radnim tokovima" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Uklanjanje tipa dokumenta iz radnog toka će takođe ukloniti sve pokrenute instance tog toka posla za dokumente tipa dokumenta koji je upravo uklonjen." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Tipovi dokumenata dodeljeni ovim radnim tokovima: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Kreirati \"%s\" radnu akciju" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Izbrišite akciju stanja radnog toka: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Izmenite akciju stanja toka posla: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Akcije za stanje toka posla: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Novi posao selekcije posla" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Kreirajte stanja za radni tok: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Kreiranje prelazaka za radni tok: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Prelazak na radni tok: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Greška u ažuriranju događaja pokretanja tranzicije tokom procesa; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Događaji o pokretanju procesa prenosa posla uspešno su ažurirani" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Događaji koji pokreću tranzistorski tok posla za: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Dostupni tipovi dokumenta" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tipovi dokumenata dodeljeni ovim radnim tokovima" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Uklanjanje tipa dokumenta iz radnog toka će takođe ukloniti sve pokrenute instance tog toka posla za dokumente tipa dokumenta koji je upravo uklonjen." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Tipovi dokumenata dodeljeni ovim radnim tokovima: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Pregled od: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Pokrenite sve tokove posla?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Lansiranje toka posla je u redu." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Pregled od: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Može biti IP adresa, domen ili šablon. Šabloni primaju primere prijavljivanja dnevnika rada kao dio njihovog konteksta pomoću varijable \"entri_log\". \"Entri_log\" zauzvrat pruža \"vorkflov_instance\", \"datetime\", \"transition\", \"user\" i \"comment\" atribute." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Timeout" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Vreme u sekundama za odgovor." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Payload" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "JSON dokument koji treba uključiti u zahtev. Može biti i šablon koji vraća JSON dokument. Šabloni primaju primere prijavljivanja dnevnika rada kao dio njihovog konteksta pomoću varijable \"entri_log\". \"Entri_log\" zauzvrat pruža \"vorkflov_instance\", \"datetime\", \"transition\", \"user\" i \"comment\" atribute." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Korisničko ime" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Lozinka" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Izvedite POST zahtev" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Greška URL adrese: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Greška pri predloživanju korpe: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "JSON greška u korisnoj grupi: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.mo index 68b0d6b4ef..74410e13aa 100644 Binary files a/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po index cf7d141bfa..14568b947c 100644 --- a/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Michal Švábík \n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "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:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Workfows" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Aktuální stav workflow" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Vrátí aktuální stav vybraného workflow" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Vraťte hodnotu dokončení aktuálního stavu vybraného workflow" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "žádný" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Aktuální stav" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Uživatel" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Poslední krok" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum a čas" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Dokončení" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Krok" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentář" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Když?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Typ akce" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Spouštěče" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Typ" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenty" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Akce stavu workflow" @@ -100,11 +109,12 @@ msgstr "Akce" msgid "Namespace" msgstr "Jmenný prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Označení" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Povoleno" @@ -116,230 +126,314 @@ msgstr "Ne" msgid "Yes" msgstr "Ano" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Volitelný komentář pro připojení ke krok." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Krok" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Spouštěč událostí: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Vytvořte workflow" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Odstranit" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Typy dokumentů" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editovat" -#: links.py:67 -msgid "Actions" -msgstr "Akce" - -#: links.py:73 -msgid "Create action" -msgstr "Vytvořit akci" - -#: links.py:79 -msgid "Create state" -msgstr "Vytvořit stav" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Stavy" - -#: links.py:104 -msgid "Create transition" -msgstr "Vytvořit krok" - -#: links.py:123 -msgid "Transitions" -msgstr "Kroky" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Spouštěče kroku" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Náhled" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Spusťte všechny workflow" +#: links.py:78 +msgid "Actions" +msgstr "Akce" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Vytvořit akci" + +#: links.py:93 +msgid "Create state" +msgstr "Vytvořit stav" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Stavy" + +#: links.py:121 +msgid "Create transition" +msgstr "Vytvořit krok" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Spouštěče kroku" + +#: links.py:147 +msgid "Transitions" +msgstr "Kroky" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detail" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Workflow dokumentů" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Stav dokumentů" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Spusťte všechny workflow" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Při vstupu" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Na výstupu" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Tuto hodnotu použijí jiné aplikace k odkazu na toto workflow. Může obsahovat pouze písmena, čísla a podtržítka." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Vnitřní název" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Počáteční stav" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Vyberte, zda se jedná o stav, ve kterém chcete zahájit workflow. Počáteční stav může být pouze jeden." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Počáteční" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Zadejte procento dokončení, které tento stav představuje ve vztahu k workflow. Používejte čísla bez znaku procenta." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Stav workflow" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Stavy workflow" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Jednoduchý identifikátor této akce." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "V jakém okamžiku stavu se tato akce provede" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Když" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Tečkovaná cesta Python ke třídě akcí pracovního postupu, kterou chcete provést." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Cesta akce vstupu " -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Vstupní data akce " -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Akce stavu workflow" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Původní stav" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Cílový stav" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Krok workflow" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Krokz workflow" -#: models.py:376 -msgid "Event type" -msgstr "Typ události" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Požadované" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Spouštěcí událost kroku workflow" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Spouštějí události kroků workflow" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Typ události" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Instance workflow" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Instance workflow" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Datum, čas" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentář" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Záznam protokolu instance workflow" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Položky protokolu instance workflow" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Toto není platná volba kroku." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Workflow runtime proxy" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Workflow runtime proxies" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Workflow state runtime proxy" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Workflow state runtime proxies" @@ -375,6 +469,14 @@ msgstr "Spusťte nástroje workflow" msgid "Document states" msgstr "Stavy dokumentů" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Primární klíč typu dokumentu, který se má přidat." @@ -413,318 +515,386 @@ msgstr "Čárkami oddělený seznam primárních klíčů typu dokumentu, ke kte msgid "Primary key of the transition to be added." msgstr "Primární klíč kroku, který má být přidán." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Náhled workflow" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Přiřaďte workflow typu dokumentu tohoto dokumentu, aby tento dokument provedl tato workflow." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Pro tento dokument neexistují žádná workflow" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Workflows pro dokument: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Toto zobrazení zobrazí změny stavu při kroku instance workflow." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Pro tuto instanci workflow neexistují žádné podrobnosti" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detail workflow%(workflow)su: " -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Dokument „%s“ úspěšně přešel na další krok" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Odeslat" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Proveďte krok pro workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Volitelný komentář pro připojení ke krok." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Přiřadit workflow k některým typům dokumentů a dokumenty těchto typů budou uvedeny v tomto zobrazení." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "V tomto workflow nejsou žádné dokumenty" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Dokumenty s workflow: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Vytvořte workflow a přiřaďte je k typu dokumentu. Zde budou zobrazeny aktivní workflow a dokumenty." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Bez workflow" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "V tomto stavu workflow nejsou žádné dokumenty" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Dokumenty ve workflow \"%s\", stav \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Vytvářejte stavy a propojujte je pomocí kroků." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Toto workflow nemá žádný stav" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Stavy workflow: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Dostupné workflow" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Workflow přiřazené k tomuto typu dokumentu" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "Odstranění workflow z typu dokumentu odstraní také všechny spuštěné instance tohoto workflow." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Workflow přiřazené typu dokumentu: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Workflow ukládají řadu stavů a sledují aktuální stav dokumentu. Kroky se používají ke změně současného stavu na nový." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Nebyly definovány žádné Workflow " - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Odstranit workflow : %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Upravit workflow : %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Dostupné typy dokumentů" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tomuto workflow byly přiřazeny typy dokumentů" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Odstranění typu dokumentu zworkflow odstraní také všechny spuštěné instance tohoto workflow u dokumentů právě odebraného typu dokumentu." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Typy dokumentů přiřazené k workflow: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Vytvořte akci workflow „%s“" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Odstranit akci stavu workflow: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Upravit akci stavu workflow: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Akce stavu workflow jsou makra, která se provedou, když dokumenty vstoupí nebo opustí stav, ve kterém se nacházejí." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Pro tento stav workflow neexistují žádné akce" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Akce pro stav pracovního postupu: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Výběr akce stavu nového workflow" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Vytvořit stavy pro workflow: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Odstranit stav workflow: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Upravit stav workflow: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Toto workflow nemá žádné stavy" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Vytvořit kroky pro workflow: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Odstranit krok workflow: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Upravit krok workflow: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Vytvořte krok a použijte jej k přesunutí workflow z jednoho stavu do druhého." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Toto workflow nemá žádné krok" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Kroky workflow: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Při aktualizaci spouštěcích událostí kroku workflow došlo k chybě; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Události spouštění kroku workflow byly úspěšně aktualizovány" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Spouštěče jsou události, které způsobí automatické spuštění tohoto kroku." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Spouštěcí události kroku workflow pro: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Dostupné workflow" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Workflow přiřazené k tomuto typu dokumentu" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "Odstranění workflow z typu dokumentu odstraní také všechny spuštěné instance tohoto workflow." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Workflow přiřazené typu dokumentu: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Workflow ukládají řadu stavů a sledují aktuální stav dokumentu. Kroky se používají ke změně současného stavu na nový." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Nebyly definovány žádné Workflow " + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Odstranit workflow : %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Upravit workflow : %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Dostupné typy dokumentů" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tomuto workflow byly přiřazeny typy dokumentů" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Odstranění typu dokumentu zworkflow odstraní také všechny spuštěné instance tohoto workflow u dokumentů právě odebraného typu dokumentu." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Typy dokumentů přiřazené k workflow: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Náhled: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Spusťte všechny workflow?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Tím se spustí všechny workflow vytvořené po nahrání dokumentů." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Spuštění workflow bylo úspěšně zařazeno do fronty." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Náhled: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Náhled workflow" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Štítek dokumentu" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "Nový štítek, který má být dokumentu přiřazen. Může to být řetězec nebo šablona." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Popis dokumentu" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "Nový popis, který má být dokumentu přiřazen. Může to být řetězec nebo šablona." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Upravte vlastnosti dokumentu" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Chyba šablony štítku dokumentu: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Chyba šablony popisu dokumentu: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Může to být adresa IP, doména nebo šablona. Šablony přijímají instanci záznamu workflow jako součást svého kontextu prostřednictvím proměnné \"entry_log\".\"Entry_log\" zase poskytuje atributy \"workflow_instance\", \"datetime\", \"transition\", \"user\" a \"comment\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Časový limit" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Doba čekání v sekundách na odpověď." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Payload" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Dokument JSON, který má být součástí žádosti. Může to být také šablona, která vrací dokument JSON. Šablony přijímají instanci záznamu workflow jako součást svého kontextu prostřednictvím proměnné \"entry_log\".\"Entry_log\" zase poskytuje atributy \"workflow_instance\", \"datetime\", \"transition\", \"user\" a \"comment\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Uživatelské jméno" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Heslo" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Provést POST požadavek" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Chyba šablony adresy URL: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Payload template error: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.mo index f4c3c64de6..3ae9db9f62 100644 Binary files a/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.po index 2f7e8d9e3c..0d2edb6322 100644 --- a/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Rasmus Kierudsen \n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ingen" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Bruger" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Type" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenter" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etiket" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -115,230 +125,314 @@ msgstr "Nej" msgid "Yes" msgstr "Ja" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Slet" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Dokumenttyper" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Rediger" -#: links.py:67 -msgid "Actions" -msgstr "" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" msgstr "" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "" + +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Indsend" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Brugernavn" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Password" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.mo index ee6c49423e..11225c2126 100644 Binary files a/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.po index b6e008353c..f6b2125517 100644 --- a/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/de_DE/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Mathias Behrle \n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,69 +21,78 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Workflows" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Aktueller Status eines Workflows" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Den aktuellen Status des ausgewählten Workflows zurückgeben" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Den Ergebniswert des aktuellen Status des ausgewählten Workflows zurückgeben" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Keiner" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Aktueller Status" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Benutzer" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Letzter Übergang" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum und Zeit" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Fertigstellung" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Übergang" +#: apps.py:229 +msgid "Additional details" +msgstr "Zusätzliche Details" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Kommentar" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Wann" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Aktionstyp" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Trigger" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Typ" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Index bearbeitet" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Statusaktionen von Workflows" @@ -103,11 +112,12 @@ msgstr "Aktion" msgid "Namespace" msgstr "Namensraum" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Bezeichnung" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Aktiviert" @@ -119,230 +129,314 @@ msgstr "Nein" msgid "Yes" msgstr "Ja" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Optionaler Kommentar, der an den Übergang angehängt werden soll." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Übergang" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Ereignistrigger %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Workflow erstellen" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Löschen" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Dokumententypen" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Bearbeiten" -#: links.py:67 -msgid "Actions" -msgstr "Aktionen" - -#: links.py:73 -msgid "Create action" -msgstr "Aktion erstellen" - -#: links.py:79 -msgid "Create state" -msgstr "Status erstellen" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Status" - -#: links.py:104 -msgid "Create transition" -msgstr "Übergang erstellen" - -#: links.py:123 -msgid "Transitions" -msgstr "Übergänge" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Übergangstrigger" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Vorschau" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Alle Workflows starten" +#: links.py:78 +msgid "Actions" +msgstr "Aktionen" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Aktion erstellen" + +#: links.py:93 +msgid "Create state" +msgstr "Status erstellen" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Status" + +#: links.py:121 +msgid "Create transition" +msgstr "Übergang erstellen" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Übergangstrigger" + +#: links.py:147 +msgid "Transitions" +msgstr "Übergänge" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detail" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Workflow-Dokumente" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Dokumentenstatus" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Alle Workflows starten" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Beim Betreten" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Beim Verlassen" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Dieser Wert wird von anderen Programmteilen verwendet, um sich auf diesen Workflow zu beziehen. Es sind nur Buchstaben, Zahlen und Unterstriche erlaubt." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Interner Name" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Initialstatus" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Diesen Status markieren, wenn der Workflow damit starten soll. Nur ein Status kann initial sein." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Initial" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Ermöglicht den Eintrag einer Zahl (ohne Prozentzeichen), die den Stand der Fertigstellung in Bezug auf den Workflow angibt." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Workflow Status" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Workflow Status" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Ein einfacher Identifikator für diese Aktion." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "Zu welchem Zeitpunkt des Status diese Aktion ausgeführt wird" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Wann" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Der punktierte Pythonpfad zu der Workflowaktionsklasse, die ausgeführt werden soll." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Pfad der Eingangsaktion" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Daten der Eingangsaktion" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Workflowstatusaktion" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Herkunftsstatus" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Zielstatus" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Workflow Übergang" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Workflow Übergänge" -#: models.py:376 -msgid "Event type" -msgstr "Ereignistyp" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Erforderlich" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Workflowübergangstriggerereignis" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Workflowübergangstriggerereignisse" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Ereignistyp" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Workflow" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Workflows" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Zeit" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Kommentar" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Workflow Logeintrag" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Workflow Logeinträge" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Kein gültiger Übergang." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Workflow-Laufzeitproxy" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Workflow-Laufzeit-Proxies" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Laufzeitproxy für Workflowstatus" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Runtime-Proxies für Workflowstatus" @@ -378,6 +472,14 @@ msgstr "Werkzeuge für Workflow ausführen" msgid "Document states" msgstr "Status" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Primärschlüssel des hinzuzufügenden Dokumententyps." @@ -416,318 +518,386 @@ msgstr "Kommagetrennte Liste von Primärschlüsseln von Dokumententypen, mit den msgid "Primary key of the transition to be added." msgstr "Primärschlüssel des hinzuzufügenden Übergangs." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Workflow-Vorschau" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Weisen Sie Workflows zu dem Dokumententyp dieses Dokuments zu, damit sie für dieses Dokument durchgeführt werden." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Es sind keine Workflows für dieses Dokument vorhanden" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Workflows für Dokument %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "In dieser Ansicht werden die Statusänderungen beim Übergang einer Workflow-Instanz angezeigt." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Zu dieser Workflow-Instanz sind keine Details vorhanden" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detail für Workflow %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Übergang von Dokument \"%s\" erfolgreich" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Absenden" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Übergang für Workflow %s durchführen" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Optionaler Kommentar, der an den Übergang angehängt werden soll." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Auswählen" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Verknüpfen Sie einen Workflow mit Dokumententypen, um die Dokumente dieser Typen hier anzuzeigen." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Keine Dokumente führen diesen Workflow aus" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Dokumente mit Workflow %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Workflows erstellen und mit einem Dokumententyp verknüpfen. Aktive Workflows werden hier angezeigt und die Dokumente, für die sie ausgeführt werden." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Keine Workflows vorhanden" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "In diesem Workflow-Status befinden sich keine Dokumente" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Dokumente im Workflow \"%s\" mit Status \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Status erstellen und durch Übergänge verbinden." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Kein Status für diesen Workflow definiert" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Status für Workflow %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Verfügbare Workflows" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Diesem Dokumententyp zugewiesene Workflows" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "Die Entfernung eines Workflows von einem Dokumententyp wird auch alle laufenden Instanzen dieses Workflows löschen." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "An Dokumententyp %s zugewiesene Workflows" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Workflows speichern eine Reihenfolge von Zuständen (Status) und verfolgen den aktuellen Status eines Dokuments. Übergänge werden dazu verwendet, vom aktuellen Status zu einem neuen zu wechseln." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Es sind keine Workflows definiert" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Workflow löschen: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Workflow bearbeiten: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Verfügbare Dokumententypen" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Dokumententypen zugeordnet zu diesem Workflow" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Das Entfernen eines Dokumententyps von einem Workflow wird auch sämtliche laufenden Workflowinstanzen für andere Dokumente dieses Typs entfernen." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Dokumententypen zugeordnet zu Workflow %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Eine \"%s\" Workflowaktion erstellen" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Workflowstatusaktion %s löschen" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Workflowstatusaktion %s bearbeiten" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Workflowstatusaktionen sind Makros, die bei Betreten oder Verlassen eines Dokumentenstatus ausgeführt werden." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Keine Aktionen vorhanden für diesen Workflowstatus" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Aktionen für Workflowstatus %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Neue Workflowstatusaktionsauswahl" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Status für Workflow %s erstellen" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Workflow-Status löschen: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Workflow-Status bearbeiten: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Keine Status für diesen Workflow definiert" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Übergänge für Workflow %s erstellen" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Workflow-Übergang löschen: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Workflow-Übergang bearbeiten: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Einen Übergang erstellen und verwenden, um von einem Status in einen anderen zu wechseln." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Keine Übergänge für diesen Workflow definiert" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Übergänge für Workflow %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Fehler bei der Aktualisierung von Workflowübergangstriggerereignissen; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Workflowübergangstriggerereignissen erfolgreich aktualisiert" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Trigger sind Ereignisse, die für eine automatische Ausführung dieses Übergangs sorgen." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Workflowübergangstriggerereignisse für %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Verfügbare Workflows" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Diesem Dokumententyp zugewiesene Workflows" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "Die Entfernung eines Workflows von einem Dokumententyp wird auch alle laufenden Instanzen dieses Workflows löschen." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "An Dokumententyp %s zugewiesene Workflows" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Workflows speichern eine Reihenfolge von Zuständen (Status) und verfolgen den aktuellen Status eines Dokuments. Übergänge werden dazu verwendet, vom aktuellen Status zu einem neuen zu wechseln." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Es sind keine Workflows definiert" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Workflow löschen: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Workflow bearbeiten: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Verfügbare Dokumententypen" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Dokumententypen zugeordnet zu diesem Workflow" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Das Entfernen eines Dokumententyps von einem Workflow wird auch sämtliche laufenden Workflowinstanzen für andere Dokumente dieses Typs entfernen." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Dokumententypen zugeordnet zu Workflow %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Vorschau von %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Alle Workflows starten?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Dies wird alle Workflows anstoßen, die erst nach dem Upload von Dokumenten erstellt wurden." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Workflow-Start wurde erfolgreich vorgemerkt." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Vorschau von %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Workflow-Vorschau" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Dokumentbezeichnung" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "Der neue Bezeichner, der dem Dokument zugewiesen werden soll. Kann eine Zeichenfolge oder eine Vorlage sein." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Dokumentbeschreibung" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "Die neue Beschreibung, die dem Dokument zugewiesen werden soll. Kann eine Zeichenfolge oder eine Vorlage sein." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Eigenschaften des Dokuments ändern" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Dokumentenbezeichner Vorlagenfehler: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Dokumentenbeschreibung Vorlagenfehler: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -735,19 +905,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Kann eine IP-Adresse, eine Domain oder eine Vorlage sein. Vorlagen erhalten die Workflowlog-Eingangsinstanz mit der Kontextvariable \"entry_log\". \"entry_log\" enthält die \"workflow_instance\", \"datetime\", \"transition\", \"user\" und \"comment\" Attribute." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Timeout" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Antwortwartezeit in Sekunden." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Payload" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -756,21 +928,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Ein JSON-Dokument, das in den Request eingeschlossen werden soll. Kann auch eine Vorlage sein, die ein JSON-Dokument zurückgibt. Vorlagen erhalten die Workflowlog-Eingangsinstanz mit der Kontextvariable \"entry_log\". \"entry_log\" enthält die \"workflow_instance\", \"datetime\", \"transition\", \"user\" und \"comment\" Attribute." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Benutzer" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Passwort" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Einen POST Request durchführen" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "URL Vorlagenfehler: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Payload Vorlagenfehler: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Payload JSON Fehler: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/el/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/el/LC_MESSAGES/django.mo index 07b64989f2..49713c8c40 100644 Binary files a/mayan/apps/document_states/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/el/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/el/LC_MESSAGES/django.po index cb09fe9ac4..6856744146 100644 --- a/mayan/apps/document_states/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/el/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Hmayag Antonian \n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Ροές εργασίας" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Τρέχουσα κατάσταση μιας ροής εργασίας" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Επιστέφει την τρέχουσα κατταση της επιλεγμένης ροής εργασίας" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Επιστρέφει την τιμή ολολήρωσης της τρέχουσας κατάστασης για την επιλεγμένη ροή εργασίας" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Κανένα" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Τρέχουσα κατσταση" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Χρήστης" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Τελευταία μετάβαση" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Ημερομηνία και ώρα" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Ολοκλήρωση" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Μετάβαση" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Σχόλιο" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Πότε;" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Τύπος ενέργειας" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Τύπος" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Έγγραφα" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Ενέργειες κατάστασης ροής εργασίας" @@ -99,11 +108,12 @@ msgstr "Ενέργεια" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Ετικέτα" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Ενεργοποιημένο" @@ -115,230 +125,314 @@ msgstr "Όχι" msgid "Yes" msgstr "Ναι" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Μετάβαση" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Συμβάν εκκίνησης: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Δημιουργία ροής εργασίας" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Διαγραφή" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Τύποι εγγράφων" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Τροποποίηση" -#: links.py:67 -msgid "Actions" -msgstr "Ενέργειες" - -#: links.py:73 -msgid "Create action" -msgstr "Δημιουργία ενέργειας" - -#: links.py:79 -msgid "Create state" -msgstr "Δημιουργία κατάστασης" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Καταστάσεις" - -#: links.py:104 -msgid "Create transition" -msgstr "Δημιουργία μετάβασης" - -#: links.py:123 -msgid "Transitions" -msgstr "Μεταβάσεις" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Προεπισκόπηση" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Εκκίνηση όλων των ροών εργασίας" +#: links.py:78 +msgid "Actions" +msgstr "Ενέργειες" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Δημιουργία ενέργειας" + +#: links.py:93 +msgid "Create state" +msgstr "Δημιουργία κατάστασης" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Καταστάσεις" + +#: links.py:121 +msgid "Create transition" +msgstr "Δημιουργία μετάβασης" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "Μεταβάσεις" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Λεπτομέρεια" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Έγγραφα στην ροή εργασίας" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Έγγραφα στην κατάσταση" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Εκκίνηση όλων των ροών εργασίας" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Κατά την είσοδο " -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Κατά την έξοδο" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Αυτή η τιμή θα χρησιμοποιείτε από τις άλλες εφαρμογές σαν αναφορά γι' αυτή την ροή εργασίας. Χρησιμοποιήστε μόνο γράμματα,αριθμούς και τον χαρακτήρα υπογράμμισης." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Εσωτερικό όνομα" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Ροή εργασίας" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Αρχική κατάσταση" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Επιλέξτε αν αυτή θα είναι η αρχική κατάσταση της ροής εργασίας. Μόνο μια κατάσταση μπορεί να είναι η αρχική κατάσταση." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Αρχική" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Εισάγετε το ποσοστό ολοκλήρωσης που εκπροσωπεί αυτή η κατάσταση σε σχέση με την ροή εργασίας. Χρησιμοποιήστε αριθμούς χωρίς το σύμβολο του ποσοστού (%)." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Κατάσταση ροής εργασίας" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Καταστάσεις ροής εργασίας" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "Σε ποιό σημείο αυτής της κατάστασης θα εκτελεστεί αυτή η ενέργεια " +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Πότε" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Ενέργεια κατάστασης ροής εργασίας" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Κατάσταση προέλευσης" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Κατάσταση προορισμού" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Μετάβαση ροής εργασίας" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Μεταβάσεις ροής εργασίας" -#: models.py:376 -msgid "Event type" -msgstr "Τύπος συμβάντος" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "απαιτείται" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Συμβάν ενεργοποίησης μετάβασης ροής εργασίας" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Συμβάντα ενεργοποίησης μεταβάσεων ροής εργασίας" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Τύπος συμβάντος" + +#: models.py:522 msgid "Document" msgstr "Έγγραφο" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Περιστατικό ροής εργασίας" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Περιστατικά ροής εργασίας" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Ημερομηνία και ώρα" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Σχόλιο" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Εγγραφή ημερολογίου περιστατικού ροής εργασίας" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Εγγραφές ημερολογίου περιστατικών ροής εργασίας" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Άκυρη επιλογή μετάβασης." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "Εργαλεία εκτέλεσης ροής εργασίας" msgid "Document states" msgstr "Κατάσταση εγγρου" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Πρωτεύον κλειδί του τύπου εγγράφου που θα προστεθεί." @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "Πρωτεύον κλειδί της μετάβασης που θα προστεθεί." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Ροή εργασίας για το έγγραφο: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Λεπτομέρειες ροής εργασίας: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Επιτυχής μετάβαση του εγγράφου \"%s\"" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Υποβολή" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Εκτέλεσε μεταβάσεις για την ροή: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Έγγραφα στην ροή εργασίας: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Έγραφα στην ροή εργασίας \"%s\", κατάσταση \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Κατάσταση της ροής εργασίας: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Διαθέσιμοι τύποι εγγράφων" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Τύποι εγγράφων που έχουν ανατεθεί σε αυτή την ροή εργασίας" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Τύποι εγγράφου που έχουν ανατεθεί στην ροή εργασίας: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Δημιουργία μιας ενέργειας για την ροή εργασίας \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Διαγραφή ενέργειας κατάστασης ροής εργασίας: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Τροποποίηση ενέργειας κατάστασης ροής εργασίας: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Ενέργειες για την κατάσταση ροής εργασίας: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Επιλογή νέας ενέργειας κατάστασης ροής εργασίας" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Δημιουργία καταστάσεων για την ροή εργασίας: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Δημιουργία μεταβάσεων για την ροή εργασίας: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Μεταβάσεις της ροής εργασίας: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Σφάλμα κατά την τροποποίηση του συμβάντος ενεργοποίησης μετάβασης ροής εργασίας: %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Επιτυχής τροποποίηση συμβάντων ενεργοποίησης μετάβασης ροής εργασίας" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Συμβάντα ενεργοποίησης μετάβασης ροής εργασίας: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Διαθέσιμοι τύποι εγγράφων" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Τύποι εγγράφων που έχουν ανατεθεί σε αυτή την ροή εργασίας" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Τύποι εγγράφου που έχουν ανατεθεί στην ροή εργασίας: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Προεπισκόπηση του: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Εκκίνηση όλων των ροών εργασίας;" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Εκκίνηση ροών εργασίας προστέθηκε στην λιστα ενεργειών με επιτυχία. " -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Προεπισκόπηση του: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Λήξη χρόνου" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Χρόνος αναμονής για απάντηση σε δευτερόλεπτα." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Όνομα χρήστη" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Κωδικός πρόσβασης" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/en/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/en/LC_MESSAGES/django.po index 7f951bbf7f..9792a93e48 100644 --- a/mayan/apps/document_states/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,69 +17,78 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -115,230 +125,314 @@ msgstr "" msgid "Yes" msgstr "" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "" -#: links.py:67 -msgid "Actions" -msgstr "" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" msgstr "" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "" + +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "" + +#: models.py:522 msgid "Document" msgstr "" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,316 +514,382 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document " "execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or " "leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This " +"additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow " "log entry instance as part of their context via the variable \"entry_log\". " @@ -729,19 +897,20 @@ msgid "" "\"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template. " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as " @@ -750,21 +919,55 @@ msgid "" "\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static " +"value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", \"user" +"\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static " +"value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", \"user" +"\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/es/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/es/LC_MESSAGES/django.mo index a9f76e3069..09c94e4b40 100644 Binary files a/mayan/apps/document_states/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/es/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/es/LC_MESSAGES/django.po index 15bcd72755..7fb9f365b5 100644 --- a/mayan/apps/document_states/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/es/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-28 15:51+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 22:26+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -19,69 +19,78 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Flujos de trabajo" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Estado actual de un flujo de trabajo" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Devolver el estado actual del flujo de trabajo seleccionado" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Devolver el valor de finalización del estado actual del flujo de trabajo seleccionado" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ninguno" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Estado actual" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Usuario" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Última transición" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Fecha y hora" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Cantidad de completación" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transición" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalles adicionales" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Comentario" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "¿Cuando?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Tipo de acción" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Disparadores" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tipo" + +#: apps.py:294 +msgid "Widget" +msgstr "Widget" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documentos" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Acciones del estado del flujo de trabajo" @@ -101,11 +110,12 @@ msgstr "Acción" msgid "Namespace" msgstr "Categoría" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etiqueta" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Habilitado" @@ -117,230 +127,314 @@ msgstr "No" msgid "Yes" msgstr "Si" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Comentario opcional para adjuntar a la transición." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "Seleccione una transición para ejecutar en el siguiente paso." -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transición" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "Imágenes de flujo de trabajo" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Disparador de eventos: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Crear flujo de trabajo" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Borrar" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipos de documentos" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:67 -msgid "Actions" -msgstr "Acciones" - -#: links.py:73 -msgid "Create action" -msgstr "Crear acción" - -#: links.py:79 -msgid "Create state" -msgstr "Crear estado" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Estados" - -#: links.py:104 -msgid "Create transition" -msgstr "Crear transición" - -#: links.py:123 -msgid "Transitions" -msgstr "Transiciones" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Disparadores de transición" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Muestra" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Iniciar todos los flujos de trabajo" +#: links.py:78 +msgid "Actions" +msgstr "Acciones" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Crear acción" + +#: links.py:93 +msgid "Create state" +msgstr "Crear estado" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Estados" + +#: links.py:121 +msgid "Create transition" +msgstr "Crear transición" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Disparadores de transición" + +#: links.py:147 +msgid "Transitions" +msgstr "Transiciones" + +#: links.py:156 +msgid "Create field" +msgstr "Crear campo" + +#: links.py:176 +msgid "Fields" +msgstr "Campos" + +#: links.py:186 msgid "Detail" msgstr "Detalle" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Documentos del flujo de trabajo" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Documentos del estado de flujo" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Iniciar todos los flujos de trabajo" + +#: literals.py:10 +msgid "Character" +msgstr "Caracter" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "Número (entero)" + +#: literals.py:21 +msgid "Text area" +msgstr "Área de texto" + +#: literals.py:32 msgid "On entry" msgstr "A la entrada" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "A la salida" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Este valor será utilizado por otras aplicaciones para hacer referencia a este flujo de trabajo. Sólo puede contener letras, números y subrayados." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nombre interno" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Flujo de trabajo" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Estado inicial" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Seleccione si este va a ser el estado con el que desea que el flujo de trabajo comience. Sólo un estado puede ser el estado inicial." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "El estado en el que se iniciará el flujo de trabajo. Solo un estado puede ser el estado inicial." -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Inicial" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Introduzca el porcentaje de finalización que este estado representa en relación con el flujo de trabajo. Utilice números sin el signo de porcentaje." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "El porcentaje de finalización que este estado representa en relación con el flujo de trabajo. Use números sin el signo de porcentaje." -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Estado de flujo de trabajo" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Estados de flujo de trabajo" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Un identificador simple para esta acción." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "En qué momento del estado se ejecutará esta acción" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "En qué momento del estado se ejecutará esta acción." -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Cuando" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "La ruta de Python separada por puntos a la clase de acción de flujo de trabajo que se va a ejecutar." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Ruta de acceso a la acción" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Datos de la acción" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Acción del estado del flujo de trabajo" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "Tipo de acción desconocido" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Estado origen" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Estado destino" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Transición de flujo de trabajo" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Transiciones de flujo de trabajo" -#: models.py:376 -msgid "Event type" -msgstr "Tipo de evento" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "El nombre que se usará para identificar este campo en otras partes del sistema de flujo de trabajo." -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "El nombre del campo que se mostrará en la interfaz de usuario." + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "Un mensaje opcional que ayudará a los usuarios a comprender mejor el propósito del campo y los datos a proporcionar." + +#: models.py:463 +msgid "Help text" +msgstr "Texto de ayuda" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "Si estos campos deben completarse o no para continuar." + +#: models.py:468 +msgid "Required" +msgstr "Requerido" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "Una clase opcional para cambiar la presentación predeterminada del campo." + +#: models.py:473 +msgid "Widget class" +msgstr "Clase de widget" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "Un grupo de argumentos nombrados para personalizar el widget. Utiliza el formato YAML." + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "Argumentos nombrados del widget" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Disparador de transiciones de flujo de trabajo" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Disparadores de transiciones de flujo de trabajo" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tipo de evento" + +#: models.py:522 msgid "Document" msgstr "Documento" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "Contexto" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Instancia de flujo de trabajo" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Instancias de flujo de trabajo" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Fecha y hora" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentario" + +#: models.py:673 +msgid "Extra data" +msgstr "Datos extra" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Entrada de registro de la instancia de flujo de trabajo" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Entradas de registro de las instancias de flujos de trabajo" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "No hay opción valida de transición." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Proxy de tiempo de ejecución de flujo de trabajo" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Proxies de tiempo de ejecución de flujo de trabajo" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Proxy de tiempo de ejecución de estado de flujo de trabajo" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Proxies de tiempo de ejecución de estado de flujo de trabajo" @@ -376,6 +470,14 @@ msgstr "Ejecutar herramientas de flujos de trabajo" msgid "Document states" msgstr "Estados de documentos" +#: queues.py:12 +msgid "Document states fast" +msgstr "Flujos de trabajos rapido" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "Generar vistas previas de flujo de trabajo" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Llave primaria del tipo de documento a ser agregado." @@ -414,318 +516,386 @@ msgstr "Lista separada por comas de las llaves principales de tipos de documento msgid "Primary key of the transition to be added." msgstr "Llave primaria de la transición a añadir." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "El umbral en el que WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND comenzará a eliminar los archivos de caché de imagen de flujo de trabajo más antiguos. Especifique el tamaño en bytes." + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "Tiempo en segundos que el navegador debe almacenar en caché las imágenes de flujo de trabajo proporcionadas. El valor predeterminado de 31559626 segundos corresponde a 1 año." + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "Ruta de acceso a la subclase de almacenamiento para usar al almacenar los archivos de imagen de flujo de trabajo en caché." + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "Argumentos para pasar a WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Vista previa del flujo de trabajo" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Asigne flujos de trabajo al tipo de documento de este documento para que este documento ejecute esos flujos de trabajo." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "No hay flujo de trabajo para este documento" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Flujos de trabajo para el documento: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Esta vista mostrará los cambios de estado a medida que se realiza la transición de una instancia de flujo de trabajo." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "No hay detalles para esta instancia de flujo de trabajo" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detalle de flujo de trabajo: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Documento \"%s\" transicionado con éxito" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Enviar" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Realizar la transición de flujo de trabajo: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "Ejecutar la transición \"%(transition)s\" para el flujo de trabajo: %(workflow)s" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Comentario opcional para adjuntar a la transición." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Seleccionar" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "Seleccionar transición para flujo de trabajo: %s" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Asociar un flujo de trabajo con algunos tipos de documentos y documentos de esos tipos se enumerará en esta vista." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "No hay documentos ejecutando este flujo de trabajo" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documentos con el flujo de trabajo: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Cree algunos flujos de trabajo y asócielos con un tipo de documento. Los flujos de trabajo activos se mostrarán aquí y los documentos para los que se están ejecutando." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "No hay flujos de trabajo" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "No hay documentos en este estado de flujo de trabajo." -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Documentos en el flujo de trabajo \"%s\", estado \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Crea estados y vincúlalos usando transiciones." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Este flujo de trabajo no tiene ningún estado" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Estados del flujo de trabajo: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Flujos de trabajo disponibles" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Flujos de trabajo asignados a este tipo de documento." - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "La eliminación de un flujo de trabajo de un tipo de documento también eliminará todas las instancias en ejecución de ese flujo de trabajo." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Flujos de trabajo asignados al tipo de documento: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Los flujos de trabajo almacenan una serie de estados y realizan un seguimiento del estado actual de un documento. Las transiciones se utilizan para cambiar el estado actual a uno nuevo." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "No se han definido flujos de trabajo" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Eliminar flujo de trabajo: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Editar flujo de trabajo: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Tipos de documentos disponibles" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tipos de documentos asignados a este flujo de trabajo" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "La eliminación de un tipo de documento de un flujo de trabajo también eliminará todas las instancias en ejecución de ese flujo de trabajo para documentos del tipo de documento que se acaba de eliminar." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Tipos de documentos asignados al flujo de trabajo: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Crear una acción de flujo de trabajo \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Eliminar acción del estado del flujo de trabajo: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Editar acción de estado de flujo de trabajo: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Las acciones de estado de flujo de trabajo son macros que se ejecutan cuando los documentos entran o salen del estado en el que residen." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "No hay acciones para este estado de flujo de trabajo" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Acciones para el estado de flujo de trabajo: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Nueva selección de acción de estado de flujo de trabajo" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Crear estados para el flujo de trabajo: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Eliminar el estado del flujo de trabajo: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Editar el estado del flujo de trabajo: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Este flujo de trabajo no tiene ningún estado" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Crear transiciones para el flujo de trabajo: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Eliminar la transición del flujo de trabajo: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Editar la transición del flujo de trabajo: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Cree una transición y úsela para mover un flujo de trabajo de un estado a otro." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Este flujo de trabajo no tiene ninguna transición" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Transiciones de flujo de trabajo: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Error al actualizar eventos de disparo de transición de flujo de trabajo; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Eventos de activación de transición de flujo de trabajo actualizados correctamente" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Los disparadores son eventos que hacen que esta transición se ejecute automáticamente." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Eventos de disparo de transición de flujo de trabajo para: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "Cree un campo para la transición del flujo de trabajo: %s" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "Eliminar el campo de transición del flujo de trabajo: %s" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "Editar campo de transición de flujo de trabajo: %s" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "Los campos de transición de flujo de trabajo permiten agregar datos al contexto del flujo de trabajo. Estos datos de contexto adicionales pueden ser utilizados por otros elementos del sistema de flujo de trabajo, como las acciones de estado del flujo de trabajo." + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "No hay campos para esta transición de flujo de trabajo" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "Campos para la transición del flujo de trabajo: %s" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Flujos de trabajo disponibles" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Flujos de trabajo asignados a este tipo de documento." + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "La eliminación de un flujo de trabajo de un tipo de documento también eliminará todas las instancias en ejecución de ese flujo de trabajo." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Flujos de trabajo asignados al tipo de documento: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Los flujos de trabajo almacenan una serie de estados y realizan un seguimiento del estado actual de un documento. Las transiciones se utilizan para cambiar el estado actual a uno nuevo." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "No se han definido flujos de trabajo" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Eliminar flujo de trabajo: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Editar flujo de trabajo: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Tipos de documentos disponibles" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tipos de documentos asignados a este flujo de trabajo" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "La eliminación de un tipo de documento de un flujo de trabajo también eliminará todas las instancias en ejecución de ese flujo de trabajo para documentos del tipo de documento que se acaba de eliminar." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Tipos de documentos asignados al flujo de trabajo: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Vista previa de: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "¿Lanzar todos los flujos de trabajo?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Esto iniciará todos los flujos de trabajo creados después de que los documentos ya se hayan cargado." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Lanzamiento de flujos de trabajo sometido con éxito." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Vista previa de: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Vista previa del flujo de trabajo" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Etiqueta de documento" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "La nueva etiqueta que se asignará al documento. Puede ser una cadena o una plantilla." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Descripción del documento" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "La nueva descripción que se asignará al documento. Puede ser una cadena o una plantilla." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Modificar las propiedades del documento" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "Modificar propiedades del documento" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Error de plantilla de etiqueta de documento: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Error de plantilla de descripción de documento: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -733,19 +903,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Puede ser una dirección IP, un dominio o una plantilla. Las plantillas reciben la instancia de entrada del registro de flujo de trabajo como parte de su contexto a través de la variable \"entry_log\". El \"entry_log\" a su vez proporciona los atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\" y \"comment\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Tiempo de expiración" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Tiempo en segundos para esperar una respuesta." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "Tiempo en segundos para esperar una respuesta. Puede ser un valor estático o una plantilla." -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Datos a enviar" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -754,21 +926,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Un documento JSON a incluir en la solicitud. También puede ser una plantilla que devuelva un documento JSON. Las plantillas reciben la instancia de entrada del registro de flujo de trabajo como parte de su contexto a través de la variable \"entry_log\". El \"entry_log\" a su vez proporciona los atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\" y \"comment\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Nombre de usuario" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Nombre de usuario que se utilizará para realizar la solicitud con HTTP Basic Auth. Puede ser un valor estático o una plantilla. Las plantillas reciben la instancia de entrada de registro de flujo de trabajo como parte de su contexto a través de la variable \"entry_log\". El \"entry_log\" a su vez proporciona los atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\" y \"comment\"." + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Contraseña" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Contraseña a utilizar para realizar la solicitud con HTTP Basic Auth. Puede ser un valor estático o una plantilla. Las plantillas reciben la instancia de entrada de registro de flujo de trabajo como parte de su contexto a través de la variable \"entry_log\". El \"entry_log\" a su vez proporciona los atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\" y \"comment\"." + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "Encabezados" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "Encabezados para enviar con la solicitud HTTP. Debe estar en formato JSON. Puede ser un valor estático o una plantilla. Las plantillas reciben la instancia de entrada de registro de flujo de trabajo como parte de su contexto a través de la variable \"entry_log\". El \"entry_log\" a su vez proporciona los atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\" y \"comment\"." + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Realizar una solicitud POST" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Error de plantilla de URL: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "Error JSON en %(field_name)s: %(exception)s" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Error de plantilla de datos a enviar: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Error interpretando JSON de datos a enviar: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "Error de plantilla en %(field_name)s: %(exception)s" diff --git a/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.mo index d51533b2dc..15bc7c7bed 100644 Binary files a/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.po index 30a83d3dd4..5a8100049c 100644 --- a/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Mehdi Amani \n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,69 +19,78 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "گردش کار" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "وضعیت فعلی جریان کاری" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "وضعیت فعلی جریان کاری انتخاب شده را بازگردانید" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "مقدار تکمیل وضعیت کنونی جریان کاری انتخاب شده را بازگردانید" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "هیچ یک" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "وضعیت فعلی" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "کاربر" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "آخرین گذار" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "تاریخ و زمان" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "تکمیل" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "گذار" +#: apps.py:229 +msgid "Additional details" +msgstr "جزئیات اضافی" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "اظهار نظر" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "چه زمانی؟" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "نوع اقدام" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "راه اندازی" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "نوع" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "اسناد" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "اقدامات دولت کار جریان" @@ -101,11 +110,12 @@ msgstr "عمل" msgid "Namespace" msgstr "فضای نام" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "برچسب" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "فعال شده است" @@ -117,230 +127,314 @@ msgstr "نه" msgid "Yes" msgstr "بله" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "گذار" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Event trigger: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "ایجاد گردش کار" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "حذف" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "نوع سند" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "ویرایش" -#: links.py:67 -msgid "Actions" -msgstr "اقدامات" - -#: links.py:73 -msgid "Create action" -msgstr "اقدام را ایجاد کنید" - -#: links.py:79 -msgid "Create state" -msgstr "ایجاد وضعیت یا حالت" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "و یا وضعیتها حالات States" - -#: links.py:104 -msgid "Create transition" -msgstr "ایجاد گذار" - -#: links.py:123 -msgid "Transitions" -msgstr "گذار" - -#: links.py:130 -msgid "Transition triggers" -msgstr "باعث انتقال می شود" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "پیش نمایش" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "راه اندازی تمام جریانهای کاری" +#: links.py:78 +msgid "Actions" +msgstr "اقدامات" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "اقدام را ایجاد کنید" + +#: links.py:93 +msgid "Create state" +msgstr "ایجاد وضعیت یا حالت" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "و یا وضعیتها حالات States" + +#: links.py:121 +msgid "Create transition" +msgstr "ایجاد گذار" + +#: links.py:141 +msgid "Transition triggers" +msgstr "باعث انتقال می شود" + +#: links.py:147 +msgid "Transitions" +msgstr "گذار" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "جزئیات" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "اسناد گردش کار" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "اسناد دولتی" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "راه اندازی تمام جریانهای کاری" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "در ورودی" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "در خروج" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "این مقدار توسط برنامه های دیگر برای ارجاع به این گردش کار استفاده می شود. فقط شامل حروف، اعداد و حروف الفبا است." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "نام داخلی" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "گردش کار" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "حالت اولیه" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "انتخاب کنید اگر این حالت شما خواهد بود که می خواهید جریان کار شروع شود. تنها یک حالت می تواند وضعیت اولیه باشد." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "اولیه" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "درصد تکمیل را که این وضعیت در رابطه با جریان کاری نشان می دهد وارد کنید. استفاده از اعداد بدون نشانه درصد." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "حالت گردش کار" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "وضعیت کار" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "در این لحظه دولت این عمل را اجرا خواهد کرد" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "چه زمانی" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "مسیر پایتون نقطه به کلاس عملیات گردش کار برای اجرای." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Entry action path" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Entry action data" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Workflow state action" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "کشور مبدا" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "حالت مقصد" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "گذار گردش کار" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "گذارهای کاری" -#: models.py:376 -msgid "Event type" -msgstr "نوع رویداد" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "الزامی" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "رویداد رویداد انتقال جریان کاری" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "انتقال گردش کار باعث وقایع می شود" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "نوع رویداد" + +#: models.py:522 msgid "Document" msgstr "سند" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "نمونه گردش کار" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "نمونه کارها" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "زمان قرار" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "اظهار نظر" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "ورودی به لاگ یک مورد از گردش کار" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "ورودیهای لگ یک مورد از گردش کار" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "یک انتخاب منتخب معتبر نیست" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "پروکسی زمانبندی گردش کار" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "پروکسی کارآمد در زمان اجرا" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "پروکسی زمان اجرا وضعیت " -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "پروکسی زمان اجرا وضعیت " @@ -376,6 +470,14 @@ msgstr "ابزار گردش کار را اجرا کنید" msgid "Document states" msgstr "سند" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "کلید اولیه نوع سند اضافه می شود" @@ -414,318 +516,386 @@ msgstr "لیست کاملی از نوع سند کپی اولیه که این ج msgid "Primary key of the transition to be added." msgstr "کلید اصلی انتقال برای اضافه کردن" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "گردش کار برای سند: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "جزئیات گردش کار: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "سند \"%s\" با موفقیت انتقال یافت" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "ارسال" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "انتقال برای جریان کاری: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "انتخاب" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "اسناد با جریان کاری: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "اسناد در جریان کار \"%s\"، حالت \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "ایالت گردش کار: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "نوع سند موجود" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "انواع سند این جریان کاری را تعیین می کنند" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "انواع سند گردش کار را تعیین می کند: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "یک اقدام عملیاتی \"%s\" ایجاد کنید" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "عمل عملکرد دولت را حذف کنید: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "ویرایش عمل جریان کار: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "اقدامات مربوط به وضعیت گردش کار: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "انتخاب عملکرد عمل جدید دولت" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "ایجاد حالت برای گردش کار: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "ایجاد گذار برای گردش کار: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "انتقال گردش کار: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "خطا در به روز رسانی وقایع رویداد انتقال جریان کاری؛ %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "رویدادهای رویداد انتقال جریان کار با موفقیت به روز شد" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "حوادث ماژول انتقال گردش کار برای: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "نوع سند موجود" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "انواع سند این جریان کاری را تعیین می کنند" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "انواع سند گردش کار را تعیین می کند: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "پیش نمایش از: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "همه جریانهای کاری را راه اندازی کنید؟" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "راه اندازی کار در صف با موفقیت." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "پیش نمایش از: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "نشانی اینترنتی" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -733,19 +903,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "می تواند یک آدرس IP، یک دامنه یا یک الگو باشد. قالب ها ورودی ورودی ورود به سیستم را به عنوان بخشی از متن خود از طریق متغیر \"entry_log\" دریافت می کنند. \"entry_log\" به نوبه خود ویژگی های \"workflow_instance\"، \"datetime\"، \"transition\"، \"user\" و \"comment\" را فراهم می کند." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "وقفه" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "زمان در ثانیه برای منتظر پاسخ." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "ظرفیت ترابری" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -754,21 +926,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "یک سند JSON برای درخواست در همچنین می تواند یک الگو باشد که یک سند JSON را بازگرداند. قالب ها ورودی ورودی ورود به سیستم را به عنوان بخشی از متن خود از طریق متغیر \"entry_log\" دریافت می کنند. \"entry_log\" به نوبه خود ویژگی های \"workflow_instance\"، \"datetime\"، \"transition\"، \"user\" و \"comment\" را فراهم می کند." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "نام کاربری" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "کلمه عبور" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "یک درخواست POST انجام دهید" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "خطای URL الگوی: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "خطای قالب بارگیری: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "خطای JSON Payload: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.mo index d1ca90adc0..1cf09c0a77 100644 Binary files a/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po index 072523d714..62b8efd9c6 100644 --- a/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po @@ -6,14 +6,15 @@ # Christophe CHAUVET , 2017 # Christophe CHAUVET , 2015 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-27 00:51+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-08 19:04+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,69 +22,78 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Flux de travail" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "État actuel d'un flux de travail" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Fournir l'état actuel du flux de travail sélectionné" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Renvoyer la valeur d'achèvement de l'état actuel du flux de travail sélectionné" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Aucun" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "État actuel" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Utilisateur" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Dernière transition" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Date et heure" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Finalisation" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transition" +#: apps.py:229 +msgid "Additional details" +msgstr "Détails supplémentaires" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Commentaire" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Quand ?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Type d'action" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Déclencheurs" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Type" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documents" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Actions d'état du flux de travail" @@ -103,11 +113,12 @@ msgstr "Action" msgid "Namespace" msgstr "Espace de nommage" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Libellé" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Activé" @@ -119,230 +130,314 @@ msgstr "Non" msgid "Yes" msgstr "Oui" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Commentaire facultatif à joindre à la transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transition" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Déclencheur d'action : %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Créer un flux de travail" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Supprimer" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Types de document" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Modifier" -#: links.py:67 -msgid "Actions" -msgstr "Actions" - -#: links.py:73 -msgid "Create action" -msgstr "Créer une action" - -#: links.py:79 -msgid "Create state" -msgstr "Créer un état" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "États" - -#: links.py:104 -msgid "Create transition" -msgstr "Créer une transition" - -#: links.py:123 -msgid "Transitions" -msgstr "Transitions" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Déclencheurs de transition" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Prévisualiser" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Lancer tous les flux de travail" +#: links.py:78 +msgid "Actions" +msgstr "Actions" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Créer une action" + +#: links.py:93 +msgid "Create state" +msgstr "Créer un état" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "États" + +#: links.py:121 +msgid "Create transition" +msgstr "Créer une transition" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Déclencheurs de transition" + +#: links.py:147 +msgid "Transitions" +msgstr "Transitions" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "Champs" + +#: links.py:186 msgid "Detail" msgstr "Détail" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Documents du flux de travail" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Documents d'état" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Lancer tous les flux de travail" + +#: literals.py:10 +msgid "Character" +msgstr "Caractère" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "Nombre (Entier)" + +#: literals.py:21 +msgid "Text area" +msgstr "Zone de texte" + +#: literals.py:32 msgid "On entry" msgstr "A l'entrée" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "A la sortie" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Cette valeur sera utilisée par d'autres applications pour faire référence à ce flux de travail. Ne peut contenir que des lettres, des chiffres et des caractères de soulignement." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nom interne" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Flux de travail" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "État initial" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Sélectionnez si vous voulez que cet état soit celui par lequel le flux de travail débute. Un seul état peut être à l'état initial." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Initial" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Spécifiez le pourcentage de finalisation que cet état représente au sein du flux de travail. Saisissez un nombre sans le signe de pourcentage." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "État du flux de travail" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "États du flux de travail" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Un identifiant simple pour cette action." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "A quel stade de l'état cette action sera exécutée" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Quand" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Le chemin Python séparé par des points vers la classe d'action de flux de travail à exécuter." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Chemin d'action d'entrée" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Données d'action d'entrée" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Action d'état du flux de travail" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "Type d'action inconnu" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "État d'origine" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "État de destination" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Transition du flux de travail" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Transitions du flux de travail" -#: models.py:376 -msgid "Event type" -msgstr "Type d'évènement" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "Texte d'aide" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Requis" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Événement déclencheur de transition du flux de travail" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Événements déclencheurs de transitions du flux de travail" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Type d'évènement" + +#: models.py:522 msgid "Document" msgstr "Document" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Instance du flux de travail" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Instances du flux de travail" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Date et heure" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commentaire" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Entrée de la journalisation de l'instance du flux de travail" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Entrées de la journalisation du flux de travail" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Choix de transition invalide." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Proxy d'exécution du flux de travail" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Proxies d'exécution du flux de travail" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Protocole d'exécution de l'état du flux de travail" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Proxies d'exécution de l'état du flux de travail" @@ -378,6 +473,14 @@ msgstr "Exécuter des outils de flux de travail" msgid "Document states" msgstr "États de document" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Clé principale du type de document à ajouter." @@ -416,318 +519,386 @@ msgstr "Liste séparée par des virgules des clés primaires de type de document msgid "Primary key of the transition to be added." msgstr "Clé principale de la transition à ajouter." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Aperçu du flux de travail" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Assigner des flux de travail au type de document de ce document pour que ce document exécute ces flux de travail." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Il n'y a pas de workflow pour ce document" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Flux de travail du document : %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Cette page affiche les changements d'état lors de la transition d'une instance de flux de travail." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Il n'y a pas de détails pour cette instance de workflow" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Détail du flux de travail : %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Le document \"%s\" a transitionné avec succès" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Soumettre" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Réaliser une transition pour le flux de travail : %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Commentaire facultatif à joindre à la transition." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Sélectionner" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Associer un flux de travail à certains types de documents et les documents de ces types seront répertoriés dans cette vue." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Aucun document n’exécute ce flux de travail" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documents avec le flux de travail : %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Créer des flux de travail et les associer à un type de document. Les flux de travail actifs seront affichés ici et les documents pour lesquels ils sont exécutés." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Il n'y a pas de flux de travail" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "Aucun document dans cet état de flux de travail" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Les documents dans le flux de travail \"%s\", état \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Créez des états et reliez-les à l'aide de transitions." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Ce flux de travail n'a pas d'état" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "États du flux de travail : %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Flux de travail disponibles" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Flux de travail affectés à ce type de document" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "La suppression d'un flux de travail d'un type de document supprimera également toutes les instances en cours d'exécution de ce flux de travail." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Les flux de travail affecté à ce type de document: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Les flux de travail stockent une série d'états et assurent le suivi de l'état actuel d'un document. Les transitions sont utilisées pour changer l'état actuel en un nouvel état." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Aucun flux de travail n'a été défini" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Supprimer le flux de travail: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Modifier le flux de travail: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Types de document disponible" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Types de document associés à ce flux de travail" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Retirer un type de document d'un flux de travail supprimera également toutes les instances en cours d'exécution de ce flux de travail pour les documents du type retiré." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Types de document assignés au flux de travail : %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Créer une action de flux de travail \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Supprimer une action d'état de flux de travail : %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Modifier une action d'état de flux de travail : %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Les actions de flux de travail sont des macros qui sont exécutées lorsque des documents entrent ou sortent de l'état dans lequel ils se trouvent." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Aucune action pour cet état de flux de travail" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Actions pour l'état de flux de travail : %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Sélection d'une nouvelle action d'état de flux de travail" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Créer des états pour le flux de travail : %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Supprimer l'état du flux de travail: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Modifier l'état du flux de travail: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Ce flux de travail n'a pas d'état" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Créer des transitions du flux de travail : %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Supprimer la transition du flux de travail: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Modification de la transition du flux de travail: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Créez une transition et utilisez-la pour déplacer un flux de travail d'un état à un autre." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Ce flux de travail n'a pas de transitions" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Transitions du flux de travail : %s " -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Erreur de mise-à-jour des événements déclencheurs de transition du flux de travail ; %s " -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Événements déclencheurs de transition du flux de travail mis à jour avec succès" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Les déclencheurs sont des événements qui entraînent l'exécution automatique de cette transition." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Événements déclencheurs de transition du flux de travail : %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Flux de travail disponibles" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Flux de travail affectés à ce type de document" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "La suppression d'un flux de travail d'un type de document supprimera également toutes les instances en cours d'exécution de ce flux de travail." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Les flux de travail affecté à ce type de document: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Les flux de travail stockent une série d'états et assurent le suivi de l'état actuel d'un document. Les transitions sont utilisées pour changer l'état actuel en un nouvel état." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Aucun flux de travail n'a été défini" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Supprimer le flux de travail: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Modifier le flux de travail: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Types de document disponible" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Types de document associés à ce flux de travail" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Retirer un type de document d'un flux de travail supprimera également toutes les instances en cours d'exécution de ce flux de travail pour les documents du type retiré." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Types de document assignés au flux de travail : %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Prévisualisation de : %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Lancer tous les flux de travail ?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Ceci lancera tous les flux de travail créés après que les documents ont déjà été téléversés." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Le lancement du flux de travail a été mis en file d'attente avec succès." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Prévisualisation de : %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Aperçu du flux de travail" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Étiquette du document" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "La nouvelle étiquette à attribuer au document. Peut être une chaîne ou un modèle." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Description du document" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "La nouvelle description à attribuer au document. Peut être une chaîne ou un modèle." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "Modifier les propriétés du document" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Erreur de modèle d'étiquette de document: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Erreur de modèle de description de document: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -735,19 +906,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Peut être une adresse IP, un domaine ou un modèle. Les modèles reçoivent l'instance d'entrée de journal du flux de travail au sein de leur contexte via la variable \"entry_log\". \"entry_log\" fournit à son tour les attributs \"workflow_instance\", \"datetime\", \"transition\", \"user\" et \"comment\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Délai d'attente dépassé" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Durée en secondes d'attente d'une réponse." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Contenu" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -756,21 +929,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Un document JSON à inclure dans la requête. Peut également être un modèle qui renvoie un document JSON. Les modèles reçoivent l'instance d'entrée du journal de flux de travail dans leur contexte via la variable \"entry_log\". \"entry_log\" fournit à son tour les attributs \"workflow_instance\", \"datetime\", \"transition\", \"user\" et \"comment\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Identifiant" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Mot de passe" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Effectuer une requête POST" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Erreur de modèle d'URL : %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Erreur de modèle de contenu : %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Erreur JSON de contenu : %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.mo index b987b8cb8d..7b0f7c05b7 100644 Binary files a/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.po index bc2510e791..70d2d117d3 100644 --- a/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: molnars \n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "a folyamat aktuálus állapota" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Semmi" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Jelen állapot" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Felhasználó" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Dátum és idő" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Megjegyzés" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Típus" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumentumok" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -100,11 +109,12 @@ msgstr "" msgid "Namespace" msgstr "Névtér" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Cimke" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Bekapcsolt" @@ -116,230 +126,314 @@ msgstr "Nem" msgid "Yes" msgstr "Igen" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Törlés" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Dokumentum típusok" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Szerkesztés" -#: links.py:67 -msgid "Actions" -msgstr "Műveletek" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Előnézet" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Műveletek" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Kezdeti állapot" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Esemény típus" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Esemény típus" + +#: models.py:522 msgid "Document" msgstr "Dokumentum" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Megjegyzés" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -375,6 +469,14 @@ msgstr "" msgid "Document states" msgstr "Dokumentum állapotok" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -413,318 +515,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Kiválaszt" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "időtúllépés" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Jelszó" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/id/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/id/LC_MESSAGES/django.mo index 70a3495032..403d1ba630 100644 Binary files a/mayan/apps/document_states/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/id/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/id/LC_MESSAGES/django.po index b27f213c63..9585331c56 100644 --- a/mayan/apps/document_states/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/id/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Adek Lanin\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Alur kerja" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Kondisi alur kerja saat ini" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Kembalikan kondisi saat ini ke alur kerja terpilih" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nihil" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Kondisi saat ini" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Pengguna" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Transisi terakhir" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Tanggal dan waktu" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transisi" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Kapan?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Tipe tindakan" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Pemicu" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tipe" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumen" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Kondisi aksi alur kerja" @@ -100,11 +109,12 @@ msgstr "Tindakan" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Label" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -116,230 +126,314 @@ msgstr "Tidak" msgid "Yes" msgstr "Ya" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transisi" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Buat alur kerja" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Hapus" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipe dokumen" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Sunting" -#: links.py:67 -msgid "Actions" -msgstr "Aksi" - -#: links.py:73 -msgid "Create action" -msgstr "Buat aksi" - -#: links.py:79 -msgid "Create state" -msgstr "Buat kondisi" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Kondisi" - -#: links.py:104 -msgid "Create transition" -msgstr "Buat transisi" - -#: links.py:123 -msgid "Transitions" -msgstr "Transisi" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Pemicu transisi" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Pratinjau" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Aksi" + +#: links.py:84 +msgid "Create action" +msgstr "Buat aksi" + +#: links.py:93 +msgid "Create state" +msgstr "Buat kondisi" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Kondisi" + +#: links.py:121 +msgid "Create transition" +msgstr "Buat transisi" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Pemicu transisi" + +#: links.py:147 +msgid "Transitions" +msgstr "Transisi" + +#: links.py:156 +msgid "Create field" msgstr "" -#: links.py:157 +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detail" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Dokumen alur kerja" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Kondisi dokumen" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Saat masuk" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Saat keluar" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nama internal" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Alur kerja" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Kondisi inisiasi" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Inisiasi" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Kondisi alur kerja" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Kondisi alur kerja" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Kapan" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Kondisi asli" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Tujuan kondisi" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Transisi alur kerja" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Transisi alur kerja" -#: models.py:376 -msgid "Event type" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "" + +#: models.py:522 msgid "Document" msgstr "Dokumen" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Waktu tanggal" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Pilihan transisi tidak valid" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -375,6 +469,14 @@ msgstr "" msgid "Document states" msgstr "Kondisi dokumen" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Kunci utama dari tipe dokumen yang ditambahkan" @@ -413,318 +515,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "Kunci utama dari transisi yang ditambahkan." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Tidak ada alur kerja untuk dokumen ini" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Alur kerja untuk dokumen: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Rincian dari alur kerja: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Transisi dokumen \"%s\" berhasil" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Lakukan transisi bagi alur kerja: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Buat kondisi dan tautkan ke transisi." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Alur kerja ini tidak memiliki kondisi" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Kondisi alur kerja: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Alur kerja tersedia" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Alur kerja dimiliki oleh tipe dokumen ini" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Tipe dokumen tersedia" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Alur kerja tersedia" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Alur kerja dimiliki oleh tipe dokumen ini" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Tipe dokumen tersedia" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Password" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/it/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/it/LC_MESSAGES/django.mo index 7935edb6d1..f67a0ebfba 100644 Binary files a/mayan/apps/document_states/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/it/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/it/LC_MESSAGES/django.po index ad2bea0d8e..63fbf06949 100644 --- a/mayan/apps/document_states/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/it/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Giovanni Tricarico \n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,69 +19,78 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "I workflow" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Stato corrente del workflow" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Restituisce lo stato corrente del flusso di lavoro selezionato" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Restituisce la percentuale di completamento dello stato corrente del flusso di lavoro selezionato" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nessuna " -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Stato corrente" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Utente" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Ultima transizione" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data e ora" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Completamento" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transizione" +#: apps.py:229 +msgid "Additional details" +msgstr "Dettagli aggiuntivi " -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Commento" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Quando?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Tipo di azione" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Triggers (azioni innescate)" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tipo" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documenti" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Azioni per lo stato del flusso di lavoro" @@ -101,11 +110,12 @@ msgstr "Azione" msgid "Namespace" msgstr "Namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etichetta" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Abilitato" @@ -117,230 +127,314 @@ msgstr "No" msgid "Yes" msgstr "Si" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Commento opzionale da aggiungere alla transizione." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transizione" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Crea workflow" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Cancella" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipi di documento" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Modifica" -#: links.py:67 -msgid "Actions" -msgstr "Azioni " - -#: links.py:73 -msgid "Create action" -msgstr "Crea azione" - -#: links.py:79 -msgid "Create state" -msgstr "Crea stato" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Stati" - -#: links.py:104 -msgid "Create transition" -msgstr "Crea transizione" - -#: links.py:123 -msgid "Transitions" -msgstr "Transizioni" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Trigger per la transizione" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Anteprima " -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Avvia tutti i workflow" +#: links.py:78 +msgid "Actions" +msgstr "Azioni " -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Crea azione" + +#: links.py:93 +msgid "Create state" +msgstr "Crea stato" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Stati" + +#: links.py:121 +msgid "Create transition" +msgstr "Crea transizione" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Trigger per la transizione" + +#: links.py:147 +msgid "Transitions" +msgstr "Transizioni" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Dettagli" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Documenti di workflow" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Documenti di stato" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Avvia tutti i workflow" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "All'entrata" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "All'uscita" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Questo valore sarà usato da altre applicazioni per riferirsi a questo workflow. Può contenere solo lettere, numeri e underscore (trattino basso)." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nome interno" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Stato iniziale" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Seleziona se questo è lo stato da utilizzare quando il workflow inizia. Solo uno stato può essere quello iniziale." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Iniziale" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Inserisci la percentuale di completamento che questo stato rappresenta in relazione al workflow. Usa i numeri senza segno di percentuale." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Stato workflow" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Stati workflow" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Un semplice identificatore per questa azione." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "In quale momento dello stato questa azione sarà eseguita" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Quando" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Il percorso alla classe Python per l'azione di workflow da eseguire." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Percorso per l'inizio dell'azione" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Dati per l'inizio dell'azione" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Azione dello stato del workflow" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Stato originale" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Stato di destinazione" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Transizione workflow" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Transizioni workflow" -#: models.py:376 -msgid "Event type" -msgstr "Tipo evento" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Obbligatorio" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Evento scatenato dalla transizione del workflow" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Eventi scatenati dalla transizione del workflow" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tipo evento" + +#: models.py:522 msgid "Document" msgstr "Documento" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Istanza workflow" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Istanze workflow" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Data e ora" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commento" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Voce log istanza workflow" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Voci log istanza workflow" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Non è una scelta valida per la transizione" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -376,6 +470,14 @@ msgstr "" msgid "Document states" msgstr "Stati documento" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -414,318 +516,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Workflow per il documento: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Dettagli del workflow: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Invia" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Esegui transizione per il workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Commento opzionale da aggiungere alla transizione." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Seleziona" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Non ci sono documenti che eseguono questo workflow" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documento con il workflow: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Stati del workflow: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Tipi di documento disponibili" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tipi di documento assegnati a questo workflow" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Tipi di documento assegnati al workflow: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Crea stati del workflow: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Crea trasizioni per il workflow: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Trasizioni per il workflow: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Tipi di documento disponibili" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tipi di documento assegnati a questo workflow" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Tipi di documento assegnati al workflow: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -733,19 +903,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Timeout" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -754,21 +926,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Nome utente" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Password" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.mo index 0c5aa1fb3c..3e4d9673e6 100644 Binary files a/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.po index b4e7a473ee..4518899c0e 100644 --- a/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Māris Teivāns \n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Darbplūsmas" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Pašreizējais darbplūsmas stāvoklis" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Atgrieziet atlasītās darbplūsmas pašreizējo stāvokli" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Atgrieziet atlasītās darbplūsmas pašreizējā stāvokļa pabeigšanas vērtību" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nav neviens" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Pašreizējais stāvoklis" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Lietotājs" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Pēdējā pāreja" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datums un laiks" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Pabeigšana" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Pāreja" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentārs" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Kad?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Darbības veids" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Palaišanas" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tips" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenti" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Darbplūsmas stāvokļa darbības" @@ -100,11 +109,12 @@ msgstr "Rīcība" msgid "Namespace" msgstr "Vārda vieta" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etiķete" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Iespējots" @@ -116,230 +126,314 @@ msgstr "Nē" msgid "Yes" msgstr "Jā" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Izvēles komentārs, ko var pievienot pārejai." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Pāreja" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Notikuma izraisītājs: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Izveidot darbplūsmu" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Dzēst" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Dokumentu veidi" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Rediģēt" -#: links.py:67 -msgid "Actions" -msgstr "Darbības" - -#: links.py:73 -msgid "Create action" -msgstr "Izveidojiet darbību" - -#: links.py:79 -msgid "Create state" -msgstr "Izveidot stāvokli" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Valstīm" - -#: links.py:104 -msgid "Create transition" -msgstr "Izveidot pāreju" - -#: links.py:123 -msgid "Transitions" -msgstr "Pārejas" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Pāreja izraisa" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Priekšskatījums" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Uzsākt visas darbplūsmas" +#: links.py:78 +msgid "Actions" +msgstr "Darbības" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Izveidojiet darbību" + +#: links.py:93 +msgid "Create state" +msgstr "Izveidot stāvokli" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Valstīm" + +#: links.py:121 +msgid "Create transition" +msgstr "Izveidot pāreju" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Pāreja izraisa" + +#: links.py:147 +msgid "Transitions" +msgstr "Pārejas" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detalizēta informācija" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Darbplūsmas dokumenti" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Valsts dokumenti" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Uzsākt visas darbplūsmas" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Ieejot" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Iziet" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Šo vērtību izmantos citas lietotnes, lai atsauktos uz šo darbplūsmu. Var saturēt tikai burtus, ciparus un pasvītrojumus." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Iekšējais nosaukums" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Darbplūsma" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Sākotnējais stāvoklis" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Atlasiet, vai tas būs stāvoklis, ar kuru vēlaties darbplūsmu sākt. Tikai viens stāvoklis var būt sākotnējais stāvoklis." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Sākotnējais" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Ievadiet procentus no pabeigšanas, ko šī valsts pārstāv attiecībā uz darbplūsmu. Izmantot numurus bez procentuālās zīmes." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Darbplūsmas stāvoklis" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Darbplūsmas stāvokļi" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Vienkāršs šīs darbības identifikators." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "Kādā brīdī šī darbība tiks izpildīta" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Kad" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Punkta Python ceļš uz darbplūsmas darbības klasi, lai izpildītu." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Ieejas ceļš" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Ievades darbības dati" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Darbplūsmas stāvokļa darbība" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Izcelsmes valsts" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Galamērķa valsts" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Darbplūsmas pāreja" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Darbplūsmas pārejas" -#: models.py:376 -msgid "Event type" -msgstr "Notikuma veids" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Darbplūsmas pārejas sprūda notikums" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Darbplūsmas pārejas izraisa notikumus" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Notikuma veids" + +#: models.py:522 msgid "Document" msgstr "Dokuments" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Darbplūsmas piemērs" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Darbplūsmas gadījumi" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Datums Laiks" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentārs" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Darbplūsmas gadījumu žurnāla ieraksts" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Darbplūsmas gadījumu žurnāla ieraksti" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Nav derīga pārejas izvēle." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Darbplūsmas izpildes laiks" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Darbplūsmas izpildes laiks" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Darbplūsmas stāvokļa izpildlaika starpniekserveris" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Darbplūsmas stāvokļa izpildes laiks" @@ -375,6 +469,14 @@ msgstr "Izpildiet darbplūsmas rīkus" msgid "Document states" msgstr "Dokumentu stāvokļi" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Pievienojamā dokumenta tipa primārā atslēga." @@ -413,318 +515,386 @@ msgstr "Komatu atdalīts dokumentu tipa primāro atslēgu saraksts, kurām šī msgid "Primary key of the transition to be added." msgstr "Pievienojamās pārejas primārā atslēga." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Piešķiriet šī dokumenta dokumenta tipam darbplūsmas, lai šis dokuments izpildītu šīs darbplūsmas." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Šim dokumentam nav darbplūsmas" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Dokumenta darbplūsmas: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Šis skats parādīs stāvokļa izmaiņas, kad notiks darbplūsmas instances pāreja." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Šajā darbplūsmas instancē nav sīkākas informācijas" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Darba plūsmas apraksts: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Dokuments \"%s\" veiksmīgi mainīts" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Iesniegt" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Vai pāreja darbplūsmai: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Izvēles komentārs, ko var pievienot pārejai." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Darbplūsmas saistīšana ar dažiem dokumentu veidiem un šo veidu dokumenti tiks iekļauti šajā skatā." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Nav dokumentu, kas izpildītu šo darbplūsmu" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Dokumenti ar darbplūsmu: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Izveidojiet dažas darbplūsmas un saistiet tās ar dokumenta veidu. Šeit tiks parādītas aktīvas darbplūsmas un dokumenti, kuriem tie tiek izpildīti." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Nav darbplūsmu" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "Šajā darbplūsmas stāvoklī nav dokumentu" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Dokumenti darbplūsmā \"%s\", norādiet \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Izveidojiet valstis un saistiet tās, izmantojot pārejas." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Šai darbplūsmai nav nekādas valsts" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Darba plūsmas valstis: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Pieejamās darbplūsmas" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Darbplūsmām piešķirts šī dokumenta veids" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "Darbplūsmas noņemšana no dokumenta veida arī novērsīs visus darbplūsmas gadījumus." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Darbplūsmas, kurām piešķirts dokumenta tips: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Darbplūsmas saglabā virkni valstu un seko dokumenta pašreizējam stāvoklim. Pārejas tiek izmantotas, lai mainītu pašreizējo stāvokli uz jaunu." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Nav noteiktas darbplūsmas" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Dzēst darbplūsmu: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Rediģēt darbplūsmu: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Pieejamie dokumentu veidi" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Dokumentu veidiem piešķirta šī darbplūsma" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Dokumenta veida noņemšana no darbplūsmas arī novērsīs visus darbplūsmas gadījumus, kad tikko izņemtie dokumenta veidi ir dokumenti." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Dokumentu veidiem, kuriem piešķirta darbplūsma: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Izveidojiet darbplūsmas darbību \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Dzēst darbplūsmas stāvokļa darbību: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Rediģēt darbplūsmas stāvokļa darbību: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Darbplūsmas stāvokļa darbības ir makro, kas tiek izpildīts, kad dokumenti tiek ievadīti vai atstāti valstī, kurā tie atrodas." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Šajā darbplūsmas stāvoklī nav nevienas darbības" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Darbplūsmas stāvokļa darbības: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Jauna darbplūsmas stāvokļa darbības izvēle" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Izveidojiet darbplūsmas stāvokļus: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Dzēst darbplūsmas stāvokli: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Rediģēt darbplūsmas stāvokli: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Šai darbplūsmai nav neviena stāvokļa" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Izveidojiet pārejas darbplūsmai: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Dzēst darbplūsmas pāreju: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Rediģēt darbplūsmas pāreju: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Izveidojiet pāreju un izmantojiet to, lai pārvietotu darbplūsmu no vienas valsts uz citu." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Šai darbplūsmai nav nekādu pāreju" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Darbplūsmas pārejas: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Kļūda, atjauninot darbplūsmas pārejas sprūda notikumus; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Darbplūsmas pārejas sprūda notikumi tika veiksmīgi atjaunināti" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Indikatori ir notikumi, kas izraisa šīs pārejas izpildi automātiski." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Darbplūsmas pārejas sprūda notikumi: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Pieejamās darbplūsmas" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Darbplūsmām piešķirts šī dokumenta veids" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "Darbplūsmas noņemšana no dokumenta veida arī novērsīs visus darbplūsmas gadījumus." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Darbplūsmas, kurām piešķirts dokumenta tips: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Darbplūsmas saglabā virkni valstu un seko dokumenta pašreizējam stāvoklim. Pārejas tiek izmantotas, lai mainītu pašreizējo stāvokli uz jaunu." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Nav noteiktas darbplūsmas" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Dzēst darbplūsmu: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Rediģēt darbplūsmu: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Pieejamie dokumentu veidi" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Dokumentu veidiem piešķirta šī darbplūsma" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Dokumenta veida noņemšana no darbplūsmas arī novērsīs visus darbplūsmas gadījumus, kad tikko izņemtie dokumenta veidi ir dokumenti." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Dokumentu veidiem, kuriem piešķirta darbplūsma: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Priekšskatījums: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Uzsākt visas darbplūsmas?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Tas palaidīs visas darbplūsmas, kas izveidotas pēc tam, kad dokumenti jau ir augšupielādēti." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Veiksmīga darbplūsmas palaišana." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Priekšskatījums: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Dokumenta etiķete" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "Jaunā etiķete, kas jāpiešķir dokumentam. Var būt virkne vai veidne." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Dokumenta apraksts" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "Jauns apraksts, kas jāpiešķir dokumentam. Var būt virkne vai veidne." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Mainiet dokumenta īpašības" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Dokumenta etiķetes veidnes kļūda: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Dokumenta apraksta veidnes kļūda: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Var būt IP adrese, domēns vai veidne. Veidnes saņem darbplūsmas žurnāla ieraksta gadījumu kā daļu no konteksta, izmantojot mainīgo \"entry_log\". Savukārt \"entry_log\" nodrošina atribūtus \"workflow_instance\", \"datetime\", \"pāreja\", \"lietotājs\" un \"komentārs\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Pārtraukums" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Laiks sekundēs, lai gaidītu atbildi." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Kravnesība" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "JSON dokuments, kas jāiekļauj pieprasījumā. Var būt arī veidne, kas atgriež JSON dokumentu. Veidnes saņem darbplūsmas žurnāla ieraksta gadījumu kā daļu no konteksta, izmantojot mainīgo \"entry_log\". Savukārt \"entry_log\" nodrošina atribūtus \"workflow_instance\", \"datetime\", \"pāreja\", \"lietotājs\" un \"komentārs\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Lietotājvārds" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Parole" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Veiciet POST pieprasījumu" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "URL veidnes kļūda: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Kravnesības veidnes kļūda: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Kravas JSON kļūda: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.mo index 6e19b78fa5..179d413d3a 100644 Binary files a/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.po index e2c975f975..f51e2eb5a7 100644 --- a/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/nl_NL/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Lucas Weel \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,69 +19,78 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Geen" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Huidige staat" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Gebruiker" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Laatste transitie" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum en tijd" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Voltooiing" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transitie" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Commentaar" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Actie type" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Soort" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documenten" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -101,11 +110,12 @@ msgstr "Actie" msgid "Namespace" msgstr "Namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Label" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Ingeschakeld" @@ -117,230 +127,314 @@ msgstr "Nee" msgid "Yes" msgstr "Ja" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transitie" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Verwijder" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Documentsoorten" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "bewerken" -#: links.py:67 -msgid "Actions" -msgstr "Acties" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "Maak staat aan" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Staten" - -#: links.py:104 -msgid "Create transition" -msgstr "Transitie aanmaken" - -#: links.py:123 -msgid "Transitions" -msgstr "Transities" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Preview" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Acties" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "Maak staat aan" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Staten" + +#: links.py:121 +msgid "Create transition" +msgstr "Transitie aanmaken" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "Transities" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detai" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Initiële staat" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Initieel" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Workflowstaat" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Workflowstaten" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Originele staat" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Bestemmingsstaat" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Workflowtransitie" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Workflowtransities" -#: models.py:376 -msgid "Event type" -msgstr "Evenementsoort" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Verplicht" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Evenementsoort" + +#: models.py:522 msgid "Document" msgstr "Document" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Workflowinstantie" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Workflowinstanties" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Datumtijd" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commentaar" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -376,6 +470,14 @@ msgstr "" msgid "Document states" msgstr "Documentstaten" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -414,318 +516,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Workflows voor document: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detail van workflow: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Verstuur" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Selecteer" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documenten met de workflow: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Beschikbare documentsoorten" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Beschikbare documentsoorten" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -733,19 +903,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Timeout" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -754,21 +926,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Gebruikersnaam" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Wachtwoord" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.mo index 3d1323a446..671f56d770 100644 Binary files a/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.po index 09e6939192..4e63acd00e 100644 --- a/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: mic \n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "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:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Brak" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Aktualny stan" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Użytkownik" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data i godzina" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Dodatkowe szczegóły" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentarz" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Typ" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenty" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -100,11 +109,12 @@ msgstr "" msgid "Namespace" msgstr "Przestrzeń nazw" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etykieta" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Włączone" @@ -116,230 +126,314 @@ msgstr "Nie" msgid "Yes" msgstr "Tak" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Usuń" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Typy dokumentu" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Edytuj" -#: links.py:67 -msgid "Actions" -msgstr "Akcje" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "Utwórz stan" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Stany" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Podgląd" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Akcje" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "Utwórz stan" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Stany" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Szczegół" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nazwa wewnętrzna" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Obieg dokumentów" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Stan początkowy" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Początkowy" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Stan obiegu" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Stany obiegu" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Typ zdarzenia" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Wymagane" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Typ zdarzenia" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentarz" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -375,6 +469,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -413,318 +515,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Obiegi dokumentu: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Szczegóły obiegu dokumentów: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Wyślij" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Dokonaj zmiany w obiegu dokumentów: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Wybierz" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Stany obiegu dokumentów: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Dostępne typy dokumentów" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Typy dokumentów przypisane do obiegu dokumentów: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Utwórz stany obiegu dokumentów: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Utwórz zmiany w obiegu dokumentów: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Zmiany obiegu dokumentów: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Dostępne typy dokumentów" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Typy dokumentów przypisane do obiegu dokumentów: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Nazwa użytkownika" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Hasło" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.mo index 2466065059..766e899032 100644 Binary files a/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.po index f193569837..06dfa1b12d 100644 --- a/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Vítor Figueiró \n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nenhum" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Utilizador" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalhes adicionais" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Comentário" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documentos" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Nome" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -115,230 +125,314 @@ msgstr "Não" msgid "Yes" msgstr "Sim" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Eliminar" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:67 -msgid "Actions" -msgstr "Ações" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Ações" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Tipo de evento" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tipo de evento" + +#: models.py:522 msgid "Document" msgstr "" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentário" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Submeter" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Selecionar" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Senha" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.mo index 8a6fae39d8..8aa72b1aaa 100644 Binary files a/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.po index 4c4fffff39..823d2e242b 100644 --- a/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/pt_BR/LC_MESSAGES/django.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -21,69 +21,78 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Fluxos de trabalho" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Estado atual de um fluxo de trabalho" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Retorna o estado atual de um fluxo de trabalho selecionado" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Retorna o valor de finalização do estado atual de um fluxo de trabalho selecionado" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nenhum" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Estado atual" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Usuário" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Última transação" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data e hora" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Finalização" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Transações" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Comentário" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Quando?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Tipo de ação" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Acionadores" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tipo" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documento" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Ações do estado do fluxo de trabalho" @@ -103,11 +112,12 @@ msgstr "Ação" msgid "Namespace" msgstr "namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Rótulo" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Habilitado" @@ -119,230 +129,314 @@ msgstr "Não" msgid "Yes" msgstr "Sim" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Transações" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Acionador de evento: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Criar fluxo de trabalho" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Excluir" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipos de Documentos" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:67 -msgid "Actions" -msgstr "Ações" - -#: links.py:73 -msgid "Create action" -msgstr "Criar ação" - -#: links.py:79 -msgid "Create state" -msgstr "Criar estado" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Estados" - -#: links.py:104 -msgid "Create transition" -msgstr "Criar Transições" - -#: links.py:123 -msgid "Transitions" -msgstr "Transições" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Acionadores de transição" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Visualizar" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Iniciar todos os fluxos de trabalho" +#: links.py:78 +msgid "Actions" +msgstr "Ações" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Criar ação" + +#: links.py:93 +msgid "Create state" +msgstr "Criar estado" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Estados" + +#: links.py:121 +msgid "Create transition" +msgstr "Criar Transições" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Acionadores de transição" + +#: links.py:147 +msgid "Transitions" +msgstr "Transições" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detalhes" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Documentos de fluxo de trabalho" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Estados dos documentos" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Iniciar todos os fluxos de trabalho" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "Na entrada" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "Na saída" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Este valor será usado por outros aplicativos para referenciar este fluxo de trabalho. Pode conter apenas letras, números e subtraços." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nome interno" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Fluxo de trabalho" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Estado Inicial" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Selecione se este será o estado no qual você deseja que o fluxo de trabalho comece. Apenas um estado pode ser o estado inicial." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Inicial" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Insira a porcentagem de finalização que este estado representa em relação ao fluxo de trabalho. Utilize números sem o sinal de porcentagem." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Estado do fluxo de trabalho" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Estados do fluxo de trabalho" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Um identificador simples para esta ação" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "Em que momento do estado esta ação será executada" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Quando" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "A caminho em Python para a classe de ação do fluxo de trabalho que será executado." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Caminho da ação de entrada" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Dados da ação de entrada" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Ação do estado do fluxo de trabalho" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Estado original" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Estado de destino" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Transição do fluxo de trabalho" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Transições do fluxo de trabalho" -#: models.py:376 -msgid "Event type" -msgstr "Tipo de Evento" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "exigido" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Evento acionador de transição do fluxo de trabalho" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Eventos acionadores de transições de fluxos de trabalho" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tipo de Evento" + +#: models.py:522 msgid "Document" msgstr "Documento" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Instância do fluxo de trabalho" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "instâncias do fluxo de trabalho" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Hora e data" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentário" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Entrada do registro de instâncias do fluxo de trabalho" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Entradas do registro de instâncias do fluxo de trabalho" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Não é uma opção de transição válida." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Proxy de tempo de execução do fluxo de trabalho" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Proxies de tempo de execução do fluxo de trabalho" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Proxy de tempo de execução do fluxo de trabalho" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Proxies de tempo de execução do fluxo de trabalho" @@ -378,6 +472,14 @@ msgstr "Executar ferramentas de fluxo de trabalho" msgid "Document states" msgstr "Estados de documentos" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Chave primária do tipo de documento a ser adicionado." @@ -416,318 +518,386 @@ msgstr "Lista separada por vírgulas do tipo de documento chaves primárias às msgid "Primary key of the transition to be added." msgstr "Chave primária da transição a ser adicionada." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Atribua fluxos de trabalho ao tipo deste documento para que ele execute tais fluxos." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Não há fluxo de trabalho para este documento" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Fluxos de trabalho para o documento: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detalhe do fluxo de trabalho: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Documento \"%s\" transicionado com sucesso" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Submeter" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Fazer a transição para o fluxo de trabalho: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Selecionar" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Associe um fluxo de trabalho a alguns tipos de documentos e os documentos desses tipos serão listados nesta vista." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Não há documentos executando este fluxo de trabalho" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documentos com o fluxo de trabalho: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Crie alguns fluxos de trabalho e associe-os a um tipo de documento. Os fluxos de trabalho ativos e os documentos para os quais eles estão sendo executados serão mostrados aqui." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Não há fluxos de trabalho" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Documentos no fluxo de trabalho \"%s\", digite \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Crie estados e ligue-os usando transições." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Este fluxo de trabalho não possui nenhum estado" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Estado do fluxo de trabalho: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Fluxos de trabalho armazenam uma série de estados e acompanham o estado atual de um documento. Transições são usadas para mudar o estado atual para um novo." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Nenhum fluxo de trabalho foi definido" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Tipos de documentos disponíveis" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tipos de documentos atribuídos a este fluxo de trabalho" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Remover um tipo de documento de um fluxo de trabalho também removerá todas as instâncias ativas daquele fluxo de trabalho para os documentos do tipo removido." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Os tipos de documentos atribuídos ao fluxo de trabalho: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Criar uma ação de fluxo de trabalho \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Excluir ação do estado do fluxo de trabalho: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Editar ação do estado do fluxo de trabalho: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Ações do estado do fluxo de trabalho são macros que são executadas quando documentos entram ou saem dos estados para os quais elas estão definidas." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Não há ações para este estado do fluxo de trabalho" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Ações para o estado do fluxo de trabalho: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Nova seleção de ação do estado do fluxo de trabalho" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Criar estados para o fluxo de trabalho: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Este fluxo de trabalho não tem nenhum estado" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Criar transição para o fluxo de trabalho: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Crie uma transição e use-a para mover um fluxo de trabalho de um estado para outro." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Este fluxo de trabalho não tem nenhuma transição" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Transições do fluxo de trabalho: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Erro ao carregar os eventos acionadores de transição do fluxo de trabalho; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Eventos acionadores de transição do fluxo de trabalho atualizados com sucesso" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Acionadores são eventos que fazem esta transição ser executada automaticamente." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Eventos acionadores de transição do fluxo de trabalho para: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Fluxos de trabalho armazenam uma série de estados e acompanham o estado atual de um documento. Transições são usadas para mudar o estado atual para um novo." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Nenhum fluxo de trabalho foi definido" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Tipos de documentos disponíveis" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tipos de documentos atribuídos a este fluxo de trabalho" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Remover um tipo de documento de um fluxo de trabalho também removerá todas as instâncias ativas daquele fluxo de trabalho para os documentos do tipo removido." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Os tipos de documentos atribuídos ao fluxo de trabalho: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Prévia de: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Iniciar todos os fluxos de trabalho?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Isto iniciará todos os fluxos de trabalho criados após o carregamento dos documentos." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Lançamento do fluxo de trabalho enfileirado com sucesso." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Prévia de: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "O novo rótulo que será associado ao documento. Pode ser uma string ou um modelo." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "A nova descrição que será associada ao documento. Pode ser uma string ou um modelo." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "Modificar as propriedades do documento" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Erro no modelo de rótulo do documento: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Erro no modelo de descrição do documento: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -735,19 +905,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Pode ser um endereço de IP, um domínio ou um modelo. Modelos recebem a instância de entrada de registro do fluxo de trabalho como parte de seus contextos através da variável \"entry_log\". A \"entry_log\" por sua vez provê os atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\", e \"comment\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Tempo de expiração" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Tempo, em segundos, de espera por uma resposta." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Carga de dados" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -756,21 +928,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Um documento JSON a ser incluído na requisição. Também pode ser um modelo que retorne um documento JSON. Modelos recebem a instância de entrada de registro do fluxo de trabalho como parte de seus contextos através da variável \"entry_log\". A \"entry_log\" por sua vez provê os atributos \"workflow_instance\", \"datetime\", \"transition\", \"user\", e \"comment\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Usuário" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Senha" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Realizar uma requisição POST" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Erro no modelo URL: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Erro no modelo de carga de dados: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Erro no JSON da carga de dados: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.mo index a38b0ad2b5..a675fb7176 100644 Binary files a/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.po index 86e5e9eab4..1809b3d6d2 100644 --- a/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/ro_RO/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-21 06:56+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 10:52+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -18,69 +18,78 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Fluxuri de lucru" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Starea curentă a unui flux de lucru" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Obțineți starea curentă a fluxului de lucru selectat" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Obțineți valoarea finală a stării actuale a fluxului de lucru selectat" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nici unul" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Starea curentă" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Utilizator" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Ultima tranziție" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data și ora" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Finalizare" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Tranziție" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalii suplimentare" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Comentariu" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "Cănd?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "Tipul de acțiune" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "Declanșatoare" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tip" + +#: apps.py:294 +msgid "Widget" +msgstr "Widget" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Documente" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "Acțiuni de stare de lucru" @@ -100,11 +109,12 @@ msgstr "Acțiune" msgid "Namespace" msgstr "Spațiu de nume" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etichetă" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Activat" @@ -116,230 +126,314 @@ msgstr "Nu" msgid "Yes" msgstr "Da" -#: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Comentariu opțional de atașat la tranziție." +#: forms.py:178 +msgid "Select a transition to execute in the next step." +msgstr "Selectați o tranziție de executat în pasul următor." -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Tranziție" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "Imagini de flux de lucru" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Eveniment declanșator: %s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Creați un flux de lucru" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Șterge" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Tipuri de documente" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editează" -#: links.py:67 -msgid "Actions" -msgstr "Acţiuni" - -#: links.py:73 -msgid "Create action" -msgstr "Creați o acțiune" - -#: links.py:79 -msgid "Create state" -msgstr "Creați o stare" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Stări" - -#: links.py:104 -msgid "Create transition" -msgstr "Creați o tranziție" - -#: links.py:123 -msgid "Transitions" -msgstr "Tranziţii" - -#: links.py:130 -msgid "Transition triggers" -msgstr "Declanșatori de tranziții" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Previzualizare" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Lansați toate fluxurile de lucru" +#: links.py:78 +msgid "Actions" +msgstr "Acţiuni" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "Creați o acțiune" + +#: links.py:93 +msgid "Create state" +msgstr "Creați o stare" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Stări" + +#: links.py:121 +msgid "Create transition" +msgstr "Creați o tranziție" + +#: links.py:141 +msgid "Transition triggers" +msgstr "Declanșatori de tranziții" + +#: links.py:147 +msgid "Transitions" +msgstr "Tranziţii" + +#: links.py:156 +msgid "Create field" +msgstr "Creați câmp" + +#: links.py:176 +msgid "Fields" +msgstr "Câmpuri" + +#: links.py:186 msgid "Detail" msgstr "Detaliu" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "Documente de flux de lucru" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Stare documente" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Lansați toate fluxurile de lucru" + +#: literals.py:10 +msgid "Character" +msgstr "Caracter" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "Număr (număr întreg)" + +#: literals.py:21 +msgid "Text area" +msgstr "Zona de text" + +#: literals.py:32 msgid "On entry" msgstr "La intrare" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "La ieșire" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Această valoare va fi utilizată de alte aplicații pentru a face referire la acest flux de lucru. Pot conține numai litere, numere și subliniere." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Nume intern" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "Flux de lucru" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Stare inițială" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Selectați dacă aceasta va fi starea cu care doriți să înceapă fluxul de lucru. Numai o stare poate fi starea inițială." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "Starea în care va începe fluxul de lucru. O singură stare poate fi starea inițială." -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "Iniţială" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "Introduceți procentul de finalizare pe care această stare îl reprezinta în raport cu fluxul de lucru. Utilizați numere fără semnul procentual." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "Procentul de finalizare pe care îl reprezintă această stare în raport cu fluxul de lucru. Utilizați numerele fără semnul procentual." -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "Starea fluxului de lucru" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "Stările fluxului de lucru" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "Un identificator simplu pentru această acțiune." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "În ce moment al stării se va executa această acțiune" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "În ce moment al stării se va executa această acțiune." -#: models.py:287 +#: models.py:359 msgid "When" msgstr "Cănd" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "Calea Python punctată la clasa de acțiune a fluxului de lucru care trebuie executată." -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "Căi de acțiune pentru intrare" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "Datele privind acțiunile de intrare" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "Acțiune de stare de flux de lucru" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "Tip de acțiune necunoscut" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Stare originală" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Stare destinație" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Tranziția fluxului de lucru" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "Tranziții ale fluxului de lucru" -#: models.py:376 -msgid "Event type" -msgstr "Tip eveniment" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "Numele care va fi utilizat pentru a identifica acest câmp în alte părți ale sistemului de flux de lucru." -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "Numele câmpului care va fi afișat pe interfața de utilizator." + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "Un mesaj opțional care îi va ajuta pe utilizatori să înțeleagă mai bine scopul câmpului și datele pe care să le furnizeze." + +#: models.py:463 +msgid "Help text" +msgstr "Text de ajutor" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "Specificați dacă aceste câmpuri trebuie completate sau nu." + +#: models.py:468 +msgid "Required" +msgstr "Necesară" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "O clasă opțională pentru a modifica prezentarea implicită a câmpului." + +#: models.py:473 +msgid "Widget class" +msgstr "Clasa widget" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "Un grup de argumente de cuvinte cheie pentru a personaliza widget-ul. Folosiți formatul YAML." + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "Argumentele cuvintelor cheie pentru Widget " + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "Evenimentul de declanșare a tranziției fluxului de lucru" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "Evenimente de declanșare a tranzițiilor fluxului de lucru" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Tip eveniment" + +#: models.py:522 msgid "Document" msgstr "Document" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "Context" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "Instanță de flux de lucru" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "Instanțe de flux de lucru" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Marcă temporală" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentariu" + +#: models.py:673 +msgid "Extra data" +msgstr "Date suplimentare" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "Înregistrare din jurnalul instanțelor fluxului de lucru" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "Înregistrări din jurnalul instanțelor fluxului de lucru" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Nu este o alegere de tranziție valabilă." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "Proxy runtime pentru fluxul de lucru" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "Proxy-uri de runtime pentru fluxul de lucru" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "Proxy de runtime pentru starea fluxului de lucru" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "Proxy-uri runtime de stare de flux de lucru" @@ -375,6 +469,14 @@ msgstr "Executați unelte de flux de lucru" msgid "Document states" msgstr "Starea documentelor" +#: queues.py:12 +msgid "Document states fast" +msgstr "Stările documentului rapid" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "Generați previzualizări ale fluxului de lucru" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Cheia primară a tipului de document care urmează să fie adăugată." @@ -413,318 +515,386 @@ msgstr "Listă separată prin virgule de chei primare de tip de documente la car msgid "Primary key of the transition to be added." msgstr "Cheia primară a tranziției care urmează să fie adăugată." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "Pragul la care WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND va începe să șteargă cele mai vechi fișiere de memorie cache a imaginilor fluxului de lucru. Specificați dimensiunea în octeți." + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "Timp în secunde care browser-ul trebuie să cacheze imaginile fluxului de lucru furnizate. Valoarea implicită de 31559626 secunde corespunde unui an." + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "Calea către subclasa de stocare pe care să o utilizați la stocarea fișierelor de imagine ale fluxului de lucru din cache" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "Argumente de transmis la WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "Previzualizare flux de lucru" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "Atribuiți fluxurile de lucru la acest tip de document pentru ca acest document să execute acele fluxuri de lucru." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "Nu există flux de lucru pentru acest document" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Fluxuri de lucru pentru documentul: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "Această vizualizare va afișa modificările de stare pe măsură ce o instanță a fluxului de lucru este tranziționată." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "Nu există detalii despre acest exemplu de flux de lucru" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "Detalii despre fluxul de lucru: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "Documentul \"%s\" a schimbat starea cu succes" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Trimiteţi" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "Execută tranziția pentru fluxul de lucru: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "Executați tranziția \"%(transition)s\" pentru fluxul de lucru: %(workflow)s" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "Comentariu opțional de atașat la tranziție." + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Selecta" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "Selectați tranziția pentru fluxul de lucru: %s" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "Asociați un flux de lucru cu unele tipuri de documente și documente de acele tipuri vor fi listate în această vizualizare." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "Nu există documente care să execute acest flux de lucru" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "Documentele cu fluxul de lucru: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "Creați câteva fluxuri de lucru și asociați-le cu un tip de document. Fluxurile de lucru active vor fi afișate aici precum și documentele pentru care se execută." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "Nu există fluxuri de lucru" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "Nu există documente în această stare de lucru" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "Documentele din fluxul de lucru \"%s\", starea \"%s\"" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "Creați stări și conectați-le folosind tranziții." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "Acest flux de lucru nu are nicio stare" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Stările fluxului de lucru: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "Fluxuri de lucru disponibile" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "Fluxurile de lucru atribuite acestui tip de document" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "Eliminarea unui flux de lucru dintr-un tip de document va elimina, de asemenea, toate instanțele care rulează din acel flux de lucru." - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "Fluxurile de lucru atribuite tipului de document: %s" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "Fluxurile de lucru stochează o serie de stări și urmăresc starea actuală a unui document. Tranzițiile sunt folosite pentru a schimba starea curentă la una nouă." - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "Nu s-au definit fluxuri de lucru" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "Ștergeți fluxul de lucru: %s?" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "Editați fluxul de lucru: %s" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Tipuri de documente disponibile" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Tipurile de documente atribuite acestui flux de lucru" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "Înlăturarea unui tip de document dintr-un flux de lucru va elimina, de asemenea, toate instanțele în execuție ale acelui flux de lucru pentru documentele de tipul documentului tocmai eliminat." - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "Tipurile de documente alocate fluxului de lucru: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "Creați o acțiune de flux de lucru \"%s\"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "Ștergeți acțiunea de stare a fluxului de lucru: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "Editați acțiunea de stare a fluxului de lucru: %s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "Acțiunile de stare a fluxului de lucru sunt macrocomenzi care se execută atunci când documentele intră sau părăsesc starea în care se află." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "Nu există nicio acțiune pentru această stare de lucru" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "Acțiuni pentru starea fluxului de lucru: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "Selectare a unei noi acțiunii de stare a fluxului de lucru" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "Creați stări pentru fluxul de lucru: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "Ștergeți starea fluxului de lucru: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "Editați starea fluxului de lucru: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "Acest flux de lucru nu are stări" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "Creați tranziții pentru fluxul de lucru: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "Ștergeți tranziția fluxului de lucru: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "Editați tranziția fluxului de lucru: %s" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "Creați o tranziție și utilizați-o pentru a muta un flux de lucru dintr-o stare în alta." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "Acest flux de lucru nu are nicio tranziție" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "Tranzițiile fluxului de lucru: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "Eroare la actualizarea evenimentelor de declanșare a fluxului de lucru; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "Evenimentele de declanșare a fluxului de lucru au fost actualizate cu succes" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "Declanșatoarele sunt evenimente care determină ca această tranziție să fie executată automat." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "Evenimente de declanșare a fluxului de lucru pentru: %s" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "Creați un câmp pentru tranziția fluxului de lucru: %s" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "Ștergeți câmpul de tranziție a fluxului de lucru: %s" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "Editați câmpul de tranziție a fluxului de lucru: %s" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "Câmpurile de tranziție ale fluxului de lucru permit adăugarea de date în contextul fluxului de lucru. Aceste date de context adiționale pot fi apoi utilizate de alte elemente ale sistemului de flux de lucru, cum ar fi acțiunile stării fluxului de lucru." + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "Nu există câmpuri pentru această tranziție a fluxului de lucru" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "Câmpuri pentru tranziția fluxului de lucru: %s" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "Fluxuri de lucru disponibile" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "Fluxurile de lucru atribuite acestui tip de document" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "Eliminarea unui flux de lucru dintr-un tip de document va elimina, de asemenea, toate instanțele care rulează din acel flux de lucru." + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "Fluxurile de lucru atribuite tipului de document: %s" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "Fluxurile de lucru stochează o serie de stări și urmăresc starea actuală a unui document. Tranzițiile sunt folosite pentru a schimba starea curentă la una nouă." + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "Nu s-au definit fluxuri de lucru" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "Ștergeți fluxul de lucru: %s?" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "Editați fluxul de lucru: %s" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Tipuri de documente disponibile" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Tipurile de documente atribuite acestui flux de lucru" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "Înlăturarea unui tip de document dintr-un flux de lucru va elimina, de asemenea, toate instanțele în execuție ale acelui flux de lucru pentru documentele de tipul documentului tocmai eliminat." + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "Tipurile de documente alocate fluxului de lucru: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "Previzualizarea: %s" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Lansați toate fluxurile de lucru?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "Aceasta va lansa toate fluxurile de lucru create după ce documentele au fost deja încărcate." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "Lansarea fluxului de lucru a intrat în coada de așteptare." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "Previzualizarea: %s" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "Previzualizare flux de lucru" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "Etichetele documentului" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "Noua etichetă care va fi atribuită documentului. Poate fi un șir sau un șablon." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "Descrierea documentului" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "Noua descriere care trebuie atribuită documentului. Poate fi un șir sau un șablon." -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "Modificați proprietățile documentului" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "Eroare șablon etichetă de etichetă: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "Eroare șablon descriere document: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "URL" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "Poate fi o adresă IP, un domeniu sau un șablon. Șabloanele primesc instanța înregistrării fluxului de lucru ca parte a contextului lor prin intermediul variabilei \"entry_log\". \"Entry_log\", la rândul său, oferă atributele \"workflow_instance\", \"datetime\", \"transition\", \"user\" și \"comment\"." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Pauză" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "Timp în secunde de așteptare a unui răspuns." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "Timpul în secunde de așteptare după un răspuns. Poate fi o valoare statică sau un șablon." -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "Încărcătură utilă" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "Un document JSON care trebuie inclus în cerere. Poate fi, de asemenea, un șablon care returnează un document JSON. Șabloanele primesc instanța înregistrării fluxului de lucru ca parte a contextului lor prin intermediul variabilei \"entry_log\". \"Entry_log\", la rândul său, oferă atributele \"workflow_instance\", \"datetime\", \"transition\", \"user\" și \"comment\"." -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Nume de utilizator" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Nume de utilizator pe care să-l utilizăm pentru efectuarea cererii cu HTTP Basic Auth Poate fi o valoare statică sau un șablon. Șabloanele primesc instanța de intrare în jurnalul fluxului de lucru ca parte a contextului lor prin variabila „entry_log\". La rândul său, „entry_log” furnizează atributele „workflow_instance”, „datetime”, „tranziție”, „user” și „comment”." + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Parola" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "Parolă de utilizat pentru efectuarea cererii cu HTTP Basic Auth. Poate fi o valoare statică sau un șablon. Șabloanele primesc instanța de intrare în jurnalul fluxului de lucru ca parte a contextului lor prin variabila „entry_log”. La rândul său, „entry_log” furnizează atributele „workflow_instance”, „datetime”, „tranziție”, „user” și „comment”." + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "Anteturi" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "Anteturi de trimis cu cererea HTTP. Trebuie să fie în format JSON. Poate fi o valoare statică sau un șablon. Șabloanele primesc instanța de intrare în jurnalul fluxului de lucru ca parte a contextului lor prin variabila „entry_log”,. La rândul său, „entry_log” furnizează atributele „workflow_instance”, „datetime”, „tranziție”, „user” și „comment”." + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "Efectuați o solicitare POST" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "Eroare șablon de adresă URL: %s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "%(field_name)s eroare JSON: %(exception)s" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "Eroare șablon pentru sarcina utilă: %s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "Eroare încărcare JSON: %s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "%(field_name)s eroare de șablon: %(exception)s" diff --git a/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.mo index bb96debedf..657f5b5682 100644 Binary files a/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.po index f9fd9ddac2..f07f921bd4 100644 --- a/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: panasoft \n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "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" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ничего" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Текущее состояние" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Пользователь" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Дата и время" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Завершение" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Переход" +#: apps.py:229 +msgid "Additional details" +msgstr "Дополнительная информация" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Комментарий" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Тип" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Документы" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -100,11 +109,12 @@ msgstr "" msgid "Namespace" msgstr "Пространство имен" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Надпись" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Доступно" @@ -116,230 +126,314 @@ msgstr "Нет" msgid "Yes" msgstr "Да" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Переход" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Удалить" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Типы документов" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Редактировать" -#: links.py:67 -msgid "Actions" -msgstr "Действия" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Предварительный просмотр" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Действия" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Внутреннее имя" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "Исходное состояние" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Тип события" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Требуется" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Тип события" + +#: models.py:522 msgid "Document" msgstr "Документ" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Комментарий" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -375,6 +469,14 @@ msgstr "" msgid "Document states" msgstr "Статусы документа" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -413,318 +515,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Подтвердить" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Выбор" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Доступные типы документов" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Доступные типы документов" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Таймаут" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Имя пользователя" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Пароль" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.mo index 9211fa87ad..6a676fc387 100644 Binary files a/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.po index 286d0a199f..e27869dadf 100644 --- a/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/sl_SI/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: kontrabant \n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Brez" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenti" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "Imenski prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Oznaka" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -115,230 +125,314 @@ msgstr "Ne" msgid "Yes" msgstr "Da" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Izbriši" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "" -#: links.py:67 -msgid "Actions" -msgstr "Akcije" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Akcije" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "" + +#: models.py:522 msgid "Document" msgstr "Dokument" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Pošlji" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Izberi" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.mo index 945e4444ad..d2ff43b85e 100644 Binary files a/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.po index 4d3698dce2..6c04bdd589 100644 --- a/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/tr_TR/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: serhatcan77 \n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "İş Akışları" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Bir iş akışının geçerli durumu" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Seçilen iş akışının geçerli durumunu döndürür" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Seçili iş akışının geçerli durumunun tamamlanma değerini döndürür" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Yok" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "Mevcut durum" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Kullanıcı" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "Son geçiş" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Tarih ve saat" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "Tamamlama" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "Geçiş" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Yorum Yap" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "Tür" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Belgeler" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -100,11 +109,12 @@ msgstr "" msgid "Namespace" msgstr "Alanadı" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "Etiket" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "Etkin" @@ -116,230 +126,314 @@ msgstr "Hayır" msgid "Yes" msgstr "Evet" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "Geçiş" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "İş akışı oluştur" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Sil" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "Belge tipleri" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Düzenle" -#: links.py:67 -msgid "Actions" -msgstr "Eylemler" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "Durum oluştur" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "Durumlar" - -#: links.py:104 -msgid "Create transition" -msgstr "Geçiş oluştur" - -#: links.py:123 -msgid "Transitions" -msgstr "Geçişler" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "Önizleme" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "Tüm iş akışlarını başlat" +#: links.py:78 +msgid "Actions" +msgstr "Eylemler" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "" + +#: links.py:93 +msgid "Create state" +msgstr "Durum oluştur" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "Durumlar" + +#: links.py:121 +msgid "Create transition" +msgstr "Geçiş oluştur" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "Geçişler" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detay" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "İş akışı belgeleri" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "Durum belgeleri" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Tüm iş akışlarını başlat" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "Bu değer, bu iş akışını referans olarak diğer uygulamalar tarafından kullanılacaktır. Yalnızca harf, rakam ve altçizgi içerebilir." -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "Dahili adı" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "İş Akışı" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "İlk durum" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "Bunun, iş akışının başlatılmasını istediğiniz durum olup olmayacağını seçin. Başlangıç ​​durumu yalnızca bir durum olabilir." +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "ilk" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "İş akışıyla ilişkili olarak bu durumun temsil ettiği tamamlama yüzdesini girin. Yüzde işareti olmadan rakamları kullanın." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "İş akışı durumu" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "İş akışı durumları" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "Kaynak Durum" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "Hedef durum" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "Iş akışı geçiş" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "İş akışı geçişleri" -#: models.py:376 -msgid "Event type" -msgstr "Etkinlik türü" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "Gereklidir" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Etkinlik türü" + +#: models.py:522 msgid "Document" msgstr "belge" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "İş akışı örneği" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "İş akışı örnekleri" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "Tarih saat" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Yorum Yap" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "İş akışı örneği günlük girişi" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "İş akışı örneği günlük girdileri" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "Geçerli bir geçiş seçeneği değil." -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "İş akışı çalışma zamanı vekili" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "İş akışı çalışma zamanı vekilleri" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "İş akışı durum çalışma zamanı vekili" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "İş akışı durum çalışma zamanı vekilleri" @@ -375,6 +469,14 @@ msgstr "İş akışı araçlarını çalıştır" msgid "Document states" msgstr "Belge durumları" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "Belge türünün birincil anahtarı eklenecek." @@ -413,318 +515,386 @@ msgstr "Bu iş akışının ekleneceği belge türü birincil anahtarlarının v msgid "Primary key of the transition to be added." msgstr "Geçişin birincil anahtarı eklenecek." -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "Belge için iş akışı: %s" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "İş akışının ayrıntısı: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "\"%s\" dokümanı başarıyla değiştirildi" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "Gönder" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "İş akışı için geçiş yapın: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Seçiniz" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "İş akışına sahip belgeler: %s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "Iş akışı durumları: %s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "Kullanılabilir belge türleri" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "Bu iş akışına atanan belge türleri" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "İş akışına atanan belge türleri: %s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "İş akışı için durumlar oluşturun: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "İş akışı için geçişler oluşturun: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "İş akışının geçişleri: %s" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "Kullanılabilir belge türleri" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "Bu iş akışına atanan belge türleri" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "İş akışına atanan belge türleri: %s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "Tüm iş akışlarını başlatmak istiyor musunuz?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "İş akışı başlatma başarıyla sıraya girdi." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "Zaman aşımı" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "Kullanıcı adı" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "Parola" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.mo index 01e434d690..d6068fa5f3 100644 Binary files a/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.po index e090bbf9d2..49d81b6971 100644 --- a/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/vi_VN/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Trung Phan Minh \n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +17,78 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "None" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "Người dùng" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "chi tiết bổ sung" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "Chú thích" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Tài liệu" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "" @@ -99,11 +108,12 @@ msgstr "" msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "" @@ -115,230 +125,314 @@ msgstr "" msgid "Yes" msgstr "" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Sửa" -#: links.py:67 -msgid "Actions" -msgstr "Các thao tác" - -#: links.py:73 -msgid "Create action" -msgstr "" - -#: links.py:79 -msgid "Create state" -msgstr "" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "" - -#: links.py:104 -msgid "Create transition" -msgstr "" - -#: links.py:123 -msgid "Transitions" -msgstr "" - -#: links.py:130 -msgid "Transition triggers" -msgstr "" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Các thao tác" + +#: links.py:84 +msgid "Create action" msgstr "" -#: links.py:157 +#: links.py:93 +msgid "Create state" +msgstr "" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "" + +#: links.py:121 +msgid "Create transition" +msgstr "" + +#: links.py:141 +msgid "Transition triggers" +msgstr "" + +#: links.py:147 +msgid "Transitions" +msgstr "" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "" -#: literals.py:9 -msgid "On entry" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" msgstr "" #: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 +msgid "On entry" +msgstr "" + +#: literals.py:33 msgid "On exit" msgstr "" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:358 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "" -#: models.py:376 -msgid "Event type" -msgstr "Loại sự kiện" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "Loại sự kiện" + +#: models.py:522 msgid "Document" msgstr "" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Chú thích" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "" @@ -374,6 +468,14 @@ msgstr "" msgid "Document states" msgstr "" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "" @@ -412,318 +514,386 @@ msgstr "" msgid "Primary key of the transition to be added." msgstr "" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "Chọn" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" +#: workflow_actions.py:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -731,19 +901,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -752,21 +924,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" +msgid "%(field_name)s template error: %(exception)s" msgstr "" diff --git a/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.mo index b3bb37a1d1..c341490483 100644 Binary files a/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.po b/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.po index 5828f7a8c3..916561003c 100644 --- a/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-19 02:41+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: yulin Gong <540538248@qq.com>\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,69 +18,78 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:61 events.py:8 links.py:18 links.py:47 links.py:150 links.py:179 -#: models.py:61 views/workflow_proxy_views.py:75 views/workflow_views.py:139 +#: apps.py:66 events.py:8 links.py:20 links.py:49 links.py:191 links.py:215 +#: models.py:71 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "工作流" -#: apps.py:103 apps.py:110 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "工作流的当前状态" -#: apps.py:104 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "返回所选工作流的当前状态" -#: apps.py:111 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "返回所选工作流的当前状态的完成值" -#: apps.py:164 apps.py:175 apps.py:185 apps.py:191 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "没有" -#: apps.py:169 +#: apps.py:178 msgid "Current state" msgstr "当前状态" -#: apps.py:173 apps.py:200 models.py:517 +#: apps.py:182 apps.py:209 models.py:670 msgid "User" msgstr "用户" -#: apps.py:179 +#: apps.py:188 msgid "Last transition" msgstr "最后的流转" -#: apps.py:183 apps.py:196 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "日期和时间" -#: apps.py:189 models.py:211 +#: apps.py:198 models.py:283 msgid "Completion" msgstr "完成" -#: apps.py:203 forms.py:178 links.py:162 models.py:372 models.py:513 -msgid "Transition" -msgstr "流转" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:207 forms.py:182 models.py:519 -msgid "Comment" -msgstr "评论" - -#: apps.py:230 +#: apps.py:252 msgid "When?" msgstr "何时?" -#: apps.py:234 +#: apps.py:256 msgid "Action type" msgstr "操作类型" -#: apps.py:250 +#: apps.py:272 msgid "Triggers" msgstr "触发器" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:447 +msgid "Type" +msgstr "类型" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "文档" + +#: error_logs.py:8 models.py:374 msgid "Workflow state actions" msgstr "工作流状态操作" @@ -100,11 +109,12 @@ msgstr "操作" msgid "Namespace" msgstr "命名空间" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:346 +#: forms.py:121 models.py:58 models.py:271 models.py:352 models.py:418 +#: models.py:458 msgid "Label" msgstr "标签" -#: forms.py:125 models.py:282 +#: forms.py:125 models.py:354 msgid "Enabled" msgstr "启用" @@ -116,230 +126,314 @@ msgstr "否" msgid "Yes" msgstr "是" -#: forms.py:181 -msgid "Optional comment to attach to the transition." +#: forms.py:178 +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:179 links.py:197 models.py:444 models.py:499 models.py:666 +msgid "Transition" +msgstr "流转" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "事件触发器:%s" -#: links.py:24 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "创建工作流" -#: links.py:30 links.py:54 links.py:86 links.py:111 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "删除" -#: links.py:36 models.py:52 +#: links.py:38 models.py:62 msgid "Document types" msgstr "文件类型" -#: links.py:43 links.py:61 links.py:93 links.py:118 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "编辑" -#: links.py:67 -msgid "Actions" -msgstr "操作" - -#: links.py:73 -msgid "Create action" -msgstr "创建操作" - -#: links.py:79 -msgid "Create state" -msgstr "创建状态" - -#: links.py:98 links.py:192 -msgid "States" -msgstr "状态" - -#: links.py:104 -msgid "Create transition" -msgstr "创建流转" - -#: links.py:123 -msgid "Transitions" -msgstr "流转" - -#: links.py:130 -msgid "Transition triggers" -msgstr "流转触发器" - -#: links.py:137 +#: links.py:56 msgid "Preview" msgstr "预览" -#: links.py:142 queues.py:13 -msgid "Launch all workflows" -msgstr "启动所有工作流" +#: links.py:78 +msgid "Actions" +msgstr "操作" -#: links.py:157 +#: links.py:84 +msgid "Create action" +msgstr "创建操作" + +#: links.py:93 +msgid "Create state" +msgstr "创建状态" + +#: links.py:112 links.py:228 +msgid "States" +msgstr "状态" + +#: links.py:121 +msgid "Create transition" +msgstr "创建流转" + +#: links.py:141 +msgid "Transition triggers" +msgstr "流转触发器" + +#: links.py:147 +msgid "Transitions" +msgstr "流转" + +#: links.py:156 +msgid "Create field" +msgstr "" + +#: links.py:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "详情" -#: links.py:171 +#: links.py:207 msgid "Workflow documents" msgstr "工作流文档" -#: links.py:185 +#: links.py:221 msgid "State documents" msgstr "状态文档" -#: literals.py:9 +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "启动所有工作流" + +#: literals.py:10 +msgid "Character" +msgstr "" + +#: literals.py:11 +msgid "Number (Integer)" +msgstr "" + +#: literals.py:21 +msgid "Text area" +msgstr "" + +#: literals.py:32 msgid "On entry" msgstr "进入时" -#: literals.py:10 +#: literals.py:33 msgid "On exit" msgstr "退出时" -#: models.py:42 +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." msgstr "其他应用程序将使用此值来引用此工作流程。只能包含字母,数字和下划线。" -#: models.py:45 +#: models.py:55 models.py:453 msgid "Internal name" msgstr "内部名称" -#: models.py:60 models.py:197 models.py:344 models.py:391 +#: models.py:70 models.py:269 models.py:416 models.py:518 msgid "Workflow" msgstr "工作流" -#: models.py:74 +#: models.py:146 msgid "Initial state" msgstr "初始状态" -#: models.py:203 +#: models.py:275 msgid "" -"Select if this will be the state with which you want the workflow to start " -"in. Only one state can be the initial state." -msgstr "选择是否这是您希望工作流启动的状态。只有一个状态可以是初始状态。" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" -#: models.py:205 +#: models.py:277 msgid "Initial" msgstr "初始" -#: models.py:209 +#: models.py:281 msgid "" -"Enter the percent of completion that this state represents in relation to " -"the workflow. Use numbers without the percent sign." -msgstr "输入此状态相对于工作流所代表的完成百分比。使用没有百分号的数字。" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" -#: models.py:217 models.py:276 +#: models.py:289 models.py:348 msgid "Workflow state" msgstr "工作流状态" -#: models.py:218 +#: models.py:290 msgid "Workflow states" msgstr "工作流状态" -#: models.py:279 +#: models.py:351 msgid "A simple identifier for this action." msgstr "此操作的简单标识符。" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "在该状态下此操作将执行" +#: models.py:358 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:359 msgid "When" msgstr "何时" -#: models.py:291 +#: models.py:363 msgid "The dotted Python path to the workflow action class to execute." msgstr "要执行的工作流操作类的虚线Python路径。" -#: models.py:292 +#: models.py:364 msgid "Entry action path" msgstr "进入操作路径" -#: models.py:295 +#: models.py:367 msgid "Entry action data" msgstr "进入操作数据" -#: models.py:301 +#: models.py:373 msgid "Workflow state action" msgstr "工作流状态操作" -#: models.py:334 +#: models.py:406 msgid "Unknown action type" msgstr "" -#: models.py:349 +#: models.py:421 msgid "Origin state" msgstr "原始状态" -#: models.py:353 +#: models.py:425 msgid "Destination state" msgstr "目标状态" -#: models.py:361 +#: models.py:433 msgid "Workflow transition" msgstr "工作流流转" -#: models.py:362 +#: models.py:434 msgid "Workflow transitions" msgstr "工作流流转" -#: models.py:376 -msgid "Event type" -msgstr "事件类型" +#: models.py:451 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:380 +#: models.py:457 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:461 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:463 +msgid "Help text" +msgstr "" + +#: models.py:467 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:468 +msgid "Required" +msgstr "需要的" + +#: models.py:472 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:473 +msgid "Widget class" +msgstr "" + +#: models.py:477 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:480 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:485 models.py:507 msgid "Workflow transition trigger event" msgstr "工作流流转触发事件" -#: models.py:381 +#: models.py:486 models.py:508 msgid "Workflow transitions trigger events" msgstr "工作流流转触发事件" -#: models.py:395 +#: models.py:503 +msgid "Event type" +msgstr "事件类型" + +#: models.py:522 msgid "Document" msgstr "文档" -#: models.py:401 models.py:506 +#: models.py:525 +msgid "Context" +msgstr "" + +#: models.py:531 models.py:659 msgid "Workflow instance" msgstr "工作流实例" -#: models.py:402 +#: models.py:532 msgid "Workflow instances" msgstr "工作流实例" -#: models.py:509 +#: models.py:662 msgid "Datetime" msgstr "日期时间" -#: models.py:523 +#: models.py:672 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "评论" + +#: models.py:673 +msgid "Extra data" +msgstr "" + +#: models.py:677 msgid "Workflow instance log entry" msgstr "工作流实例日志条目" -#: models.py:524 +#: models.py:678 msgid "Workflow instance log entries" msgstr "工作流实例日志条目" -#: models.py:531 +#: models.py:685 msgid "Not a valid transition choice." msgstr "不是有效的流转选择。" -#: models.py:564 +#: models.py:732 msgid "Workflow runtime proxy" msgstr "工作流运行时的代理" -#: models.py:565 +#: models.py:733 msgid "Workflow runtime proxies" msgstr "工作流运行时的代理" -#: models.py:571 +#: models.py:750 msgid "Workflow state runtime proxy" msgstr "工作流状态运行时的代理" -#: models.py:572 +#: models.py:751 msgid "Workflow state runtime proxies" msgstr "工作流状态运行时的代理" @@ -375,6 +469,14 @@ msgstr "执行工作流工具" msgid "Document states" msgstr "文档状态" +#: queues.py:12 +msgid "Document states fast" +msgstr "" + +#: queues.py:21 +msgid "Generate workflow previews" +msgstr "" + #: serializers.py:22 msgid "Primary key of the document type to be added." msgstr "要添加的文档类型的主键。" @@ -413,318 +515,386 @@ msgstr "以逗号分隔的文档类型主键列表,此工作流将附加到该 msgid "Primary key of the transition to be added." msgstr "要添加的流转的主键。" -#: views/workflow_instance_views.py:44 +#: settings.py:19 +msgid "" +"The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will start " +"deleting the oldest workflow image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:27 +msgid "" +"Time in seconds that the browser should cache the supplied workflow images. " +"The default of 31559626 seconds corresponde to 1 year." +msgstr "" + +#: settings.py:34 +msgid "" +"Path to the Storage subclass to use when storing the cached workflow image " +"files." +msgstr "" + +#: settings.py:42 +msgid "Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND." +msgstr "" + +#: templates/document_states/forms/widgets/workflow_image.html:2 +msgid "Workflow preview" +msgstr "" + +#: views/workflow_instance_views.py:43 msgid "" "Assign workflows to the document type of this document to have this document" " execute those workflows. " msgstr "将工作流分配给此文档的文档类型,以使此文档执行这些工作流。" -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" msgstr "此文档没有工作流" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" msgstr "文件:%s的工作流" -#: views/workflow_instance_views.py:83 +#: views/workflow_instance_views.py:82 msgid "" "This view will show the state changes as a workflow instance is " "transitioned." msgstr "" -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" msgstr "" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" msgstr "工作流:%(workflow)s的细节" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" msgstr "文档“%s”已成功流转" -#: views/workflow_instance_views.py:123 +#: views/workflow_instance_views.py:125 msgid "Submit" msgstr "提交" -#: views/workflow_instance_views.py:125 +#: views/workflow_instance_views.py:127 #, python-format -msgid "Do transition for workflow: %s" -msgstr "为工作流:%s进行流转" +msgid "Execute transition \"%(transition)s\" for workflow: %(workflow)s" +msgstr "" -#: views/workflow_proxy_views.py:46 +#: views/workflow_instance_views.py:142 +msgid "Optional comment to attach to the transition." +msgstr "" + +#: views/workflow_instance_views.py:211 +msgid "Select" +msgstr "" + +#: views/workflow_instance_views.py:213 +#, python-format +msgid "Select transition for workflow: %s" +msgstr "" + +#: views/workflow_proxy_views.py:35 msgid "" "Associate a workflow with some document types and documents of those types " "will be listed in this view." msgstr "将工作流与某些文档类型相关联,并在此视图中列出这些类型的文档。" -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" msgstr "没有执行此工作流的文档" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" msgstr "具有工作流的文档:%s" -#: views/workflow_proxy_views.py:70 +#: views/workflow_proxy_views.py:61 msgid "" "Create some workflows and associated them with a document type. Active " "workflows will be shown here and the documents for which they are executing." msgstr "创建一些工作流并将其与文档类型相关联。此处将显示活动工作流以及它们正在执行的文档。" -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" msgstr "没有工作流" -#: views/workflow_proxy_views.py:94 +#: views/workflow_proxy_views.py:91 msgid "There are no documents in this workflow state" msgstr "" -#: views/workflow_proxy_views.py:97 +#: views/workflow_proxy_views.py:94 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" msgstr "工作流“%s”中的文档,状态“%s”" -#: views/workflow_proxy_views.py:142 views/workflow_views.py:511 +#: views/workflow_proxy_views.py:122 +#: views/workflow_template_state_views.py:290 msgid "Create states and link them using transitions." msgstr "创建状态并使用流转链接它们。" -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" msgstr "此工作流没有任何状态" -#: views/workflow_proxy_views.py:148 views/workflow_views.py:517 +#: views/workflow_proxy_views.py:128 +#: views/workflow_template_state_views.py:296 #, python-format msgid "States of workflow: %s" msgstr "工作流状态:%s" -#: views/workflow_views.py:72 -msgid "Available workflows" -msgstr "" - -#: views/workflow_views.py:73 -msgid "Workflows assigned this document type" -msgstr "" - -#: views/workflow_views.py:83 -msgid "" -"Removing a workflow from a document type will also remove all running " -"instances of that workflow." -msgstr "" - -#: views/workflow_views.py:87 -#, python-format -msgid "Workflows assigned the document type: %s" -msgstr "" - -#: views/workflow_views.py:132 -msgid "" -"Workflows store a series of states and keep track of the current state of a " -"document. Transitions are used to change the current state to a new one." -msgstr "工作流存储一系列状态并跟踪文档的当前状态。流转用于将当前状态更改为新状态。" - -#: views/workflow_views.py:137 -msgid "No workflows have been defined" -msgstr "没有定义任何工作流" - -#: views/workflow_views.py:166 -#, python-format -msgid "Delete workflow: %s?" -msgstr "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: views/workflow_views.py:196 -msgid "Available document types" -msgstr "可用的文档类型" - -#: views/workflow_views.py:197 -msgid "Document types assigned this workflow" -msgstr "分配此工作流的文档类型" - -#: views/workflow_views.py:207 -msgid "" -"Removing a document type from a workflow will also remove all running " -"instances of that workflow for documents of the document type just removed." -msgstr "从工作流中删除文档类型还将删除属于其的文档的工作流中所有正在运行的实例。" - -#: views/workflow_views.py:212 -#, python-format -msgid "Document types assigned the workflow: %s" -msgstr "分配工作流的文档类型:%s" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" msgstr "创建1个“%s”工作流操作" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" msgstr "删除工作流状态操作:%s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" msgstr "编辑工作流状态操作:%s" -#: views/workflow_views.py:367 +#: views/workflow_template_state_views.py:149 msgid "" "Workflow state actions are macros that get executed when documents enters or" " leaves the state in which they reside." msgstr "工作流状态操作是在文档进入或离开它们所处的状态时执行的宏。" -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" msgstr "此工作流状态没有任何操作" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" msgstr "工作流状态的操作:%s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" msgstr "新工作流状态操作选择" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" msgstr "为工作流创建状态:%s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" msgstr "" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" msgstr "" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" msgstr "此工作流没有任何状态" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" msgstr "为工作流:%s创建流转" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" msgstr "" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" msgstr "" -#: views/workflow_views.py:635 +#: views/workflow_template_transition_views.py:133 msgid "" "Create a transition and use it to move a workflow from one state to " "another." msgstr "创建流转并使用它将工作流从一个状态移至另一个状态。" -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" msgstr "此工作流没有任何流转" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" msgstr "工作流:%s的流转" -#: views/workflow_views.py:673 +#: views/workflow_template_transition_views.py:171 #, python-format msgid "Error updating workflow transition trigger events; %s" msgstr "更新工作流流转触发事件时出错:%s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" msgstr "工作流流转触发事件已成功更新" -#: views/workflow_views.py:694 +#: views/workflow_template_transition_views.py:192 msgid "" "Triggers are events that cause this transition to execute automatically." msgstr "触发器是使此流转自动执行的事件。" -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" msgstr "%s的工作流流转触发事件" -#: views/workflow_views.py:737 +#: views/workflow_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:276 +#, python-format +msgid "Delete workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:302 +#, python-format +msgid "Edit workflow transition field: %s" +msgstr "" + +#: views/workflow_template_transition_views.py:331 +msgid "" +"Workflow transition fields allow adding data to the workflow's context. This" +" additional context data can then be used by other elements of the workflow " +"system like the workflow state actions." +msgstr "" + +#: views/workflow_template_transition_views.py:337 +msgid "There are no fields for this workflow transition" +msgstr "" + +#: views/workflow_template_transition_views.py:341 +#, python-format +msgid "Fields for workflow transition: %s" +msgstr "" + +#: views/workflow_template_views.py:36 +msgid "Available workflows" +msgstr "" + +#: views/workflow_template_views.py:37 +msgid "Workflows assigned this document type" +msgstr "" + +#: views/workflow_template_views.py:47 +msgid "" +"Removing a workflow from a document type will also remove all running " +"instances of that workflow." +msgstr "" + +#: views/workflow_template_views.py:51 +#, python-format +msgid "Workflows assigned the document type: %s" +msgstr "" + +#: views/workflow_template_views.py:96 +msgid "" +"Workflows store a series of states and keep track of the current state of a " +"document. Transitions are used to change the current state to a new one." +msgstr "工作流存储一系列状态并跟踪文档的当前状态。流转用于将当前状态更改为新状态。" + +#: views/workflow_template_views.py:101 +msgid "No workflows have been defined" +msgstr "没有定义任何工作流" + +#: views/workflow_template_views.py:130 +#, python-format +msgid "Delete workflow: %s?" +msgstr "" + +#: views/workflow_template_views.py:146 +#, python-format +msgid "Edit workflow: %s" +msgstr "" + +#: views/workflow_template_views.py:160 +msgid "Available document types" +msgstr "可用的文档类型" + +#: views/workflow_template_views.py:161 +msgid "Document types assigned this workflow" +msgstr "分配此工作流的文档类型" + +#: views/workflow_template_views.py:171 +msgid "" +"Removing a document type from a workflow will also remove all running " +"instances of that workflow for documents of the document type just removed." +msgstr "从工作流中删除文档类型还将删除属于其的文档的工作流中所有正在运行的实例。" + +#: views/workflow_template_views.py:176 +#, python-format +msgid "Document types assigned the workflow: %s" +msgstr "分配工作流的文档类型:%s" + +#: views/workflow_template_views.py:219 +#, python-format +msgid "Preview of: %s" +msgstr "%s的预览" + +#: views/workflow_template_views.py:225 msgid "Launch all workflows?" msgstr "启动所有工作流?" -#: views/workflow_views.py:739 +#: views/workflow_template_views.py:227 msgid "" "This will launch all workflows created after documents have already been " "uploaded." msgstr "这将启动文档上传后创建的所有工作流。" -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." msgstr "工作流启动成功排队。" -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "%s的预览" - -#: widgets.py:22 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" msgstr "" -#: workflow_actions.py:25 +#: workflow_actions.py:24 msgid "" "The new label to be assigned to the document. Can be a string or a template." msgstr "要分配给文档的新标签。可以是字符串或模板。" -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" msgstr "" -#: workflow_actions.py:33 +#: workflow_actions.py:32 msgid "" "The new description to be assigned to the document. Can be a string or a " "template." msgstr "要分配给文档的新描述。可以是字符串或模板。" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "修改文档的属性" +#: workflow_actions.py:39 +msgid "Modify document properties" +msgstr "" -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" msgstr "文档标签模板错误:%s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" msgstr "文档描述模板错误:%s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" msgstr "网址" -#: workflow_actions.py:93 +#: workflow_actions.py:92 msgid "" "Can be an IP address, a domain or a template. Templates receive the workflow" " log entry instance as part of their context via the variable \"entry_log\"." @@ -732,19 +902,21 @@ msgid "" " \"transition\", \"user\", and \"comment\" attributes." msgstr "可以是IP地址,域或模板。模板通过变量“entry_log”接收工作流日志条目实例作为其上下文的一部分。 “entry_log”又提供“workflow_instance”,“datetime”,“transition”,“user”和“comment”属性。" -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" msgstr "超时" #: workflow_actions.py:105 -msgid "Time in seconds to wait for a response." -msgstr "等待响应的时间,以秒为单位。" +msgid "" +"Time in seconds to wait for a response. Can be a static value or a template." +" " +msgstr "" -#: workflow_actions.py:109 +#: workflow_actions.py:111 msgid "Payload" msgstr "有效载荷" -#: workflow_actions.py:112 +#: workflow_actions.py:114 msgid "" "A JSON document to include in the request. Can also be a template that " "return a JSON document. Templates receive the workflow log entry instance as" @@ -753,21 +925,55 @@ msgid "" "\"user\", and \"comment\" attributes." msgstr "要包含在请求中的JSON文档。也可以是返回JSON文档的模板。模板通过变量“entry_log”接收工作流日志条目实例作为其上下文的一部分。 “entry_log”又提供“workflow_instance”,“datetime”,“transition”,“user”和“comment”属性。" -#: workflow_actions.py:125 +#: workflow_actions.py:124 +msgid "Username" +msgstr "用户名" + +#: workflow_actions.py:127 +msgid "" +"Username to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:137 +msgid "Password" +msgstr "密码" + +#: workflow_actions.py:140 +msgid "" +"Password to use for making the request with HTTP Basic Auth. Can be a static" +" value or a template. Templates receive the workflow log entry instance as " +"part of their context via the variable \"entry_log\". The \"entry_log\" in " +"turn provides the \"workflow_instance\", \"datetime\", \"transition\", " +"\"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:150 +msgid "Headers" +msgstr "" + +#: workflow_actions.py:153 +msgid "" +"Headers to send with the HTTP request. Must be in JSON format. Can be a " +"static value or a template. Templates receive the workflow log entry " +"instance as part of their context via the variable \"entry_log\". The " +"\"entry_log\" in turn provides the \"workflow_instance\", \"datetime\", " +"\"transition\", \"user\", and \"comment\" attributes." +msgstr "" + +#: workflow_actions.py:167 msgid "Perform a POST request" msgstr "执行POST请求" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "网址模板错误:%s" +msgid "%(field_name)s JSON error: %(exception)s" +msgstr "" -#: workflow_actions.py:155 +#: workflow_actions.py:209 #, python-format -msgid "Payload template error: %s" -msgstr "有效载荷模板错误:%s" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "有效负载JSON错误:%s" +msgid "%(field_name)s template error: %(exception)s" +msgstr "" diff --git a/mayan/apps/document_states/migrations/0011_auto_20180315_0029.py b/mayan/apps/document_states/migrations/0011_auto_20180315_0029.py index 0069858b58..6c5856d875 100644 --- a/mayan/apps/document_states/migrations/0011_auto_20180315_0029.py +++ b/mayan/apps/document_states/migrations/0011_auto_20180315_0029.py @@ -13,7 +13,8 @@ class Migration(migrations.Migration): migrations.AlterModelOptions( name='workflowinstance', options={ - 'ordering': ('workflow',), 'verbose_name': 'Workflow instance', + 'ordering': ('workflow',), + 'verbose_name': 'Workflow instance', 'verbose_name_plural': 'Workflow instances' }, ), diff --git a/mayan/apps/document_states/migrations/0014_auto_20190701_0454.py b/mayan/apps/document_states/migrations/0014_auto_20190701_0454.py new file mode 100644 index 0000000000..4dad6472b4 --- /dev/null +++ b/mayan/apps/document_states/migrations/0014_auto_20190701_0454.py @@ -0,0 +1,86 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_states', '0013_auto_20190423_0810'), + ] + + operations = [ + migrations.CreateModel( + name='WorkflowTransitionField', + fields=[ + ( + 'id', models.AutoField( + auto_created=True, primary_key=True, serialize=False, + verbose_name='ID' + ) + ), + ( + 'field_type', models.PositiveIntegerField( + choices=[(1, 'Character'), (2, 'Number (Integer)')], + verbose_name='Type' + ) + ), + ( + 'name', models.CharField( + help_text='The name that will be used to identify ' + 'this field in other parts of the workflow system.', + max_length=128, verbose_name='Internal name' + ) + ), + ( + 'label', models.CharField( + help_text='The field name that will be shown on ' + 'the user interface.', max_length=128, + verbose_name='Label' + ) + ), + ( + 'help_text', models.TextField( + blank=True, help_text='An optional message that ' + 'will help users better understand the purpose ' + 'of the field and data to provide.', + verbose_name='Help text' + ) + ), + ( + 'required', models.BooleanField( + default=False, help_text='Whether this fields ' + 'needs to be filled out or not to proceed.', + verbose_name='Required' + ) + ), + ( + 'transition', models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='fields', + to='document_states.WorkflowTransition', + verbose_name='Transition' + ) + ), + ], + options={ + 'verbose_name': 'Workflow transition trigger event', + 'verbose_name_plural': 'Workflow transitions trigger events', + }, + ), + migrations.AddField( + model_name='workflowinstance', + name='context', + field=models.TextField(blank=True, verbose_name='Backend data'), + ), + migrations.AddField( + model_name='workflowinstancelogentry', + name='extra_data', + field=models.TextField(blank=True, verbose_name='Extra data'), + ), + migrations.AlterUniqueTogether( + name='workflowtransitionfield', + unique_together=set([('transition', 'name')]), + ), + ] diff --git a/mayan/apps/document_states/migrations/0015_auto_20190701_1311.py b/mayan/apps/document_states/migrations/0015_auto_20190701_1311.py new file mode 100644 index 0000000000..b43d49f169 --- /dev/null +++ b/mayan/apps/document_states/migrations/0015_auto_20190701_1311.py @@ -0,0 +1,40 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.common.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_states', '0014_auto_20190701_0454'), + ] + + operations = [ + migrations.AddField( + model_name='workflowtransitionfield', + name='widget', + field=models.PositiveIntegerField( + blank=True, choices=[(1, 'Text area')], + help_text='An optional class to change the default ' + 'presentation of the field.', null=True, + verbose_name='Widget class' + ), + ), + migrations.AddField( + model_name='workflowtransitionfield', + name='widget_kwargs', + field=models.TextField( + blank=True, + help_text='A group of keyword arguments to customize the ' + 'widget. Use YAML format.', validators=[ + mayan.apps.common.validators.YAMLValidator() + ], verbose_name='Widget keyword arguments' + ), + ), + migrations.AlterField( + model_name='workflowinstance', + name='context', + field=models.TextField(blank=True, verbose_name='Context'), + ), + ] diff --git a/mayan/apps/document_states/migrations/0016_auto_20191108_2332.py b/mayan/apps/document_states/migrations/0016_auto_20191108_2332.py new file mode 100644 index 0000000000..856465605f --- /dev/null +++ b/mayan/apps/document_states/migrations/0016_auto_20191108_2332.py @@ -0,0 +1,43 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_states', '0015_auto_20190701_1311'), + ] + + operations = [ + migrations.AlterField( + model_name='workflowstate', + name='completion', + field=models.IntegerField( + blank=True, default=0, + help_text='The percent of completion that this state ' + 'represents in relation to the workflow. Use numbers ' + 'without the percent sign.', verbose_name='Completion' + ), + ), + migrations.AlterField( + model_name='workflowstate', + name='initial', + field=models.BooleanField( + default=False, help_text='The state at which the ' + 'workflow will start in. Only one state can be the ' + 'initial state.', verbose_name='Initial' + ), + ), + migrations.AlterField( + model_name='workflowstateaction', + name='when', + field=models.PositiveIntegerField( + choices=[ + (1, 'On entry'), (2, 'On exit') + ], default=1, + help_text='At which moment of the state this action ' + 'will execute.', verbose_name='When' + ), + ), + ] diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index 4ef308470c..83e546e28c 100644 --- a/mayan/apps/document_states/models.py +++ b/mayan/apps/document_states/models.py @@ -1,29 +1,39 @@ from __future__ import absolute_import, unicode_literals +import hashlib import json import logging +from furl import furl from graphviz import Digraph +from django.apps import apps from django.conf import settings +from django.core import serializers from django.core.exceptions import PermissionDenied, ValidationError from django.db import IntegrityError, models, transaction from django.db.models import F, Max, Q from django.urls import reverse -from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.encoding import ( + force_bytes, force_text, python_2_unicode_compatible +) +from django.utils.functional import cached_property from django.utils.module_loading import import_string from django.utils.translation import ugettext_lazy as _ from mayan.apps.acls.models import AccessControlList -from mayan.apps.common.validators import validate_internal_name +from mayan.apps.common.serialization import yaml_load +from mayan.apps.common.validators import YAMLValidator, validate_internal_name from mayan.apps.documents.models import Document, DocumentType +from mayan.apps.documents.permissions import permission_document_view from mayan.apps.events.models import StoredEventType from .error_logs import error_log_state_actions from .events import event_workflow_created, event_workflow_edited from .literals import ( - WORKFLOW_ACTION_WHEN_CHOICES, WORKFLOW_ACTION_ON_ENTRY, - WORKFLOW_ACTION_ON_EXIT + FIELD_TYPE_CHOICES, WIDGET_CLASS_CHOICES, WORKFLOW_ACTION_WHEN_CHOICES, + WORKFLOW_ACTION_ON_ENTRY, WORKFLOW_ACTION_ON_EXIT, + WORKFLOW_IMAGE_CACHE_NAME ) from .managers import WorkflowManager from .permissions import permission_workflow_transition @@ -63,9 +73,71 @@ class Workflow(models.Model): def __str__(self): return self.label + @cached_property + def cache(self): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + return Cache.objects.get(name=WORKFLOW_IMAGE_CACHE_NAME) + + @cached_property + def cache_partition(self): + partition, created = self.cache.partitions.get_or_create( + name='{}'.format(self.pk) + ) + return partition + + def delete(self, *args, **kwargs): + self.cache_partition.delete() + return super(Workflow, self).delete(*args, **kwargs) + + def generate_image(self): + cache_filename = '{}'.format(self.get_hash()) + + if self.cache_partition.get_file(filename=cache_filename): + logger.debug( + 'workflow cache file "%s" found', cache_filename + ) + else: + logger.debug( + 'workflow cache file "%s" not found', cache_filename + ) + + image = self.render() + with self.cache_partition.create_file(filename=cache_filename) as file_object: + file_object.write(image) + + return cache_filename + + def get_api_image_url(self, *args, **kwargs): + final_url = furl() + final_url.args = kwargs + final_url.path = reverse( + viewname='rest_api:workflow-image', + kwargs={'pk': self.pk} + ) + final_url.args['_hash'] = self.get_hash() + + return final_url.tostr() + def get_document_types_not_in_workflow(self): return DocumentType.objects.exclude(pk__in=self.document_types.all()) + def get_hash(self): + objects_lists = list( + Workflow.objects.filter(pk=self.pk) + ) + list( + WorkflowState.objects.filter(workflow__pk=self.pk) + ) + list( + WorkflowStateAction.objects.filter(state__workflow__pk=self.pk) + ) + list( + WorkflowTransition.objects.filter(workflow__pk=self.pk) + ) + + return hashlib.sha256( + force_bytes( + serializers.serialize('json', objects_lists) + ) + ).hexdigest() + def get_initial_state(self): try: return self.states.get(initial=True) @@ -200,13 +272,13 @@ class WorkflowState(models.Model): initial = models.BooleanField( default=False, help_text=_( - 'Select if this will be the state with which you want the ' - 'workflow to start in. Only one state can be the initial state.' + 'The state at which the workflow will start in. Only one state ' + 'can be the initial state.' ), verbose_name=_('Initial') ) completion = models.IntegerField( blank=True, default=0, help_text=_( - 'Enter the percent of completion that this state represents in ' + 'The percent of completion that this state represents in ' 'relation to the workflow. Use numbers without the percent sign.' ), verbose_name=_('Completion') ) @@ -283,7 +355,7 @@ class WorkflowStateAction(models.Model): when = models.PositiveIntegerField( choices=WORKFLOW_ACTION_WHEN_CHOICES, default=WORKFLOW_ACTION_ON_ENTRY, help_text=_( - 'At which moment of the state this action will execute' + 'At which moment of the state this action will execute.' ), verbose_name=_('When') ) action_path = models.CharField( @@ -365,6 +437,61 @@ class WorkflowTransition(models.Model): return self.label +@python_2_unicode_compatible +class WorkflowTransitionField(models.Model): + transition = models.ForeignKey( + on_delete=models.CASCADE, related_name='fields', + to=WorkflowTransition, verbose_name=_('Transition') + ) + field_type = models.PositiveIntegerField( + choices=FIELD_TYPE_CHOICES, verbose_name=_('Type') + ) + name = models.CharField( + help_text=_( + 'The name that will be used to identify this field in other parts ' + 'of the workflow system.' + ), max_length=128, verbose_name=_('Internal name') + ) + label = models.CharField( + help_text=_( + 'The field name that will be shown on the user interface.' + ), max_length=128, verbose_name=_('Label')) + help_text = models.TextField( + blank=True, help_text=_( + 'An optional message that will help users better understand the ' + 'purpose of the field and data to provide.' + ), verbose_name=_('Help text') + ) + required = models.BooleanField( + default=False, help_text=_( + 'Whether this fields needs to be filled out or not to proceed.' + ), verbose_name=_('Required') + ) + widget = models.PositiveIntegerField( + blank=True, choices=WIDGET_CLASS_CHOICES, help_text=_( + 'An optional class to change the default presentation of the field.' + ), null=True, verbose_name=_('Widget class') + ) + widget_kwargs = models.TextField( + blank=True, help_text=_( + 'A group of keyword arguments to customize the widget. ' + 'Use YAML format.' + ), validators=[YAMLValidator()], + verbose_name=_('Widget keyword arguments') + ) + + class Meta: + unique_together = ('transition', 'name') + verbose_name = _('Workflow transition trigger event') + verbose_name_plural = _('Workflow transitions trigger events') + + def __str__(self): + return self.label + + def get_widget_kwargs(self): + return yaml_load(stream=self.widget_kwargs) + + @python_2_unicode_compatible class WorkflowTransitionTriggerEvent(models.Model): transition = models.ForeignKey( @@ -394,6 +521,9 @@ class WorkflowInstance(models.Model): on_delete=models.CASCADE, related_name='workflows', to=Document, verbose_name=_('Document') ) + context = models.TextField( + blank=True, verbose_name=_('Context') + ) class Meta: ordering = ('workflow',) @@ -404,15 +534,30 @@ class WorkflowInstance(models.Model): def __str__(self): return force_text(self.workflow) - def do_transition(self, transition, user=None, comment=None): - try: - if transition in self.get_current_state().origin_transitions.all(): - self.log_entries.create( - comment=comment or '', transition=transition, user=user - ) - except AttributeError: - # No initial state has been set for this workflow - pass + def do_transition(self, transition, extra_data=None, user=None, comment=None): + with transaction.atomic(): + try: + if transition in self.get_current_state().origin_transitions.all(): + if extra_data: + context = self.loads() + context.update(extra_data) + self.dumps(context=context) + + self.log_entries.create( + comment=comment or '', + extra_data=json.dumps(extra_data or {}), + transition=transition, user=user + ) + except AttributeError: + # No initial state has been set for this workflow + pass + + def dumps(self, context): + """ + Serialize the context data. + """ + self.context = json.dumps(context) + self.save() def get_absolute_url(self): return reverse( @@ -422,10 +567,12 @@ class WorkflowInstance(models.Model): ) def get_context(self): - return { + context = { 'document': self.document, 'workflow': self.workflow, 'workflow_instance': self, } + context['workflow_instance_context'] = self.loads() + return context def get_current_state(self): """ @@ -491,6 +638,12 @@ class WorkflowInstance(models.Model): """ return WorkflowTransition.objects.none() + def loads(self): + """ + Deserialize the context data. + """ + return json.loads(self.context or '{}') + @python_2_unicode_compatible class WorkflowInstanceLogEntry(models.Model): @@ -517,6 +670,7 @@ class WorkflowInstanceLogEntry(models.Model): to=settings.AUTH_USER_MODEL, verbose_name=_('User') ) comment = models.TextField(blank=True, verbose_name=_('Comment')) + extra_data = models.TextField(blank=True, verbose_name=_('Extra data')) class Meta: ordering = ('datetime',) @@ -530,33 +684,47 @@ class WorkflowInstanceLogEntry(models.Model): if self.transition not in self.workflow_instance.get_transition_choices(_user=self.user): raise ValidationError(_('Not a valid transition choice.')) - def save(self, *args, **kwargs): - result = super(WorkflowInstanceLogEntry, self).save(*args, **kwargs) - context = self.workflow_instance.get_context() - context.update( - { - 'entry_log': self - } - ) - - for action in self.transition.origin_state.exit_actions.filter(enabled=True): - context.update( - { - 'action': action, - } - ) - action.execute(context=context) - - for action in self.transition.destination_state.entry_actions.filter(enabled=True): - context.update( - { - 'action': action, - } - ) - action.execute(context=context) + def get_extra_data(self): + result = {} + for key, value in self.loads().items(): + result[self.transition.fields.get(name=key).label] = value return result + def loads(self): + """ + Deserialize the context data. + """ + return json.loads(self.extra_data or '{}') + + def save(self, *args, **kwargs): + with transaction.atomic(): + result = super(WorkflowInstanceLogEntry, self).save(*args, **kwargs) + context = self.workflow_instance.get_context() + context.update( + { + 'entry_log': self + } + ) + + for action in self.transition.origin_state.exit_actions.filter(enabled=True): + context.update( + { + 'action': action, + } + ) + action.execute(context=context) + + for action in self.transition.destination_state.entry_actions.filter(enabled=True): + context.update( + { + 'action': action, + } + ) + action.execute(context=context) + + return result + class WorkflowRuntimeProxy(Workflow): class Meta: @@ -564,9 +732,30 @@ class WorkflowRuntimeProxy(Workflow): verbose_name = _('Workflow runtime proxy') verbose_name_plural = _('Workflow runtime proxies') + def get_document_count(self, user): + """ + Return the numeric count of documents executing this workflow. + The count is filtered by access. + """ + return AccessControlList.objects.restrict_queryset( + permission=permission_document_view, + queryset=Document.objects.filter(workflows__workflow=self), + user=user + ).count() + class WorkflowStateRuntimeProxy(WorkflowState): class Meta: proxy = True verbose_name = _('Workflow state runtime proxy') verbose_name_plural = _('Workflow state runtime proxies') + + def get_document_count(self, user): + """ + Return the numeric count of documents at this workflow state. + The count is filtered by access. + """ + return AccessControlList.objects.restrict_queryset( + permission=permission_document_view, queryset=self.get_documents(), + user=user + ).count() diff --git a/mayan/apps/document_states/queues.py b/mayan/apps/document_states/queues.py index 6b269d5b99..b68354e8b2 100644 --- a/mayan/apps/document_states/queues.py +++ b/mayan/apps/document_states/queues.py @@ -3,12 +3,21 @@ from __future__ import absolute_import, unicode_literals from django.utils.translation import ugettext_lazy as _ from mayan.apps.task_manager.classes import CeleryQueue -from mayan.apps.task_manager.workers import worker_slow +from mayan.apps.task_manager.workers import worker_fast, worker_slow queue_document_states = CeleryQueue( - name='document_states', label=_('Document states'), worker=worker_slow + label=_('Document states'), name='document_states', worker=worker_slow ) +queue_document_states_fast = CeleryQueue( + label=_('Document states fast'), name='document_states_fast', + worker=worker_fast +) + queue_document_states.add_task_type( - dotted_path='mayan.apps.document_states.tasks.task_launch_all_workflows', - label=_('Launch all workflows') + label=_('Launch all workflows'), + dotted_path='mayan.apps.document_states.tasks.task_launch_all_workflows' +) +queue_document_states_fast.add_task_type( + label=_('Generate workflow previews'), + dotted_path='mayan.apps.document_states.tasks.task_generate_workflow_image' ) diff --git a/mayan/apps/document_states/settings.py b/mayan/apps/document_states/settings.py new file mode 100644 index 0000000000..cfbb675c7b --- /dev/null +++ b/mayan/apps/document_states/settings.py @@ -0,0 +1,44 @@ +from __future__ import unicode_literals + +import os + +from django.conf import settings +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.smart_settings.classes import Namespace + +from .literals import DEFAULT_WORKFLOW_IMAGE_CACHE_MAXIMUM_SIZE +from .utils import callback_update_workflow_image_cache_size + +namespace = Namespace(label=_('Workflows'), name='document_states') + +setting_workflow_image_cache_maximum_size = namespace.add_setting( + global_name='WORKFLOWS_IMAGE_CACHE_MAXIMUM_SIZE', + default=DEFAULT_WORKFLOW_IMAGE_CACHE_MAXIMUM_SIZE, + help_text=_( + 'The threshold at which the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND will ' + 'start deleting the oldest workflow image cache files. Specify the ' + 'size in bytes.' + ), post_edit_function=callback_update_workflow_image_cache_size +) +settings_workflow_image_cache_time = namespace.add_setting( + global_name='WORKFLOWS_IMAGE_CACHE_TIME', default='31556926', + help_text=_( + 'Time in seconds that the browser should cache the supplied workflow ' + 'images. The default of 31559626 seconds corresponde to 1 year.' + ) +) +setting_workflowimagecache_storage = namespace.add_setting( + global_name='WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND', + default='django.core.files.storage.FileSystemStorage', help_text=_( + 'Path to the Storage subclass to use when storing the cached ' + 'workflow image files.' + ) +) +setting_workflowimagecache_storage_arguments = namespace.add_setting( + global_name='WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND_ARGUMENTS', + default={'location': os.path.join(settings.MEDIA_ROOT, 'workflows')}, + help_text=_( + 'Arguments to pass to the WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND.' + ) +) diff --git a/mayan/apps/document_states/storages.py b/mayan/apps/document_states/storages.py new file mode 100644 index 0000000000..d4ab8de524 --- /dev/null +++ b/mayan/apps/document_states/storages.py @@ -0,0 +1,12 @@ +from __future__ import unicode_literals + +from mayan.apps.storage.utils import get_storage_subclass + +from .settings import ( + setting_workflowimagecache_storage, + setting_workflowimagecache_storage_arguments +) + +storage_workflowimagecache = get_storage_subclass( + dotted_path=setting_workflowimagecache_storage.value +)(**setting_workflowimagecache_storage_arguments.value) diff --git a/mayan/apps/document_states/tasks.py b/mayan/apps/document_states/tasks.py index 2156a45ead..3ec8d90acb 100644 --- a/mayan/apps/document_states/tasks.py +++ b/mayan/apps/document_states/tasks.py @@ -9,6 +9,17 @@ from mayan.celery import app logger = logging.getLogger(__name__) +@app.task() +def task_generate_workflow_image(document_state_id): + Workflow = apps.get_model( + app_label='document_states', model_name='Workflow' + ) + + workflow = Workflow.objects.get(pk=document_state_id) + + return workflow.generate_image() + + @app.task(ignore_result=True) def task_launch_all_workflows(): Document = apps.get_model(app_label='documents', model_name='Document') diff --git a/mayan/apps/document_states/templates/document_states/extra_data.html b/mayan/apps/document_states/templates/document_states/extra_data.html new file mode 100644 index 0000000000..94ed6b96c2 --- /dev/null +++ b/mayan/apps/document_states/templates/document_states/extra_data.html @@ -0,0 +1,7 @@ +{% if value %} +
      + {% for key, value in value.items %} +
    • {{ key }}: {{ value }}
    • + {% endfor %} +
    +{% endif %} diff --git a/mayan/apps/document_states/templates/document_states/forms/widgets/workflow_image.html b/mayan/apps/document_states/templates/document_states/forms/widgets/workflow_image.html new file mode 100644 index 0000000000..8b2dc419cb --- /dev/null +++ b/mayan/apps/document_states/templates/document_states/forms/widgets/workflow_image.html @@ -0,0 +1,3 @@ +{% load i18n %} +{% trans 'Workflow preview' %} + diff --git a/mayan/apps/document_states/tests/base.py b/mayan/apps/document_states/tests/base.py new file mode 100644 index 0000000000..526a9a4f69 --- /dev/null +++ b/mayan/apps/document_states/tests/base.py @@ -0,0 +1,16 @@ +from __future__ import unicode_literals + +from mayan.apps.documents.tests.test_models import GenericDocumentTestCase + + +class ActionTestCase(GenericDocumentTestCase): + def setUp(self): + super(ActionTestCase, self).setUp() + + class MockWorkflowInstance(object): + document = self.test_document + + class MockEntryLog(object): + workflow_instance = MockWorkflowInstance() + + self.entry_log = MockEntryLog() diff --git a/mayan/apps/document_states/tests/literals.py b/mayan/apps/document_states/tests/literals.py index 212427d2d3..6cdd697102 100644 --- a/mayan/apps/document_states/tests/literals.py +++ b/mayan/apps/document_states/tests/literals.py @@ -1,7 +1,26 @@ from __future__ import unicode_literals +from ..literals import FIELD_TYPE_CHOICE_CHAR + TEST_INDEX_LABEL = 'test workflow index' +TEST_HEADERS_KEY = 'test key' +TEST_HEADERS_VALUE = 'test value' +TEST_HEADERS_JSON = '{{"{}": "{}"}}'.format( + TEST_HEADERS_KEY, TEST_HEADERS_VALUE +) +TEST_HEADERS_JSON_TEMPLATE_KEY = 'test key' +TEST_HEADERS_JSON_TEMPLATE_VALUE = '{{ document.label }}' +TEST_HEADERS_JSON_TEMPLATE = '{{"{}": "{}"}}'.format( + TEST_HEADERS_JSON_TEMPLATE_KEY, TEST_HEADERS_JSON_TEMPLATE_VALUE +) +TEST_HEADERS_AUTHENTICATION_KEY = 'Authorization' +TEST_HEADERS_AUTHENTICATION_VALUE = 'Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA==' +TEST_PAYLOAD_JSON = '{"label": "label"}' +TEST_PAYLOAD_TEMPLATE_DOCUMENT_LABEL = '{"label": "{{ document.label }}"}' +TEST_SERVER_USERNAME = 'testusername' +TEST_SERVER_PASSWORD = 'testpassword' + TEST_WORKFLOW_LABEL = 'test workflow label' TEST_WORKFLOW_INTERNAL_NAME = 'test_workflow_label' TEST_WORKFLOW_LABEL_EDITED = 'test workflow label edited' @@ -11,6 +30,10 @@ TEST_WORKFLOW_INSTANCE_LOG_ENTRY_COMMENT = 'test workflow instance log entry com TEST_WORKFLOW_STATE_LABEL = 'test state label' TEST_WORKFLOW_STATE_LABEL_EDITED = 'test state label edited' TEST_WORKFLOW_STATE_COMPLETION = 66 +TEST_WORKFLOW_TRANSITION_FIELD_HELP_TEXT = 'test workflow transition field help test' +TEST_WORKFLOW_TRANSITION_FIELD_LABEL = 'test workflow transition field' +TEST_WORKFLOW_TRANSITION_FIELD_NAME = 'test_workflow_transition_field' +TEST_WORKFLOW_TRANSITION_FIELD_TYPE = FIELD_TYPE_CHOICE_CHAR TEST_WORKFLOW_TRANSITION_LABEL = 'test transition label' TEST_WORKFLOW_TRANSITION_LABEL_2 = 'test transition label 2' TEST_WORKFLOW_TRANSITION_LABEL_EDITED = 'test transition label edited' diff --git a/mayan/apps/document_states/tests/mixins.py b/mayan/apps/document_states/tests/mixins.py index 76a1865ed4..54ea5ea023 100644 --- a/mayan/apps/document_states/tests/mixins.py +++ b/mayan/apps/document_states/tests/mixins.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals from ..classes import WorkflowAction -from ..models import Workflow +from ..models import Workflow, WorkflowRuntimeProxy, WorkflowStateRuntimeProxy from .literals import ( TEST_WORKFLOW_INITIAL_STATE_LABEL, TEST_WORKFLOW_INITIAL_STATE_COMPLETION, @@ -17,6 +17,33 @@ class TestWorkflowAction(WorkflowAction): label = 'test workflow state action' +class WorkflowRuntimeProxyStateViewTestMixin(object): + def _request_test_workflow_runtime_proxy_state_list_view(self): + return self.get( + viewname='document_states:workflow_runtime_proxy_state_list', + kwargs={'pk': self.test_workflow.pk} + ) + + def _request_test_workflow_runtime_proxy_state_document_list_view(self): + return self.get( + viewname='document_states:workflow_runtime_proxy_state_document_list', + kwargs={'pk': self.test_workflow_state_1.pk} + ) + + +class WorkflowRuntimeProxyViewTestMixin(object): + def _request_test_workflow_runtime_proxy_list_view(self): + return self.get( + viewname='document_states:workflow_runtime_proxy_list' + ) + + def _request_test_workflow_runtime_proxy_document_list_view(self): + return self.get( + viewname='document_states:workflow_runtime_proxy_document_list', + kwargs={'pk': self.test_workflow.pk} + ) + + class WorkflowStateActionTestMixin(object): TestWorkflowAction = TestWorkflowAction test_workflow_state_action_path = 'mayan.apps.document_states.tests.mixins.TestWorkflowAction' @@ -38,19 +65,19 @@ class WorkflowStateViewTestMixin(object): data.update(extra_data) return self.post( - viewname='document_states:setup_workflow_state_create', + viewname='document_states:workflow_template_state_create', kwargs={'pk': self.test_workflow.pk}, data=data ) def _request_test_workflow_state_delete_view(self): return self.post( - viewname='document_states:setup_workflow_state_delete', + viewname='document_states:workflow_template_state_delete', kwargs={'pk': self.test_workflow_state_1.pk} ) def _request_test_workflow_state_edit_view(self): return self.post( - viewname='document_states:setup_workflow_state_edit', + viewname='document_states:workflow_template_state_edit', kwargs={'pk': self.test_workflow_state_1.pk}, data={ 'label': TEST_WORKFLOW_STATE_LABEL_EDITED } @@ -58,7 +85,7 @@ class WorkflowStateViewTestMixin(object): def _request_test_workflow_state_list_view(self): return self.get( - viewname='document_states:setup_workflow_state_list', + viewname='document_states:workflow_template_state_list', kwargs={'pk': self.test_workflow.pk} ) @@ -69,6 +96,9 @@ class WorkflowTestMixin(object): label=TEST_WORKFLOW_LABEL, internal_name=TEST_WORKFLOW_INTERNAL_NAME ) + self.test_workflow_runtime_proxy = WorkflowRuntimeProxy.objects.get( + pk=self.test_workflow.pk + ) if add_document_type: self.test_workflow.document_types.add(self.test_document_type) @@ -78,6 +108,9 @@ class WorkflowTestMixin(object): completion=TEST_WORKFLOW_STATE_COMPLETION, label=TEST_WORKFLOW_STATE_LABEL ) + self.test_workflow_state_runtime_proxy = WorkflowStateRuntimeProxy.objects.get( + pk=self.test_workflow_state.pk + ) def _create_test_workflow_states(self): self.test_workflow_state_1 = self.test_workflow.states.create( @@ -88,6 +121,12 @@ class WorkflowTestMixin(object): completion=TEST_WORKFLOW_STATE_COMPLETION, label=TEST_WORKFLOW_STATE_LABEL ) + self.test_workflow_state_runtime_proxy_1 = WorkflowStateRuntimeProxy.objects.get( + pk=self.test_workflow_state_1.pk + ) + self.test_workflow_state_runtime_proxy_2 = WorkflowStateRuntimeProxy.objects.get( + pk=self.test_workflow_state_2.pk + ) def _create_test_workflow_transition(self): self.test_workflow_transition = self.test_workflow.transitions.create( @@ -120,7 +159,7 @@ class WorkflowTestMixin(object): class WorkflowTransitionViewTestMixin(object): def _request_test_workflow_transition_create_view(self): return self.post( - viewname='document_states:setup_workflow_transition_create', + viewname='document_states:workflow_template_transition_create', kwargs={'pk': self.test_workflow.pk}, data={ 'label': TEST_WORKFLOW_TRANSITION_LABEL, 'origin_state': self.test_workflow_state_1.pk, @@ -130,13 +169,13 @@ class WorkflowTransitionViewTestMixin(object): def _request_test_workflow_transition_delete_view(self): return self.post( - viewname='document_states:setup_workflow_transition_delete', + viewname='document_states:workflow_template_transition_delete', kwargs={'pk': self.test_workflow_transition.pk} ) def _request_test_workflow_transition_edit_view(self): return self.post( - viewname='document_states:setup_workflow_transition_edit', + viewname='document_states:workflow_template_transition_edit', kwargs={'pk': self.test_workflow_transition.pk}, data={ 'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED, 'origin_state': self.test_workflow_state_1.pk, @@ -146,15 +185,16 @@ class WorkflowTransitionViewTestMixin(object): def _request_test_workflow_transition_list_view(self): return self.get( - viewname='document_states:setup_workflow_transition_list', + viewname='document_states:workflow_template_transition_list', kwargs={'pk': self.test_workflow.pk} ) def _request_test_workflow_transition(self): return self.post( - viewname='document_states:workflow_instance_transition', - kwargs={'pk': self.test_workflow_instance.pk}, data={ - 'transition': self.test_workflow_transition.pk, + viewname='document_states:workflow_instance_transition_execute', + kwargs={ + 'workflow_instance_pk': self.test_workflow_instance.pk, + 'workflow_transition_pk': self.test_workflow_transition.pk, } ) @@ -162,7 +202,7 @@ class WorkflowTransitionViewTestMixin(object): class WorkflowViewTestMixin(object): def _request_test_workflow_create_view(self): return self.post( - viewname='document_states:setup_workflow_create', data={ + viewname='document_states:workflow_template_create', data={ 'label': TEST_WORKFLOW_LABEL, 'internal_name': TEST_WORKFLOW_INTERNAL_NAME, } @@ -170,14 +210,14 @@ class WorkflowViewTestMixin(object): def _request_test_workflow_delete_view(self): return self.post( - viewname='document_states:setup_workflow_delete', kwargs={ + viewname='document_states:workflow_template_delete', kwargs={ 'pk': self.test_workflow.pk } ) def _request_test_workflow_edit_view(self): return self.post( - viewname='document_states:setup_workflow_edit', kwargs={ + viewname='document_states:workflow_template_edit', kwargs={ 'pk': self.test_workflow.pk, }, data={ 'label': TEST_WORKFLOW_LABEL_EDITED, @@ -187,12 +227,12 @@ class WorkflowViewTestMixin(object): def _request_test_workflow_list_view(self): return self.get( - viewname='document_states:setup_workflow_list', + viewname='document_states:workflow_template_list', ) - def _request_test_workflow_preview_view(self): + def _request_test_workflow_template_preview_view(self): return self.get( - viewname='document_states:workflow_preview', kwargs={ + viewname='document_states:workflow_template_preview', kwargs={ 'pk': self.test_workflow.pk, } ) diff --git a/mayan/apps/document_states/tests/test_api.py b/mayan/apps/document_states/tests/test_api.py index 84c55394f0..c7bb35eb9f 100644 --- a/mayan/apps/document_states/tests/test_api.py +++ b/mayan/apps/document_states/tests/test_api.py @@ -4,7 +4,7 @@ from rest_framework import status from mayan.apps.documents.permissions import permission_document_type_view from mayan.apps.documents.tests.mixins import DocumentTestMixin -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Workflow from ..permissions import ( diff --git a/mayan/apps/document_states/tests/test_events.py b/mayan/apps/document_states/tests/test_events.py index 9998331665..e0d7bd7301 100644 --- a/mayan/apps/document_states/tests/test_events.py +++ b/mayan/apps/document_states/tests/test_events.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from actstream.models import Action -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..events import event_workflow_created, event_workflow_edited from ..models import Workflow diff --git a/mayan/apps/document_states/tests/test_indexing.py b/mayan/apps/document_states/tests/test_indexing.py index 179988ef5f..5154397c86 100644 --- a/mayan/apps/document_states/tests/test_indexing.py +++ b/mayan/apps/document_states/tests/test_indexing.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.documents.tests import GenericDocumentTestCase +from mayan.apps.documents.tests.base import GenericDocumentTestCase from mayan.apps.document_indexing.models import Index, IndexInstanceNode from ..models import Workflow diff --git a/mayan/apps/document_states/tests/test_links.py b/mayan/apps/document_states/tests/test_links.py index 9de4b7a390..fe2a6e3aa3 100644 --- a/mayan/apps/document_states/tests/test_links.py +++ b/mayan/apps/document_states/tests/test_links.py @@ -28,7 +28,7 @@ class WorkflowRuntimeProxyLinkTestCase( self._create_test_workflow(add_document_type=True) - self._resolve_test_link(test_object=self.test_workflow) + self._resolve_test_link(test_object=self.test_workflow_runtime_proxy) self.assertEqual(self.resolved_test_link, None) @@ -41,14 +41,14 @@ class WorkflowRuntimeProxyLinkTestCase( obj=self.test_workflow, permission=permission_workflow_view ) - self._resolve_test_link(test_object=self.test_workflow) + self._resolve_test_link(test_object=self.test_workflow_runtime_proxy) self.assertNotEqual(self.resolved_test_link, None) self.assertEqual( self.resolved_test_link.url, reverse( viewname=self.test_link.view, kwargs={ - 'pk': self.test_workflow.pk + 'pk': self.test_workflow_runtime_proxy.pk } ) ) @@ -86,7 +86,7 @@ class WorkflowRuntimeProxyLinkTestCase( self._create_test_workflow(add_document_type=True) self._create_test_workflow_state() - self._resolve_test_link(test_object=self.test_workflow_state) + self._resolve_test_link(test_object=self.test_workflow_state_runtime_proxy) self.assertEqual(self.resolved_test_link, None) @@ -100,14 +100,14 @@ class WorkflowRuntimeProxyLinkTestCase( obj=self.test_workflow, permission=permission_workflow_view ) - self._resolve_test_link(test_object=self.test_workflow_state) + self._resolve_test_link(test_object=self.test_workflow_state_runtime_proxy) self.assertNotEqual(self.resolved_test_link, None) self.assertEqual( self.resolved_test_link.url, reverse( viewname=self.test_link.view, kwargs={ - 'pk': self.test_workflow_state.pk + 'pk': self.test_workflow_state_runtime_proxy.pk } ) ) @@ -117,7 +117,7 @@ class WorkflowRuntimeProxyLinkTestCase( self._create_test_workflow(add_document_type=True) - self._resolve_test_link(test_object=self.test_workflow) + self._resolve_test_link(test_object=self.test_workflow_runtime_proxy) self.assertEqual(self.resolved_test_link, None) def test_workflow_runtime_proxy_state_list_link_with_access(self): @@ -129,14 +129,14 @@ class WorkflowRuntimeProxyLinkTestCase( obj=self.test_workflow, permission=permission_workflow_view ) - self._resolve_test_link(test_object=self.test_workflow) + self._resolve_test_link(test_object=self.test_workflow_runtime_proxy) self.assertNotEqual(self.resolved_test_link, None) self.assertEqual( self.resolved_test_link.url, reverse( viewname=self.test_link.view, kwargs={ - 'pk': self.test_workflow.pk + 'pk': self.test_workflow_runtime_proxy.pk } ) ) diff --git a/mayan/apps/document_states/tests/test_models.py b/mayan/apps/document_states/tests/test_models.py new file mode 100644 index 0000000000..462483bea5 --- /dev/null +++ b/mayan/apps/document_states/tests/test_models.py @@ -0,0 +1,11 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import BaseTestCase + +from .mixins import WorkflowTestMixin + + +class WorkflowModelTestCase(WorkflowTestMixin, BaseTestCase): + def test_workflow_template_preview(self): + self._create_test_workflow() + self.assertTrue(self.test_workflow.get_api_image_url()) diff --git a/mayan/apps/document_states/tests/test_workflow_actions.py b/mayan/apps/document_states/tests/test_workflow_actions.py index 526a9a4f69..4bb93d2611 100644 --- a/mayan/apps/document_states/tests/test_workflow_actions.py +++ b/mayan/apps/document_states/tests/test_workflow_actions.py @@ -1,16 +1,185 @@ from __future__ import unicode_literals -from mayan.apps.documents.tests.test_models import GenericDocumentTestCase +import json +import mock + +from mayan.apps.common.tests.mixins import TestServerTestCaseMixin +from mayan.apps.common.tests.mocks import request_method_factory +from mayan.apps.document_states.tests.mixins import WorkflowTestMixin +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase + +from ..workflow_actions import HTTPPostAction + +from .literals import ( + TEST_HEADERS_AUTHENTICATION_KEY, TEST_HEADERS_AUTHENTICATION_VALUE, + TEST_HEADERS_KEY, TEST_HEADERS_JSON, TEST_HEADERS_JSON_TEMPLATE, + TEST_HEADERS_JSON_TEMPLATE_KEY, TEST_HEADERS_VALUE, TEST_PAYLOAD_JSON, + TEST_PAYLOAD_TEMPLATE_DOCUMENT_LABEL, TEST_SERVER_USERNAME, + TEST_SERVER_PASSWORD +) -class ActionTestCase(GenericDocumentTestCase): - def setUp(self): - super(ActionTestCase, self).setUp() +class HTTPPostWorkflowActionTestCase( + TestServerTestCaseMixin, GenericDocumentViewTestCase, WorkflowTestMixin, +): + auto_upload_document = False + auto_add_test_view = True - class MockWorkflowInstance(object): - document = self.test_document + @mock.patch('requests.api.request') + def test_http_post_action_simple(self, mock_object): + mock_object.side_effect = request_method_factory(test_case=self) - class MockEntryLog(object): - workflow_instance = MockWorkflowInstance() + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + } + ) + action.execute(context={}) - self.entry_log = MockEntryLog() + self.assertFalse(self.test_view_request is None) + + @mock.patch('requests.api.request') + def test_http_post_action_payload_simple(self, mock_object): + mock_object.side_effect = request_method_factory(test_case=self) + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'payload': TEST_PAYLOAD_JSON, + } + ) + action.execute(context={}) + + self.assertEqual( + json.loads(self.test_view_request.body), + {'label': 'label'} + ) + + @mock.patch('requests.api.request') + def test_http_post_action_payload_template(self, mock_object): + self.upload_document() + mock_object.side_effect = request_method_factory(test_case=self) + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'payload': TEST_PAYLOAD_TEMPLATE_DOCUMENT_LABEL, + } + ) + action.execute(context={'document': self.test_document}) + + self.assertEqual( + json.loads(self.test_view_request.body), + {'label': self.test_document.label} + ) + + @mock.patch('requests.api.request') + def test_http_post_action_headers_simple(self, mock_object): + mock_object.side_effect = request_method_factory(test_case=self) + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'headers': TEST_HEADERS_JSON, + } + ) + action.execute(context={}) + + self.assertTrue( + TEST_HEADERS_KEY in self.test_view_request.META, + ) + self.assertEqual( + self.test_view_request.META[TEST_HEADERS_KEY], TEST_HEADERS_VALUE + ) + + @mock.patch('requests.api.request') + def test_http_post_action_headers_template(self, mock_object): + self.upload_document() + mock_object.side_effect = request_method_factory(test_case=self) + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'headers': TEST_HEADERS_JSON_TEMPLATE, + } + ) + action.execute(context={'document': self.test_document}) + + self.assertTrue( + TEST_HEADERS_JSON_TEMPLATE_KEY in self.test_view_request.META, + ) + self.assertEqual( + self.test_view_request.META[TEST_HEADERS_JSON_TEMPLATE_KEY], + self.test_document.label + ) + + @mock.patch('requests.api.request') + def test_http_post_action_authentication(self, mock_object): + mock_object.side_effect = request_method_factory(test_case=self) + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'username': TEST_SERVER_USERNAME, + 'password': TEST_SERVER_PASSWORD + } + ) + action.execute(context={}) + + self.assertTrue( + TEST_HEADERS_AUTHENTICATION_KEY in self.test_view_request.META, + ) + self.assertEqual( + self.test_view_request.META[TEST_HEADERS_AUTHENTICATION_KEY], + TEST_HEADERS_AUTHENTICATION_VALUE + ) + + @mock.patch('requests.api.request') + def test_http_post_action_timeout_value_int(self, mock_object): + def mock_request(method, url, **kwargs): + self.timeout = kwargs.get('timeout') + + mock_object.side_effect = mock_request + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'timeout': '1' + } + ) + action.execute(context={}) + + self.assertEqual(self.timeout, 1) + + @mock.patch('requests.api.request') + def test_http_post_action_timeout_value_float(self, mock_object): + def mock_request(method, url, **kwargs): + self.timeout = kwargs.get('timeout') + + mock_object.side_effect = mock_request + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + 'timeout': '1.5' + } + ) + action.execute(context={}) + + self.assertEqual(self.timeout, 1.5) + + @mock.patch('requests.api.request') + def test_http_post_action_timeout_value_none(self, mock_object): + def mock_request(method, url, **kwargs): + self.timeout = kwargs.get('timeout') + + mock_object.side_effect = mock_request + + action = HTTPPostAction( + form_data={ + 'url': self.testserver_url, + } + ) + action.execute(context={}) + + self.assertEqual(self.timeout, None) diff --git a/mayan/apps/document_states/tests/test_workflow_runtime_proxy_views.py b/mayan/apps/document_states/tests/test_workflow_runtime_proxy_views.py new file mode 100644 index 0000000000..f9e6b05b1b --- /dev/null +++ b/mayan/apps/document_states/tests/test_workflow_runtime_proxy_views.py @@ -0,0 +1,96 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import GenericViewTestCase + +from ..permissions import permission_workflow_view + +from .mixins import ( + WorkflowRuntimeProxyStateViewTestMixin, + WorkflowRuntimeProxyViewTestMixin, WorkflowTestMixin +) + + +class WorkflowRuntimeProxyViewTestCase( + WorkflowRuntimeProxyViewTestMixin, WorkflowTestMixin, GenericViewTestCase +): + def setUp(self): + super(WorkflowRuntimeProxyViewTestCase, self).setUp() + self._create_test_workflow() + + def test_workflow_runtime_proxy_document_list_view_no_permission(self): + response = self._request_test_workflow_runtime_proxy_document_list_view() + self.assertNotContains( + response=response, text=self.test_workflow.label, status_code=404 + ) + + def test_workflow_runtime_proxy_document_list_view_with_access(self): + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + response = self._request_test_workflow_runtime_proxy_document_list_view() + self.assertContains( + response=response, text=self.test_workflow.label, status_code=200 + ) + + def test_workflow_runtime_proxy_list_view_no_permission(self): + response = self._request_test_workflow_runtime_proxy_list_view() + self.assertNotContains( + response=response, text=self.test_workflow.label, status_code=200 + ) + + def test_workflow_runtime_proxy_list_view_with_access(self): + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + response = self._request_test_workflow_runtime_proxy_list_view() + self.assertContains( + response=response, text=self.test_workflow.label, status_code=200 + ) + + +class WorkflowRuntimeProxyStateViewTestCase( + WorkflowRuntimeProxyStateViewTestMixin, WorkflowTestMixin, + GenericViewTestCase +): + def setUp(self): + super(WorkflowRuntimeProxyStateViewTestCase, self).setUp() + self._create_test_workflow() + self._create_test_workflow_states() + + def test_workflow_runtime_proxy_state_document_list_view_no_permission(self): + response = self._request_test_workflow_runtime_proxy_state_document_list_view() + self.assertNotContains( + response=response, text=self.test_workflow_state_1.label, + status_code=404 + ) + + def test_workflow_runtime_proxy_state_document_list_view_with_access(self): + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + response = self._request_test_workflow_runtime_proxy_state_document_list_view() + self.assertContains( + response=response, text=self.test_workflow_state_1.label, + status_code=200 + ) + + def test_workflow_runtime_proxy_state_list_view_no_permission(self): + response = self._request_test_workflow_runtime_proxy_state_list_view() + self.assertNotContains( + response=response, text=self.test_workflow_state_1.label, + status_code=404 + ) + + def test_workflow_runtime_proxy_state_list_view_with_access(self): + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + response = self._request_test_workflow_runtime_proxy_state_list_view() + self.assertContains( + response=response, text=self.test_workflow_state_1.label, + status_code=200 + ) diff --git a/mayan/apps/document_states/tests/test_workflow_state_action_views.py b/mayan/apps/document_states/tests/test_workflow_state_action_views.py index e79853fd90..7bafaae91a 100644 --- a/mayan/apps/document_states/tests/test_workflow_state_action_views.py +++ b/mayan/apps/document_states/tests/test_workflow_state_action_views.py @@ -1,13 +1,15 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..permissions import permission_workflow_edit from .mixins import WorkflowStateActionTestMixin, WorkflowTestMixin -class WorkflowStateActionViewTestCase(WorkflowStateActionTestMixin, WorkflowTestMixin, GenericViewTestCase): +class WorkflowStateActionViewTestCase( + WorkflowStateActionTestMixin, WorkflowTestMixin, GenericViewTestCase +): def setUp(self): super(WorkflowStateActionViewTestCase, self).setUp() self._create_test_workflow() @@ -15,7 +17,7 @@ class WorkflowStateActionViewTestCase(WorkflowStateActionTestMixin, WorkflowTest def _request_test_document_state_action_view(self): return self.get( - viewname='document_states:setup_workflow_state_action_list', + viewname='document_states:workflow_template_state_action_list', kwargs={'pk': self.test_workflow_state.pk} ) diff --git a/mayan/apps/document_states/tests/test_workflow_state_views.py b/mayan/apps/document_states/tests/test_workflow_state_views.py index 30fcb5dedf..1c2027da23 100644 --- a/mayan/apps/document_states/tests/test_workflow_state_views.py +++ b/mayan/apps/document_states/tests/test_workflow_state_views.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import GenericViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase from ..models import WorkflowState from ..permissions import permission_workflow_edit, permission_workflow_view diff --git a/mayan/apps/document_states/tests/test_workflow_transition_views.py b/mayan/apps/document_states/tests/test_workflow_transition_views.py index 1eb8dfb133..0aa25d168d 100644 --- a/mayan/apps/document_states/tests/test_workflow_transition_views.py +++ b/mayan/apps/document_states/tests/test_workflow_transition_views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import GenericViewTestCase -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..models import WorkflowTransition from ..permissions import ( @@ -10,7 +10,10 @@ from ..permissions import ( ) from .literals import ( - TEST_WORKFLOW_TRANSITION_LABEL, TEST_WORKFLOW_TRANSITION_LABEL_EDITED + TEST_WORKFLOW_TRANSITION_FIELD_HELP_TEXT, + TEST_WORKFLOW_TRANSITION_FIELD_LABEL, TEST_WORKFLOW_TRANSITION_FIELD_NAME, + TEST_WORKFLOW_TRANSITION_FIELD_TYPE, TEST_WORKFLOW_TRANSITION_LABEL, + TEST_WORKFLOW_TRANSITION_LABEL_EDITED ) from .mixins import ( WorkflowTestMixin, WorkflowViewTestMixin, WorkflowTransitionViewTestMixin @@ -160,7 +163,7 @@ class WorkflowTransitionDocumentViewTestCase( permission. """ response = self._request_test_workflow_transition() - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 404) # Workflow should remain in the same initial state self.assertEqual( @@ -209,7 +212,7 @@ class WorkflowTransitionEventViewTestCase( ): def _request_test_workflow_transition_event_list_view(self): return self.get( - viewname='document_states:setup_workflow_transition_events', + viewname='document_states:workflow_template_transition_events', kwargs={'pk': self.test_workflow_transition.pk} ) @@ -232,3 +235,125 @@ class WorkflowTransitionEventViewTestCase( response = self._request_test_workflow_transition_event_list_view() self.assertEqual(response.status_code, 200) + + +class WorkflowTransitionFieldViewTestCase( + WorkflowTestMixin, WorkflowTransitionViewTestMixin, GenericViewTestCase +): + def setUp(self): + super(WorkflowTransitionFieldViewTestCase, self).setUp() + self._create_test_workflow() + self._create_test_workflow_states() + self._create_test_workflow_transition() + + def _create_test_workflow_transition_field(self): + self.test_workflow_transition_field = self.test_workflow_transition.fields.create( + field_type=TEST_WORKFLOW_TRANSITION_FIELD_TYPE, + name=TEST_WORKFLOW_TRANSITION_FIELD_NAME, + label=TEST_WORKFLOW_TRANSITION_FIELD_LABEL, + help_text=TEST_WORKFLOW_TRANSITION_FIELD_HELP_TEXT + ) + + def _request_test_workflow_transition_field_list_view(self): + return self.get( + viewname='document_states:workflow_template_transition_field_list', + kwargs={'pk': self.test_workflow_transition.pk} + ) + + def test_workflow_transition_field_list_view_no_permission(self): + self._create_test_workflow_transition_field() + + response = self._request_test_workflow_transition_field_list_view() + self.assertNotContains( + response=response, + text=self.test_workflow_transition_field.label, + status_code=404 + ) + + def test_workflow_transition_field_list_view_with_access(self): + self._create_test_workflow_transition_field() + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_edit + ) + + response = self._request_test_workflow_transition_field_list_view() + self.assertContains( + response=response, + text=self.test_workflow_transition_field.label, + status_code=200 + ) + + def _request_workflow_transition_field_create_view(self): + return self.post( + viewname='document_states:workflow_template_transition_field_create', + kwargs={'pk': self.test_workflow_transition.pk}, + data={ + 'field_type': TEST_WORKFLOW_TRANSITION_FIELD_TYPE, + 'name': TEST_WORKFLOW_TRANSITION_FIELD_NAME, + 'label': TEST_WORKFLOW_TRANSITION_FIELD_LABEL, + 'help_text': TEST_WORKFLOW_TRANSITION_FIELD_HELP_TEXT + } + ) + + def test_workflow_transition_field_create_view_no_permission(self): + workflow_transition_field_count = self.test_workflow_transition.fields.count() + + response = self._request_workflow_transition_field_create_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + self.test_workflow_transition.fields.count(), + workflow_transition_field_count + ) + + def test_workflow_transition_field_create_view_with_access(self): + workflow_transition_field_count = self.test_workflow_transition.fields.count() + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_edit + ) + + response = self._request_workflow_transition_field_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_workflow_transition.fields.count(), + workflow_transition_field_count + 1 + ) + + def _request_workflow_transition_field_delete_view(self): + return self.post( + viewname='document_states:workflow_template_transition_field_delete', + kwargs={'pk': self.test_workflow_transition_field.pk}, + ) + + def test_workflow_transition_field_delete_view_no_permission(self): + self._create_test_workflow_transition_field() + + workflow_transition_field_count = self.test_workflow_transition.fields.count() + + response = self._request_workflow_transition_field_delete_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + self.test_workflow_transition.fields.count(), + workflow_transition_field_count + ) + + def test_workflow_transition_field_delete_view_with_access(self): + self._create_test_workflow_transition_field() + + workflow_transition_field_count = self.test_workflow_transition.fields.count() + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_edit + ) + + response = self._request_workflow_transition_field_delete_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_workflow_transition.fields.count(), + workflow_transition_field_count - 1 + ) diff --git a/mayan/apps/document_states/tests/test_workflow_views.py b/mayan/apps/document_states/tests/test_workflow_views.py index 24df83a095..07af93b6fe 100644 --- a/mayan/apps/document_states/tests/test_workflow_views.py +++ b/mayan/apps/document_states/tests/test_workflow_views.py @@ -1,7 +1,7 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import GenericViewTestCase -from mayan.apps.documents.tests import GenericDocumentViewTestCase +from mayan.apps.common.tests.base import GenericViewTestCase +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase from ..models import Workflow from ..permissions import ( @@ -93,31 +93,31 @@ class WorkflowViewTestCase( self.assertEqual(response.status_code, 200) self.assertContains(response, text=self.test_workflow.label) - def test_workflow_preview_view_no_access(self): + def test_workflow_template_preview_view_no_access(self): self._create_test_workflow() - response = self._request_test_workflow_preview_view() + response = self._request_test_workflow_template_preview_view() self.assertEqual(response.status_code, 404) self.assertTrue(self.test_workflow in Workflow.objects.all()) - def test_workflow_preview_view_with_access(self): + def test_workflow_template_preview_view_with_access(self): self._create_test_workflow() self.grant_access( obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_test_workflow_preview_view() + response = self._request_test_workflow_template_preview_view() self.assertEqual(response.status_code, 200) class WorkflowToolViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): def _request_workflow_launch_view(self): return self.post( - viewname='document_states:tool_launch_all_workflows', + viewname='document_states:tool_launch_workflows', ) - def test_tool_launch_all_workflows_view_no_permission(self): + def test_tool_launch_workflows_view_no_permission(self): self._create_test_workflow(add_document_type=True) self._create_test_workflow_states() self._create_test_workflow_transition() @@ -129,7 +129,7 @@ class WorkflowToolViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): self.assertEqual(self.test_document.workflows.count(), 0) - def test_tool_launch_all_workflows_view_with_permission(self): + def test_tool_launch_workflows_view_with_permission(self): self._create_test_workflow(add_document_type=True) self._create_test_workflow_states() self._create_test_workflow_transition() diff --git a/mayan/apps/document_states/urls.py b/mayan/apps/document_states/urls.py index e139e3ff8a..e184830e70 100644 --- a/mayan/apps/document_states/urls.py +++ b/mayan/apps/document_states/urls.py @@ -3,191 +3,249 @@ from __future__ import unicode_literals from django.conf.urls import url from .api_views import ( - APIDocumentTypeWorkflowListView, APIWorkflowDocumentTypeList, - APIWorkflowDocumentTypeView, APIWorkflowInstanceListView, - APIWorkflowInstanceView, APIWorkflowInstanceLogEntryListView, - APIWorkflowListView, APIWorkflowStateListView, APIWorkflowStateView, + APIDocumentTypeWorkflowRuntimeProxyListView, APIWorkflowDocumentTypeList, + APIWorkflowDocumentTypeView, APIWorkflowImageView, + APIWorkflowInstanceListView, APIWorkflowInstanceView, + APIWorkflowInstanceLogEntryListView, APIWorkflowRuntimeProxyListView, + APIWorkflowStateListView, APIWorkflowStateView, APIWorkflowTransitionListView, APIWorkflowTransitionView, APIWorkflowView ) -from .views import ( - DocumentWorkflowInstanceListView, SetupWorkflowCreateView, - SetupWorkflowDeleteView, SetupWorkflowDocumentTypesView, - SetupWorkflowEditView, SetupWorkflowListView, - SetupWorkflowStateActionCreateView, SetupWorkflowStateActionDeleteView, - SetupWorkflowStateActionEditView, SetupWorkflowStateActionListView, - SetupWorkflowStateActionSelectionView, SetupWorkflowStateCreateView, - SetupWorkflowStateDeleteView, SetupWorkflowStateEditView, - SetupWorkflowStateListView, SetupWorkflowTransitionListView, - SetupWorkflowTransitionCreateView, SetupWorkflowTransitionDeleteView, - SetupWorkflowTransitionEditView, - SetupWorkflowTransitionTriggerEventListView, ToolLaunchAllWorkflows, - WorkflowDocumentListView, WorkflowInstanceDetailView, - WorkflowImageView, WorkflowInstanceTransitionView, WorkflowListView, - WorkflowPreviewView, WorkflowStateDocumentListView, WorkflowStateListView, +from .views.workflow_instance_views import ( + WorkflowInstanceDetailView, WorkflowInstanceListView, + WorkflowInstanceTransitionSelectView, + WorkflowInstanceTransitionExecuteView +) +from .views.workflow_proxy_views import ( + WorkflowRuntimeProxyDocumentListView, + WorkflowRuntimeProxyListView, WorkflowRuntimeProxyStateDocumentListView, + WorkflowRuntimeProxyStateListView +) +from .views.workflow_template_views import ( + DocumentTypeWorkflowTemplatesView, ToolLaunchWorkflows, + WorkflowTemplateCreateView, WorkflowTemplateDeleteView, + WorkflowTemplateEditView, WorkflowTemplateListView, + WorkflowTemplatePreviewView, WorkflowTemplateDocumentTypesView +) +from .views.workflow_template_state_views import ( + WorkflowTemplateStateActionCreateView, + WorkflowTemplateStateActionDeleteView, WorkflowTemplateStateActionEditView, + WorkflowTemplateStateActionListView, + WorkflowTemplateStateActionSelectionView, WorkflowTemplateStateCreateView, + WorkflowTemplateStateDeleteView, WorkflowTemplateStateEditView, + WorkflowTemplateStateListView +) +from .views.workflow_template_transition_views import ( + WorkflowTemplateTransitionCreateView, WorkflowTemplateTransitionDeleteView, + WorkflowTemplateTransitionEditView, WorkflowTemplateTransitionListView, + WorkflowTemplateTransitionTriggerEventListView, + WorkflowTemplateTransitionFieldCreateView, + WorkflowTemplateTransitionFieldDeleteView, + WorkflowTemplateTransitionFieldEditView, + WorkflowTemplateTransitionFieldListView ) -from .views.workflow_views import SetupDocumentTypeWorkflowsView -urlpatterns_workflows = [ +urlpatterns_workflow_instances = [ url( - regex=r'^document_type/(?P\d+)/workflows/$', - view=SetupDocumentTypeWorkflowsView.as_view(), - name='document_type_workflows' - ), -] - -urlpatterns = [ - url( - regex=r'^document/(?P\d+)/workflows/$', - view=DocumentWorkflowInstanceListView.as_view(), - name='document_workflow_instance_list' + regex=r'^documents/(?P\d+)/workflows/$', + view=WorkflowInstanceListView.as_view(), + name='workflow_instance_list' ), url( - regex=r'^document/workflows/(?P\d+)/$', + regex=r'^documents/workflows/(?P\d+)/$', view=WorkflowInstanceDetailView.as_view(), name='workflow_instance_detail' ), url( - regex=r'^document/workflows/(?P\d+)/transition/$', - view=WorkflowInstanceTransitionView.as_view(), - name='workflow_instance_transition' + regex=r'^documents/workflows/(?P\d+)/transitions/select/$', + view=WorkflowInstanceTransitionSelectView.as_view(), + name='workflow_instance_transition_selection' ), url( - regex=r'^setup/all/$', view=SetupWorkflowListView.as_view(), - name='setup_workflow_list' - ), - url( - regex=r'^setup/create/$', view=SetupWorkflowCreateView.as_view(), - name='setup_workflow_create' - ), - url( - regex=r'^setup/workflow/(?P\d+)/edit/$', - view=SetupWorkflowEditView.as_view(), name='setup_workflow_edit' - ), - url( - regex=r'^setup/workflow/(?P\d+)/delete/$', - view=SetupWorkflowDeleteView.as_view(), name='setup_workflow_delete' - ), - url( - regex=r'^setup/workflow/(?P\d+)/documents/$', - view=WorkflowDocumentListView.as_view(), - name='setup_workflow_document_list' - ), - url( - regex=r'^setup/workflow/(?P\d+)/document_types/$', - view=SetupWorkflowDocumentTypesView.as_view(), - name='setup_workflow_document_types' - ), - url( - regex=r'^setup/workflow/(?P\d+)/states/$', - view=SetupWorkflowStateListView.as_view(), - name='setup_workflow_state_list' - ), - url( - regex=r'^setup/workflow/(?P\d+)/states/create/$', - view=SetupWorkflowStateCreateView.as_view(), - name='setup_workflow_state_create' - ), - url( - regex=r'^setup/workflow/(?P\d+)/transitions/$', - view=SetupWorkflowTransitionListView.as_view(), - name='setup_workflow_transition_list' - ), - url( - regex=r'^setup/workflow/(?P\d+)/transitions/create/$', - view=SetupWorkflowTransitionCreateView.as_view(), - name='setup_workflow_transition_create' - ), - url( - regex=r'^setup/workflow/(?P\d+)/transitions/events/$', - view=SetupWorkflowTransitionTriggerEventListView.as_view(), - name='setup_workflow_transition_events' - ), - url( - regex=r'^setup/workflow/state/(?P\d+)/delete/$', - view=SetupWorkflowStateDeleteView.as_view(), - name='setup_workflow_state_delete' - ), - url( - regex=r'^setup/workflow/state/(?P\d+)/edit/$', - view=SetupWorkflowStateEditView.as_view(), - name='setup_workflow_state_edit' - ), - url( - regex=r'^setup/workflow/state/(?P\d+)/actions/$', - view=SetupWorkflowStateActionListView.as_view(), - name='setup_workflow_state_action_list' - ), - url( - regex=r'^setup/workflow/state/(?P\d+)/actions/selection/$', - view=SetupWorkflowStateActionSelectionView.as_view(), - name='setup_workflow_state_action_selection' - ), - url( - regex=r'^setup/workflow/state/(?P\d+)/actions/(?P[a-zA-Z0-9_.]+)/create/$', - view=SetupWorkflowStateActionCreateView.as_view(), - name='setup_workflow_state_action_create' - ), - url( - regex=r'^setup/workflow/state/actions/(?P\d+)/delete/$', - view=SetupWorkflowStateActionDeleteView.as_view(), - name='setup_workflow_state_action_delete' - ), - url( - regex=r'^setup/workflow/state/actions/(?P\d+)/edit/$', - view=SetupWorkflowStateActionEditView.as_view(), - name='setup_workflow_state_action_edit' - ), - url( - regex=r'^setup/workflow/transitions/(?P\d+)/delete/$', - view=SetupWorkflowTransitionDeleteView.as_view(), - name='setup_workflow_transition_delete' - ), - url( - regex=r'^setup/workflow/transitions/(?P\d+)/edit/$', - view=SetupWorkflowTransitionEditView.as_view(), - name='setup_workflow_transition_edit' - ), - url( - regex=r'^tools/workflow/all/launch/$', - view=ToolLaunchAllWorkflows.as_view(), - name='tool_launch_all_workflows' - ), - url( - regex=r'all/$', - view=WorkflowListView.as_view(), - name='workflow_list' - ), - url( - regex=r'^(?P\d+)/documents/$', - view=WorkflowDocumentListView.as_view(), - name='workflow_document_list' - ), - url( - regex=r'^(?P\d+)/states/$', - view=WorkflowStateListView.as_view(), - name='workflow_state_list' - ), - url( - regex=r'^(?P\d+)/image/$', - view=WorkflowImageView.as_view(), - name='workflow_image' - ), - url( - regex=r'^(?P\d+)/preview/$', - view=WorkflowPreviewView.as_view(), - name='workflow_preview' - ), - url( - regex=r'^state/(?P\d+)/documents/$', - view=WorkflowStateDocumentListView.as_view(), - name='workflow_state_document_list' + regex=r'^documents/workflows/(?P\d+)/transitions/(?P\d+)/execute/$', + view=WorkflowInstanceTransitionExecuteView.as_view(), + name='workflow_instance_transition_execute' ), ] -urlpatterns.extend(urlpatterns_workflows) + +urlpatterns_workflow_runtime_proxies = [ + url( + regex=r'workflow_runtime_proxies/$', + view=WorkflowRuntimeProxyListView.as_view(), + name='workflow_runtime_proxy_list' + ), + url( + regex=r'^workflow_runtime_proxies/(?P\d+)/documents/$', + view=WorkflowRuntimeProxyDocumentListView.as_view(), + name='workflow_runtime_proxy_document_list' + ), + url( + regex=r'^workflow_runtime_proxies/(?P\d+)/states/$', + view=WorkflowRuntimeProxyStateListView.as_view(), + name='workflow_runtime_proxy_state_list' + ), + url( + regex=r'^workflow_runtime_proxies/states/(?P\d+)/documents/$', + view=WorkflowRuntimeProxyStateDocumentListView.as_view(), + name='workflow_runtime_proxy_state_document_list' + ), +] + +urlpatterns_workflow_states = [ + url( + regex=r'^workflow_templates/(?P\d+)/states/$', + view=WorkflowTemplateStateListView.as_view(), + name='workflow_template_state_list' + ), + url( + regex=r'^workflow_templates/(?P\d+)/states/create/$', + view=WorkflowTemplateStateCreateView.as_view(), + name='workflow_template_state_create' + ), + url( + regex=r'^workflow_templates/states/(?P\d+)/delete/$', + view=WorkflowTemplateStateDeleteView.as_view(), + name='workflow_template_state_delete' + ), + url( + regex=r'^workflow_templates/states/(?P\d+)/edit/$', + view=WorkflowTemplateStateEditView.as_view(), + name='workflow_template_state_edit' + ), +] + +urlpatterns_workflow_state_actions = [ + url( + regex=r'^workflow_templates/states/(?P\d+)/actions/$', + view=WorkflowTemplateStateActionListView.as_view(), + name='workflow_template_state_action_list' + ), + url( + regex=r'^workflow_templates/states/(?P\d+)/actions/selection/$', + view=WorkflowTemplateStateActionSelectionView.as_view(), + name='workflow_template_state_action_selection' + ), + url( + regex=r'^workflow_templates/states/(?P\d+)/actions/(?P[a-zA-Z0-9_.]+)/create/$', + view=WorkflowTemplateStateActionCreateView.as_view(), + name='workflow_template_state_action_create' + ), + url( + regex=r'^workflow_templates/states/actions/(?P\d+)/delete/$', + view=WorkflowTemplateStateActionDeleteView.as_view(), + name='workflow_template_state_action_delete' + ), + url( + regex=r'^workflow_templates/states/actions/(?P\d+)/edit/$', + view=WorkflowTemplateStateActionEditView.as_view(), + name='workflow_template_state_action_edit' + ), +] + +urlpatterns_workflow_templates = [ + url( + regex=r'^workflow_templates/$', view=WorkflowTemplateListView.as_view(), + name='workflow_template_list' + ), + url( + regex=r'^workflow_templates/create/$', view=WorkflowTemplateCreateView.as_view(), + name='workflow_template_create' + ), + url( + regex=r'^workflow_templates/(?P\d+)/delete/$', + view=WorkflowTemplateDeleteView.as_view(), name='workflow_template_delete' + ), + url( + regex=r'^workflow_templates/(?P\d+)/document_types/$', + view=WorkflowTemplateDocumentTypesView.as_view(), + name='workflow_template_document_types' + ), + url( + regex=r'^workflow_templates/(?P\d+)/edit/$', + view=WorkflowTemplateEditView.as_view(), name='workflow_template_edit' + ), + url( + regex=r'^workflow_templates/(?P\d+)/preview/$', + view=WorkflowTemplatePreviewView.as_view(), + name='workflow_template_preview' + ), + url( + regex=r'^document_types/(?P\d+)/workflow_templates/$', + view=DocumentTypeWorkflowTemplatesView.as_view(), + name='document_type_workflow_templates' + ), +] +urlpatterns_workflow_transitions = [ + url( + regex=r'^workflow_templates/(?P\d+)/transitions/$', + view=WorkflowTemplateTransitionListView.as_view(), + name='workflow_template_transition_list' + ), + url( + regex=r'^workflow_templates/(?P\d+)/transitions/create/$', + view=WorkflowTemplateTransitionCreateView.as_view(), + name='workflow_template_transition_create' + ), + url( + regex=r'^workflow_templates/(?P\d+)/transitions/events/$', + view=WorkflowTemplateTransitionTriggerEventListView.as_view(), + name='workflow_template_transition_events' + ), + url( + regex=r'^workflow_templates/transitions/(?P\d+)/delete/$', + view=WorkflowTemplateTransitionDeleteView.as_view(), + name='workflow_template_transition_delete' + ), + url( + regex=r'^workflow_templates/transitions/(?P\d+)/edit/$', + view=WorkflowTemplateTransitionEditView.as_view(), + name='workflow_template_transition_edit' + ), +] + +urlpatterns_workflow_transition_fields = [ + url( + regex=r'^workflow_templates/transitions/(?P\d+)/fields/create/$', + view=WorkflowTemplateTransitionFieldCreateView.as_view(), + name='workflow_template_transition_field_create' + ), + url( + regex=r'^workflow_templates/transitions/(?P\d+)/fields/$', + view=WorkflowTemplateTransitionFieldListView.as_view(), + name='workflow_template_transition_field_list' + ), + url( + regex=r'^workflow_templates/transitions/fields/(?P\d+)/delete/$', + view=WorkflowTemplateTransitionFieldDeleteView.as_view(), + name='workflow_template_transition_field_delete' + ), + url( + regex=r'^workflow_templates/transitions/fields/(?P\d+)/edit/$', + view=WorkflowTemplateTransitionFieldEditView.as_view(), + name='workflow_template_transition_field_edit' + ), +] + +urlpatterns_tools = [ + url( + regex=r'^tools/workflows/launch/$', + view=ToolLaunchWorkflows.as_view(), + name='tool_launch_workflows' + ), +] + +urlpatterns = [] +urlpatterns.extend(urlpatterns_tools) +urlpatterns.extend(urlpatterns_workflow_instances) +urlpatterns.extend(urlpatterns_workflow_runtime_proxies) +urlpatterns.extend(urlpatterns_workflow_states) +urlpatterns.extend(urlpatterns_workflow_state_actions) +urlpatterns.extend(urlpatterns_workflow_templates) +urlpatterns.extend(urlpatterns_workflow_transitions) +urlpatterns.extend(urlpatterns_workflow_transition_fields) api_urls = [ url( - regex=r'^workflows/$', view=APIWorkflowListView.as_view(), + regex=r'^workflows/$', view=APIWorkflowRuntimeProxyListView.as_view(), name='workflow-list' ), url( @@ -204,6 +262,10 @@ api_urls = [ view=APIWorkflowDocumentTypeView.as_view(), name='workflow-document-type-detail' ), + url( + regex=r'^workflows/(?P\d+)/image/$', + name='workflow-image', view=APIWorkflowImageView.as_view() + ), url( regex=r'^workflows/(?P[0-9]+)/states/$', view=APIWorkflowStateListView.as_view(), name='workflowstate-list' @@ -239,7 +301,7 @@ api_urls = [ ), url( regex=r'^document_types/(?P[0-9]+)/workflows/$', - view=APIDocumentTypeWorkflowListView.as_view(), + view=APIDocumentTypeWorkflowRuntimeProxyListView.as_view(), name='documenttype-workflow-list' ), ] diff --git a/mayan/apps/document_states/utils.py b/mayan/apps/document_states/utils.py new file mode 100644 index 0000000000..252ffd5165 --- /dev/null +++ b/mayan/apps/document_states/utils.py @@ -0,0 +1,12 @@ +from __future__ import unicode_literals + +from django.apps import apps + +from .literals import WORKFLOW_IMAGE_CACHE_NAME + + +def callback_update_workflow_image_cache_size(setting): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + cache = Cache.objects.get(name=WORKFLOW_IMAGE_CACHE_NAME) + cache.maximum_size = setting.value + cache.save() diff --git a/mayan/apps/document_states/views/__init__.py b/mayan/apps/document_states/views/__init__.py index d6e36751b2..e69de29bb2 100644 --- a/mayan/apps/document_states/views/__init__.py +++ b/mayan/apps/document_states/views/__init__.py @@ -1,3 +0,0 @@ -from .workflow_instance_views import * # NOQA -from .workflow_proxy_views import * # NOQA -from .workflow_views import * # NOQA diff --git a/mayan/apps/document_states/views/workflow_instance_views.py b/mayan/apps/document_states/views/workflow_instance_views.py index 66750fc468..6fcfd38fbd 100644 --- a/mayan/apps/document_states/views/workflow_instance_views.py +++ b/mayan/apps/document_states/views/workflow_instance_views.py @@ -4,25 +4,24 @@ from django.contrib import messages from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.template import RequestContext +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from mayan.apps.acls.models import AccessControlList +from mayan.apps.common.forms import DynamicForm from mayan.apps.common.generics import FormView, SingleObjectListView +from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.documents.models import Document -from ..forms import WorkflowInstanceTransitionForm -from ..icons import icon_workflow_instance_detail, icon_workflow_list +from ..forms import WorkflowInstanceTransitionSelectForm +from ..icons import icon_workflow_instance_detail, icon_workflow_template_list from ..links import link_workflow_instance_transition +from ..literals import FIELD_TYPE_MAPPING, WIDGET_CLASS_MAPPING from ..models import WorkflowInstance from ..permissions import permission_workflow_view -__all__ = ( - 'DocumentWorkflowInstanceListView', 'WorkflowInstanceDetailView', - 'WorkflowInstanceTransitionView' -) - -class DocumentWorkflowInstanceListView(SingleObjectListView): +class WorkflowInstanceListView(SingleObjectListView): def dispatch(self, request, *args, **kwargs): AccessControlList.objects.check_access( obj=self.get_document(), permissions=(permission_workflow_view,), @@ -30,7 +29,7 @@ class DocumentWorkflowInstanceListView(SingleObjectListView): ) return super( - DocumentWorkflowInstanceListView, self + WorkflowInstanceListView, self ).dispatch(request, *args, **kwargs) def get_document(self): @@ -39,7 +38,7 @@ class DocumentWorkflowInstanceListView(SingleObjectListView): def get_extra_context(self): return { 'hide_link': True, - 'no_results_icon': icon_workflow_list, + 'no_results_icon': icon_workflow_template_list, 'no_results_text': _( 'Assign workflows to the document type of this document ' 'to have this document execute those workflows. ' @@ -100,14 +99,17 @@ class WorkflowInstanceDetailView(SingleObjectListView): return get_object_or_404(klass=WorkflowInstance, pk=self.kwargs['pk']) -class WorkflowInstanceTransitionView(FormView): - form_class = WorkflowInstanceTransitionForm +class WorkflowInstanceTransitionExecuteView(FormView): + form_class = DynamicForm template_name = 'appearance/generic_form.html' def form_valid(self, form): + form_data = form.cleaned_data + comment = form_data.pop('comment') + self.get_workflow_instance().do_transition( - comment=form.cleaned_data['comment'], - transition=form.cleaned_data['transition'], user=self.request.user + comment=comment, extra_data=form_data, + transition=self.get_workflow_transition(), user=self.request.user, ) messages.success( self.request, _( @@ -122,19 +124,99 @@ class WorkflowInstanceTransitionView(FormView): 'object': self.get_workflow_instance().document, 'submit_label': _('Submit'), 'title': _( - 'Do transition for workflow: %s' - ) % self.get_workflow_instance(), + 'Execute transition "%(transition)s" for workflow: %(workflow)s' + ) % { + 'transition': self.get_workflow_transition(), + 'workflow': self.get_workflow_instance(), + }, 'workflow_instance': self.get_workflow_instance(), } def get_form_extra_kwargs(self): - return { - 'user': self.request.user, - 'workflow_instance': self.get_workflow_instance() + schema = { + 'fields': { + 'comment': { + 'label': _('Comment'), + 'class': 'django.forms.CharField', 'kwargs': { + 'help_text': _( + 'Optional comment to attach to the transition.' + ), + 'required': False, + } + } + }, + 'widgets': { + 'comment': { + 'class': 'django.forms.widgets.Textarea', + 'kwargs': { + 'attrs': { + 'rows': 3 + } + } + } + } } + for field in self.get_workflow_transition().fields.all(): + schema['fields'][field.name] = { + 'class': FIELD_TYPE_MAPPING[field.field_type], + 'help_text': field.help_text, + 'label': field.label, + 'required': field.required, + } + if field.widget: + schema['widgets'][field.name] = { + 'class': WIDGET_CLASS_MAPPING[field.widget], + 'kwargs': field.get_widget_kwargs() + } + + return {'schema': schema} + def get_success_url(self): return self.get_workflow_instance().get_absolute_url() def get_workflow_instance(self): - return get_object_or_404(klass=WorkflowInstance, pk=self.kwargs['pk']) + return get_object_or_404( + klass=WorkflowInstance, pk=self.kwargs['workflow_instance_pk'] + ) + + def get_workflow_transition(self): + return get_object_or_404( + klass=self.get_workflow_instance().get_transition_choices( + _user=self.request.user + ), pk=self.kwargs['workflow_transition_pk'] + ) + + +class WorkflowInstanceTransitionSelectView(ExternalObjectMixin, FormView): + external_object_class = WorkflowInstance + form_class = WorkflowInstanceTransitionSelectForm + template_name = 'appearance/generic_form.html' + + def form_valid(self, form): + return HttpResponseRedirect( + redirect_to=reverse( + viewname='document_states:workflow_instance_transition_execute', + kwargs={ + 'workflow_instance_pk': self.external_object.pk, + 'workflow_transition_pk': form.cleaned_data['transition'].pk + } + ) + ) + + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.external_object.document, + 'submit_label': _('Select'), + 'title': _( + 'Select transition for workflow: %s' + ) % self.external_object, + 'workflow_instance': self.external_object, + } + + def get_form_extra_kwargs(self): + return { + 'user': self.request.user, + 'workflow_instance': self.external_object + } diff --git a/mayan/apps/document_states/views/workflow_proxy_views.py b/mayan/apps/document_states/views/workflow_proxy_views.py index 21efa2bb9e..e1a1ed6e28 100644 --- a/mayan/apps/document_states/views/workflow_proxy_views.py +++ b/mayan/apps/document_states/views/workflow_proxy_views.py @@ -1,45 +1,34 @@ from __future__ import absolute_import, unicode_literals -from django.shortcuts import get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ -from mayan.apps.acls.models import AccessControlList from mayan.apps.common.generics import SingleObjectListView +from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.documents.models import Document -from mayan.apps.documents.views import DocumentListView +from mayan.apps.documents.views.document_views import DocumentListView -from ..icons import icon_workflow_list -from ..links import link_setup_workflow_create, link_setup_workflow_state_create +from ..icons import icon_workflow_template_list +from ..links import link_workflow_template_create, link_workflow_template_state_create from ..models import WorkflowRuntimeProxy, WorkflowStateRuntimeProxy from ..permissions import permission_workflow_view -__all__ = ( - 'WorkflowDocumentListView', 'WorkflowListView', - 'WorkflowStateDocumentListView', 'WorkflowStateListView' -) - -class WorkflowDocumentListView(DocumentListView): - def dispatch(self, request, *args, **kwargs): - self.workflow = get_object_or_404( - klass=WorkflowRuntimeProxy, pk=self.kwargs['pk'] - ) - - AccessControlList.objects.check_access( - obj=self.workflow, permissions=(permission_workflow_view,), - user=request.user - ) - - return super( - WorkflowDocumentListView, self - ).dispatch(request, *args, **kwargs) +class WorkflowRuntimeProxyDocumentListView( + ExternalObjectMixin, DocumentListView +): + external_object_class = WorkflowRuntimeProxy + external_object_permission = permission_workflow_view def get_document_queryset(self): - return Document.objects.filter(workflows__workflow=self.workflow) + return Document.objects.filter( + workflows__workflow=self.external_object + ) def get_extra_context(self): - context = super(WorkflowDocumentListView, self).get_extra_context() + context = super( + WorkflowRuntimeProxyDocumentListView, self + ).get_extra_context() context.update( { 'no_results_text': _( @@ -49,21 +38,23 @@ class WorkflowDocumentListView(DocumentListView): 'no_results_title': _( 'There are no documents executing this workflow' ), - 'object': self.workflow, - 'title': _('Documents with the workflow: %s') % self.workflow + 'object': self.external_object, + 'title': _( + 'Documents with the workflow: %s' + ) % self.external_object } ) return context -class WorkflowListView(SingleObjectListView): +class WorkflowRuntimeProxyListView(SingleObjectListView): object_permission = permission_workflow_view def get_extra_context(self): return { 'hide_object': True, - 'no_results_icon': icon_workflow_list, - 'no_results_main_link': link_setup_workflow_create.resolve( + 'no_results_icon': icon_workflow_template_list, + 'no_results_main_link': link_workflow_template_create.resolve( context=RequestContext(request=self.request) ), 'no_results_text': _( @@ -79,16 +70,22 @@ class WorkflowListView(SingleObjectListView): return WorkflowRuntimeProxy.objects.all() -class WorkflowStateDocumentListView(DocumentListView): +class WorkflowRuntimeProxyStateDocumentListView( + ExternalObjectMixin, DocumentListView +): + external_object_class = WorkflowStateRuntimeProxy + external_object_permission = permission_workflow_view + def get_document_queryset(self): - return self.get_workflow_state().get_documents() + return self.external_object.get_documents() def get_extra_context(self): - workflow_state = self.get_workflow_state() - context = super(WorkflowStateDocumentListView, self).get_extra_context() + context = super( + WorkflowRuntimeProxyStateDocumentListView, self + ).get_extra_context() context.update( { - 'object': workflow_state, + 'object': self.external_object, 'navigation_object_list': ('object', 'workflow'), 'no_results_title': _( 'There are no documents in this workflow state' @@ -96,46 +93,29 @@ class WorkflowStateDocumentListView(DocumentListView): 'title': _( 'Documents in the workflow "%s", state "%s"' ) % ( - workflow_state.workflow, workflow_state + self.external_object.workflow, self.external_object ), 'workflow': WorkflowRuntimeProxy.objects.get( - pk=workflow_state.workflow.pk + pk=self.external_object.workflow.pk ), } ) return context - def get_workflow_state(self): - workflow_state = get_object_or_404( - klass=WorkflowStateRuntimeProxy, pk=self.kwargs['pk'] - ) - AccessControlList.objects.check_access( - obj=workflow_state.workflow, - permissions=(permission_workflow_view,), user=self.request.user - ) - - return workflow_state - - -class WorkflowStateListView(SingleObjectListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - obj=self.get_workflow(), permissions=(permission_workflow_view,), - user=request.user - ) - - return super( - WorkflowStateListView, self - ).dispatch(request, *args, **kwargs) +class WorkflowRuntimeProxyStateListView( + ExternalObjectMixin, SingleObjectListView +): + external_object_class = WorkflowRuntimeProxy + external_object_permission = permission_workflow_view def get_extra_context(self): return { 'hide_link': True, 'hide_object': True, - 'no_results_main_link': link_setup_workflow_state_create.resolve( + 'no_results_main_link': link_workflow_template_state_create.resolve( context=RequestContext( - request=self.request, dict_={'object': self.get_workflow()} + request=self.request, dict_={'object': self.external_object} ) ), 'no_results_text': _( @@ -144,16 +124,11 @@ class WorkflowStateListView(SingleObjectListView): 'no_results_title': _( 'This workflow doesn\'t have any state' ), - 'object': self.get_workflow(), - 'title': _('States of workflow: %s') % self.get_workflow() + 'object': self.external_object, + 'title': _('States of workflow: %s') % self.external_object } def get_source_queryset(self): return WorkflowStateRuntimeProxy.objects.filter( - workflow=self.get_workflow() - ) - - def get_workflow(self): - return get_object_or_404( - klass=WorkflowRuntimeProxy, pk=self.kwargs['pk'] + workflow=self.external_object ) diff --git a/mayan/apps/document_states/views/workflow_template_state_views.py b/mayan/apps/document_states/views/workflow_template_state_views.py new file mode 100644 index 0000000000..ab846c15b2 --- /dev/null +++ b/mayan/apps/document_states/views/workflow_template_state_views.py @@ -0,0 +1,303 @@ +from __future__ import absolute_import, unicode_literals + +from django.http import Http404, HttpResponseRedirect +from django.shortcuts import get_object_or_404 +from django.template import RequestContext +from django.urls import reverse +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.common.generics import ( + FormView, SingleObjectCreateView, SingleObjectDeleteView, + SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView, + SingleObjectEditView, SingleObjectListView +) +from mayan.apps.common.mixins import ExternalObjectMixin + +from ..classes import WorkflowAction +from ..forms import ( + WorkflowActionSelectionForm, WorkflowStateActionDynamicForm, + WorkflowStateForm +) +from ..icons import icon_workflow_state, icon_workflow_state_action +from ..links import ( + link_workflow_template_state_create, + link_workflow_template_state_action_selection, +) +from ..models import Workflow, WorkflowState, WorkflowStateAction +from ..permissions import permission_workflow_edit, permission_workflow_view + + +class WorkflowTemplateStateActionCreateView(SingleObjectDynamicFormCreateView): + form_class = WorkflowStateActionDynamicForm + object_permission = permission_workflow_edit + + def get_class(self): + try: + return WorkflowAction.get(name=self.kwargs['class_path']) + except KeyError: + raise Http404( + '{} class not found'.format(self.kwargs['class_path']) + ) + + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow'), + 'object': self.get_object(), + 'title': _( + 'Create a "%s" workflow action' + ) % self.get_class().label, + 'workflow': self.get_object().workflow + } + + def get_form_extra_kwargs(self): + return { + 'request': self.request, + 'action_path': self.kwargs['class_path'] + } + + def get_form_schema(self): + return self.get_class()().get_form_schema(request=self.request) + + def get_instance_extra_data(self): + return { + 'action_path': self.kwargs['class_path'], + 'state': self.get_object() + } + + def get_object(self): + return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_state_action_list', + kwargs={'pk': self.get_object().pk} + ) + + +class WorkflowTemplateStateActionDeleteView(SingleObjectDeleteView): + model = WorkflowStateAction + object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'navigation_object_list': ( + 'object', 'workflow_state', 'workflow' + ), + 'object': self.get_object(), + 'title': _('Delete workflow state action: %s') % self.get_object(), + 'workflow': self.get_object().state.workflow, + 'workflow_state': self.get_object().state, + } + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_state_action_list', + kwargs={'pk': self.get_object().state.pk} + ) + + +class WorkflowTemplateStateActionEditView(SingleObjectDynamicFormEditView): + form_class = WorkflowStateActionDynamicForm + model = WorkflowStateAction + object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'navigation_object_list': ( + 'object', 'workflow_state', 'workflow' + ), + 'object': self.get_object(), + 'title': _('Edit workflow state action: %s') % self.get_object(), + 'workflow': self.get_object().state.workflow, + 'workflow_state': self.get_object().state, + } + + def get_form_extra_kwargs(self): + return { + 'request': self.request, + 'action_path': self.get_object().action_path, + } + + def get_form_schema(self): + return self.get_object().get_class_instance().get_form_schema( + request=self.request + ) + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_state_action_list', + kwargs={'pk': self.get_object().state.pk} + ) + + +class WorkflowTemplateStateActionListView(SingleObjectListView): + object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'hide_object': True, + 'navigation_object_list': ('object', 'workflow'), + 'no_results_icon': icon_workflow_state_action, + 'no_results_main_link': link_workflow_template_state_action_selection.resolve( + context=RequestContext( + request=self.request, dict_={ + 'object': self.get_workflow_state() + } + ) + ), + 'no_results_text': _( + 'Workflow state actions are macros that get executed when ' + 'documents enters or leaves the state in which they reside.' + ), + 'no_results_title': _( + 'There are no actions for this workflow state' + ), + 'object': self.get_workflow_state(), + 'title': _( + 'Actions for workflow state: %s' + ) % self.get_workflow_state(), + 'workflow': self.get_workflow_state().workflow, + } + + def get_form_schema(self): + return {'fields': self.get_class().fields} + + def get_source_queryset(self): + return self.get_workflow_state().actions.all() + + def get_workflow_state(self): + return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + + +class WorkflowTemplateStateActionSelectionView(FormView): + form_class = WorkflowActionSelectionForm + view_permission = permission_workflow_edit + + def form_valid(self, form): + klass = form.cleaned_data['klass'] + return HttpResponseRedirect( + redirect_to=reverse( + viewname='document_states:workflow_template_state_action_create', + kwargs={'pk': self.get_object().pk, 'class_path': klass} + ) + ) + + def get_extra_context(self): + return { + 'navigation_object_list': ( + 'object', 'workflow' + ), + 'object': self.get_object(), + 'title': _('New workflow state action selection'), + 'workflow': self.get_object().workflow, + } + + def get_object(self): + return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) + + +class WorkflowTemplateStateCreateView(ExternalObjectMixin, SingleObjectCreateView): + external_object_class = Workflow + external_object_permission = permission_workflow_edit + external_object_pk_url_kwarg = 'pk' + form_class = WorkflowStateForm + + def get_extra_context(self): + return { + 'object': self.get_workflow(), + 'title': _( + 'Create states for workflow: %s' + ) % self.get_workflow() + } + + def get_instance_extra_data(self): + return {'workflow': self.get_workflow()} + + def get_source_queryset(self): + return self.get_workflow().states.all() + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_state_list', + kwargs={'pk': self.kwargs['pk']} + ) + + def get_workflow(self): + return self.external_object + + +class WorkflowTemplateStateDeleteView(SingleObjectDeleteView): + model = WorkflowState + object_permission = permission_workflow_edit + pk_url_kwarg = 'pk' + + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'title': _( + 'Delete workflow state: %s?' + ) % self.object, + 'workflow_instance': self.get_object().workflow, + } + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_state_list', + kwargs={'pk': self.get_object().workflow.pk} + ) + + +class WorkflowTemplateStateEditView(SingleObjectEditView): + form_class = WorkflowStateForm + model = WorkflowState + object_permission = permission_workflow_edit + pk_url_kwarg = 'pk' + + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'title': _( + 'Edit workflow state: %s' + ) % self.object, + 'workflow_instance': self.get_object().workflow, + } + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_state_list', + kwargs={'pk': self.get_object().workflow.pk} + ) + + +class WorkflowTemplateStateListView(ExternalObjectMixin, SingleObjectListView): + external_object_class = Workflow + external_object_permission = permission_workflow_view + external_object_pk_url_kwarg = 'pk' + object_permission = permission_workflow_view + + def get_extra_context(self): + return { + 'hide_object': True, + 'no_results_icon': icon_workflow_state, + 'no_results_main_link': link_workflow_template_state_create.resolve( + context=RequestContext( + self.request, {'object': self.get_workflow()} + ) + ), + 'no_results_text': _( + 'Create states and link them using transitions.' + ), + 'no_results_title': _( + 'This workflow doesn\'t have any states' + ), + 'object': self.get_workflow(), + 'title': _('States of workflow: %s') % self.get_workflow() + } + + def get_source_queryset(self): + return self.get_workflow().states.all() + + def get_workflow(self): + return self.external_object diff --git a/mayan/apps/document_states/views/workflow_template_transition_views.py b/mayan/apps/document_states/views/workflow_template_transition_views.py new file mode 100644 index 0000000000..f33444751e --- /dev/null +++ b/mayan/apps/document_states/views/workflow_template_transition_views.py @@ -0,0 +1,347 @@ +from __future__ import absolute_import, unicode_literals + +from django.contrib import messages +from django.template import RequestContext +from django.urls import reverse +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.common.generics import ( + FormView, SingleObjectCreateView, SingleObjectDeleteView, + SingleObjectEditView, SingleObjectListView +) +from mayan.apps.common.mixins import ExternalObjectMixin +from mayan.apps.events.classes import EventType +from mayan.apps.events.models import StoredEventType + +from ..forms import ( + WorkflowTransitionForm, WorkflowTransitionTriggerEventRelationshipFormSet +) +from ..icons import icon_workflow_transition, icon_workflow_transition_field +from ..links import ( + link_workflow_template_transition_create, + link_workflow_template_transition_field_create, +) +from ..models import Workflow, WorkflowTransition, WorkflowTransitionField +from ..permissions import permission_workflow_edit, permission_workflow_view + + +class WorkflowTemplateTransitionCreateView(ExternalObjectMixin, SingleObjectCreateView): + external_object_class = Workflow + external_object_permission = permission_workflow_edit + external_object_pk_url_kwarg = 'pk' + form_class = WorkflowTransitionForm + + def get_extra_context(self): + return { + 'object': self.get_workflow(), + 'title': _( + 'Create transitions for workflow: %s' + ) % self.get_workflow() + } + + def get_form_kwargs(self): + kwargs = super( + WorkflowTemplateTransitionCreateView, self + ).get_form_kwargs() + kwargs['workflow'] = self.get_workflow() + return kwargs + + def get_instance_extra_data(self): + return {'workflow': self.get_workflow()} + + def get_source_queryset(self): + return self.get_workflow().transitions.all() + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_transition_list', + kwargs={'pk': self.kwargs['pk']} + ) + + def get_workflow(self): + return self.external_object + + +class WorkflowTemplateTransitionDeleteView(SingleObjectDeleteView): + model = WorkflowTransition + object_permission = permission_workflow_edit + pk_url_kwarg = 'pk' + + def get_extra_context(self): + return { + 'object': self.get_object(), + 'navigation_object_list': ('object', 'workflow_instance'), + 'title': _( + 'Delete workflow transition: %s?' + ) % self.object, + 'workflow_instance': self.get_object().workflow, + } + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_transition_list', + kwargs={'pk': self.get_object().workflow.pk} + ) + + +class WorkflowTemplateTransitionEditView(SingleObjectEditView): + form_class = WorkflowTransitionForm + model = WorkflowTransition + object_permission = permission_workflow_edit + pk_url_kwarg = 'pk' + + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'title': _( + 'Edit workflow transition: %s' + ) % self.object, + 'workflow_instance': self.get_object().workflow, + } + + def get_form_kwargs(self): + kwargs = super( + WorkflowTemplateTransitionEditView, self + ).get_form_kwargs() + kwargs['workflow'] = self.get_object().workflow + return kwargs + + def get_success_url(self): + return reverse( + viewname='document_states:workflow_template_transition_list', + kwargs={'pk': self.get_object().workflow.pk} + ) + + +class WorkflowTemplateTransitionListView(ExternalObjectMixin, SingleObjectListView): + external_object_class = Workflow + external_object_permission = permission_workflow_view + external_object_pk_url_kwarg = 'pk' + object_permission = permission_workflow_view + + def get_extra_context(self): + return { + 'hide_object': True, + 'no_results_icon': icon_workflow_transition, + 'no_results_main_link': link_workflow_template_transition_create.resolve( + context=RequestContext( + self.request, {'object': self.get_workflow()} + ) + ), + 'no_results_text': _( + 'Create a transition and use it to move a workflow from ' + ' one state to another.' + ), + 'no_results_title': _( + 'This workflow doesn\'t have any transitions' + ), + 'object': self.get_workflow(), + 'title': _( + 'Transitions of workflow: %s' + ) % self.get_workflow() + } + + def get_source_queryset(self): + return self.get_workflow().transitions.all() + + def get_workflow(self): + return self.external_object + + +class WorkflowTemplateTransitionTriggerEventListView(ExternalObjectMixin, FormView): + external_object_class = WorkflowTransition + external_object_permission = permission_workflow_edit + external_object_pk_url_kwarg = 'pk' + form_class = WorkflowTransitionTriggerEventRelationshipFormSet + + def dispatch(self, *args, **kwargs): + EventType.refresh() + return super( + WorkflowTemplateTransitionTriggerEventListView, self + ).dispatch(*args, **kwargs) + + def form_valid(self, form): + try: + for instance in form: + instance.save() + except Exception as exception: + messages.error( + message=_( + 'Error updating workflow transition trigger events; %s' + ) % exception, request=self.request + + ) + else: + messages.success( + message=_( + 'Workflow transition trigger events updated successfully' + ), request=self.request + ) + + return super( + WorkflowTemplateTransitionTriggerEventListView, self + ).form_valid(form=form) + + def get_extra_context(self): + return { + 'form_display_mode_table': True, + 'navigation_object_list': ('object', 'workflow'), + 'object': self.get_object(), + 'subtitle': _( + 'Triggers are events that cause this transition to execute ' + 'automatically.' + ), + 'title': _( + 'Workflow transition trigger events for: %s' + ) % self.get_object(), + 'workflow': self.get_object().workflow, + } + + def get_initial(self): + obj = self.get_object() + initial = [] + + # Return the queryset by name from the sorted list of the class + event_type_ids = [event_type.id for event_type in EventType.all()] + event_type_queryset = StoredEventType.objects.filter( + name__in=event_type_ids + ) + + # Sort queryset in Python by namespace, then by label + event_type_queryset = sorted( + event_type_queryset, key=lambda x: (x.namespace, x.label) + ) + + for event_type in event_type_queryset: + initial.append({ + 'transition': obj, + 'event_type': event_type, + }) + return initial + + def get_object(self): + return self.external_object + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_transition_list', + kwargs={'pk': self.get_object().workflow.pk} + ) + + +class WorkflowTemplateTransitionFieldCreateView(ExternalObjectMixin, SingleObjectCreateView): + external_object_class = WorkflowTransition + external_object_permission = permission_workflow_edit + fields = ( + 'name', 'label', 'field_type', 'help_text', 'required', 'widget', + 'widget_kwargs' + ) + + def get_extra_context(self): + return { + 'navigation_object_list': ('transition', 'workflow'), + 'transition': self.external_object, + 'title': _( + 'Create a field for workflow transition: %s' + ) % self.external_object, + 'workflow': self.external_object.workflow + } + + def get_instance_extra_data(self): + return { + 'transition': self.external_object, + } + + def get_queryset(self): + return self.external_object.fields.all() + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_transition_field_list', + kwargs={'pk': self.external_object.pk} + ) + + +class WorkflowTemplateTransitionFieldDeleteView(SingleObjectDeleteView): + model = WorkflowTransitionField + object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'navigation_object_list': ( + 'object', 'workflow_transition', 'workflow' + ), + 'object': self.object, + 'title': _('Delete workflow transition field: %s') % self.object, + 'workflow': self.object.transition.workflow, + 'workflow_transition': self.object.transition, + } + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_transition_field_list', + kwargs={'pk': self.object.transition.pk} + ) + + +class WorkflowTemplateTransitionFieldEditView(SingleObjectEditView): + fields = ( + 'name', 'label', 'field_type', 'help_text', 'required', 'widget', + 'widget_kwargs' + ) + model = WorkflowTransitionField + object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'navigation_object_list': ( + 'object', 'workflow_transition', 'workflow' + ), + 'object': self.object, + 'title': _('Edit workflow transition field: %s') % self.object, + 'workflow': self.object.transition.workflow, + 'workflow_transition': self.object.transition, + } + + def get_post_action_redirect(self): + return reverse( + viewname='document_states:workflow_template_transition_field_list', + kwargs={'pk': self.object.transition.pk} + ) + + +class WorkflowTemplateTransitionFieldListView(ExternalObjectMixin, SingleObjectListView): + external_object_class = WorkflowTransition + external_object_permission = permission_workflow_edit + + def get_extra_context(self): + return { + 'hide_object': True, + 'navigation_object_list': ('object', 'workflow'), + 'no_results_icon': icon_workflow_transition_field, + 'no_results_main_link': link_workflow_template_transition_field_create.resolve( + context=RequestContext( + request=self.request, dict_={ + 'object': self.external_object + } + ) + ), + 'no_results_text': _( + 'Workflow transition fields allow adding data to the ' + 'workflow\'s context. This additional context data can then ' + 'be used by other elements of the workflow system like the ' + 'workflow state actions.' + ), + 'no_results_title': _( + 'There are no fields for this workflow transition' + ), + 'object': self.external_object, + 'title': _( + 'Fields for workflow transition: %s' + ) % self.external_object, + 'workflow': self.external_object.workflow, + } + + def get_source_queryset(self): + return self.external_object.fields.all() diff --git a/mayan/apps/document_states/views/workflow_template_views.py b/mayan/apps/document_states/views/workflow_template_views.py new file mode 100644 index 0000000000..71f61245d9 --- /dev/null +++ b/mayan/apps/document_states/views/workflow_template_views.py @@ -0,0 +1,238 @@ +from __future__ import absolute_import, unicode_literals + +from django.contrib import messages +from django.db import transaction +from django.template import RequestContext +from django.urls import reverse_lazy +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.common.generics import ( + AddRemoveView, ConfirmView, SingleObjectCreateView, SingleObjectDeleteView, + SingleObjectDetailView, SingleObjectEditView, SingleObjectListView +) +from mayan.apps.documents.events import event_document_type_edited +from mayan.apps.documents.models import DocumentType +from mayan.apps.documents.permissions import permission_document_type_edit + +from ..events import event_workflow_edited +from ..forms import WorkflowForm, WorkflowPreviewForm +from ..icons import icon_workflow_template_list +from ..links import link_workflow_template_create +from ..models import Workflow +from ..permissions import ( + permission_workflow_create, permission_workflow_delete, + permission_workflow_edit, permission_workflow_tools, + permission_workflow_view, +) +from ..tasks import task_launch_all_workflows + + +class DocumentTypeWorkflowTemplatesView(AddRemoveView): + main_object_permission = permission_document_type_edit + main_object_model = DocumentType + main_object_pk_url_kwarg = 'pk' + secondary_object_model = Workflow + secondary_object_permission = permission_workflow_edit + list_available_title = _('Available workflows') + list_added_title = _('Workflows assigned this document type') + related_field = 'workflows' + + def get_actions_extra_kwargs(self): + return {'_user': self.request.user} + + def get_extra_context(self): + return { + 'object': self.main_object, + 'subtitle': _( + 'Removing a workflow from a document type will also ' + 'remove all running instances of that workflow.' + ), + 'title': _( + 'Workflows assigned the document type: %s' + ) % self.main_object, + } + + def action_add(self, queryset, _user): + with transaction.atomic(): + event_document_type_edited.commit( + actor=_user, target=self.main_object + ) + + for obj in queryset: + self.main_object.workflows.add(obj) + event_workflow_edited.commit( + action_object=self.main_object, actor=_user, target=obj + ) + + def action_remove(self, queryset, _user): + with transaction.atomic(): + event_document_type_edited.commit( + actor=_user, target=self.main_object + ) + + for obj in queryset: + self.main_object.workflows.remove(obj) + event_workflow_edited.commit( + action_object=self.main_object, actor=_user, + target=obj + ) + obj.instances.filter( + document__document_type=self.main_object + ).delete() + + +class WorkflowTemplateListView(SingleObjectListView): + model = Workflow + object_permission = permission_workflow_view + + def get_extra_context(self): + return { + 'hide_object': True, + 'no_results_icon': icon_workflow_template_list, + 'no_results_main_link': link_workflow_template_create.resolve( + context=RequestContext(request=self.request) + ), + 'no_results_text': _( + 'Workflows store a series of states and keep track of the ' + 'current state of a document. Transitions are used to change the ' + 'current state to a new one.' + ), + 'no_results_title': _( + 'No workflows have been defined' + ), + 'title': _('Workflows'), + } + + +class WorkflowTemplateCreateView(SingleObjectCreateView): + extra_context = {'title': _('Create workflow')} + form_class = WorkflowForm + model = Workflow + post_action_redirect = reverse_lazy( + viewname='document_states:workflow_template_list' + ) + view_permission = permission_workflow_create + + def get_save_extra_data(self): + return {'_user': self.request.user} + + +class WorkflowTemplateDeleteView(SingleObjectDeleteView): + model = Workflow + object_permission = permission_workflow_delete + post_action_redirect = reverse_lazy( + viewname='document_states:workflow_template_list' + ) + + def get_extra_context(self): + return { + 'title': _( + 'Delete workflow: %s?' + ) % self.object, + } + + +class WorkflowTemplateEditView(SingleObjectEditView): + form_class = WorkflowForm + model = Workflow + object_permission = permission_workflow_edit + post_action_redirect = reverse_lazy( + viewname='document_states:workflow_template_list' + ) + + def get_extra_context(self): + return { + 'title': _( + 'Edit workflow: %s' + ) % self.object, + } + + def get_save_extra_data(self): + return {'_user': self.request.user} + + +class WorkflowTemplateDocumentTypesView(AddRemoveView): + main_object_permission = permission_workflow_edit + main_object_model = Workflow + main_object_pk_url_kwarg = 'pk' + secondary_object_model = DocumentType + secondary_object_permission = permission_document_type_edit + list_available_title = _('Available document types') + list_added_title = _('Document types assigned this workflow') + related_field = 'document_types' + + def get_actions_extra_kwargs(self): + return {'_user': self.request.user} + + def get_extra_context(self): + return { + 'object': self.main_object, + 'subtitle': _( + 'Removing a document type from a workflow will also ' + 'remove all running instances of that workflow for ' + 'documents of the document type just removed.' + ), + 'title': _( + 'Document types assigned the workflow: %s' + ) % self.main_object, + } + + def action_add(self, queryset, _user): + with transaction.atomic(): + event_workflow_edited.commit( + actor=_user, target=self.main_object + ) + + for obj in queryset: + self.main_object.document_types.add(obj) + event_document_type_edited.commit( + action_object=self.main_object, actor=_user, target=obj + ) + + def action_remove(self, queryset, _user): + with transaction.atomic(): + event_workflow_edited.commit( + actor=_user, target=self.main_object + ) + + for obj in queryset: + self.main_object.document_types.remove(obj) + event_document_type_edited.commit( + action_object=self.main_object, actor=_user, + target=obj + ) + self.main_object.instances.filter( + document__document_type=obj + ).delete() + + +class WorkflowTemplatePreviewView(SingleObjectDetailView): + form_class = WorkflowPreviewForm + model = Workflow + object_permission = permission_workflow_view + pk_url_kwarg = 'pk' + + def get_extra_context(self): + return { + 'hide_labels': True, + 'object': self.get_object(), + 'title': _('Preview of: %s') % self.get_object() + } + + +class ToolLaunchWorkflows(ConfirmView): + extra_context = { + 'title': _('Launch all workflows?'), + 'subtitle': _( + 'This will launch all workflows created after documents have ' + 'already been uploaded.' + ) + } + view_permission = permission_workflow_tools + + def view_action(self): + task_launch_all_workflows.apply_async() + messages.success( + message=_('Workflow launch queued successfully.'), + request=self.request + ) diff --git a/mayan/apps/document_states/views/workflow_views.py b/mayan/apps/document_states/views/workflow_views.py deleted file mode 100644 index 423134e0b1..0000000000 --- a/mayan/apps/document_states/views/workflow_views.py +++ /dev/null @@ -1,775 +0,0 @@ -from __future__ import absolute_import, unicode_literals - -from django.contrib import messages -from django.core.files.base import ContentFile -from django.db import transaction -from django.http import Http404, HttpResponseRedirect -from django.shortcuts import get_object_or_404 -from django.template import RequestContext -from django.urls import reverse, reverse_lazy -from django.utils.translation import ugettext_lazy as _ - -from mayan.apps.common.generics import ( - AddRemoveView, ConfirmView, FormView, SingleObjectCreateView, - SingleObjectDeleteView, SingleObjectDetailView, - SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView, - SingleObjectDownloadView, SingleObjectEditView, SingleObjectListView -) -from mayan.apps.common.mixins import ExternalObjectMixin -from mayan.apps.documents.events import event_document_type_edited -from mayan.apps.documents.models import DocumentType -from mayan.apps.documents.permissions import permission_document_type_edit -from mayan.apps.events.classes import EventType -from mayan.apps.events.models import StoredEventType - -from ..classes import WorkflowAction -from ..events import event_workflow_edited -from ..forms import ( - WorkflowActionSelectionForm, WorkflowForm, WorkflowPreviewForm, - WorkflowStateActionDynamicForm, WorkflowStateForm, WorkflowTransitionForm, - WorkflowTransitionTriggerEventRelationshipFormSet -) -from ..icons import ( - icon_workflow_list, icon_workflow_state, icon_workflow_state_action, - icon_workflow_transition -) -from ..links import ( - link_setup_workflow_create, link_setup_workflow_state_create, - link_setup_workflow_state_action_selection, - link_setup_workflow_transition_create -) -from ..models import ( - Workflow, WorkflowState, WorkflowStateAction, WorkflowTransition -) -from ..permissions import ( - permission_workflow_create, permission_workflow_delete, - permission_workflow_edit, permission_workflow_tools, - permission_workflow_view, -) -from ..tasks import task_launch_all_workflows - -__all__ = ( - 'WorkflowImageView', 'WorkflowPreviewView', - 'SetupWorkflowListView', 'SetupWorkflowCreateView', 'SetupWorkflowEditView', - 'SetupWorkflowDeleteView', 'SetupWorkflowDocumentTypesView', - 'SetupWorkflowStateActionCreateView', 'SetupWorkflowStateActionDeleteView', - 'SetupWorkflowStateActionEditView', 'SetupWorkflowStateActionListView', - 'SetupWorkflowStateActionSelectionView', 'SetupWorkflowStateCreateView', - 'SetupWorkflowStateDeleteView', 'SetupWorkflowStateEditView', - 'SetupWorkflowStateListView', 'SetupWorkflowTransitionCreateView', - 'SetupWorkflowTransitionDeleteView', 'SetupWorkflowTransitionEditView', - 'SetupWorkflowTransitionListView', - 'SetupWorkflowTransitionTriggerEventListView', 'ToolLaunchAllWorkflows' -) - - -class SetupDocumentTypeWorkflowsView(AddRemoveView): - main_object_permission = permission_document_type_edit - main_object_model = DocumentType - main_object_pk_url_kwarg = 'pk' - secondary_object_model = Workflow - secondary_object_permission = permission_workflow_edit - list_available_title = _('Available workflows') - list_added_title = _('Workflows assigned this document type') - related_field = 'workflows' - - def get_actions_extra_kwargs(self): - return {'_user': self.request.user} - - def get_extra_context(self): - return { - 'object': self.main_object, - 'subtitle': _( - 'Removing a workflow from a document type will also ' - 'remove all running instances of that workflow.' - ), - 'title': _( - 'Workflows assigned the document type: %s' - ) % self.main_object, - } - - def action_add(self, queryset, _user): - with transaction.atomic(): - event_document_type_edited.commit( - actor=_user, target=self.main_object - ) - - for obj in queryset: - self.main_object.workflows.add(obj) - event_workflow_edited.commit( - action_object=self.main_object, actor=_user, target=obj - ) - - def action_remove(self, queryset, _user): - with transaction.atomic(): - event_document_type_edited.commit( - actor=_user, target=self.main_object - ) - - for obj in queryset: - self.main_object.workflows.remove(obj) - event_workflow_edited.commit( - action_object=self.main_object, actor=_user, - target=obj - ) - obj.instances.filter( - document__document_type=self.main_object - ).delete() - - -class SetupWorkflowListView(SingleObjectListView): - model = Workflow - object_permission = permission_workflow_view - - def get_extra_context(self): - return { - 'hide_object': True, - 'no_results_icon': icon_workflow_list, - 'no_results_main_link': link_setup_workflow_create.resolve( - context=RequestContext(request=self.request) - ), - 'no_results_text': _( - 'Workflows store a series of states and keep track of the ' - 'current state of a document. Transitions are used to change the ' - 'current state to a new one.' - ), - 'no_results_title': _( - 'No workflows have been defined' - ), - 'title': _('Workflows'), - } - - -class SetupWorkflowCreateView(SingleObjectCreateView): - extra_context = {'title': _('Create workflow')} - form_class = WorkflowForm - model = Workflow - post_action_redirect = reverse_lazy( - viewname='document_states:setup_workflow_list' - ) - view_permission = permission_workflow_create - - def get_save_extra_data(self): - return {'_user': self.request.user} - - -class SetupWorkflowDeleteView(SingleObjectDeleteView): - model = Workflow - object_permission = permission_workflow_delete - post_action_redirect = reverse_lazy( - viewname='document_states:setup_workflow_list' - ) - - def get_extra_context(self): - return { - 'title': _( - 'Delete workflow: %s?' - ) % self.object, - } - - -class SetupWorkflowEditView(SingleObjectEditView): - form_class = WorkflowForm - model = Workflow - object_permission = permission_workflow_edit - post_action_redirect = reverse_lazy( - viewname='document_states:setup_workflow_list' - ) - - def get_extra_context(self): - return { - 'title': _( - 'Edit workflow: %s' - ) % self.object, - } - - def get_save_extra_data(self): - return {'_user': self.request.user} - - -class SetupWorkflowDocumentTypesView(AddRemoveView): - main_object_permission = permission_workflow_edit - main_object_model = Workflow - main_object_pk_url_kwarg = 'pk' - secondary_object_model = DocumentType - secondary_object_permission = permission_document_type_edit - list_available_title = _('Available document types') - list_added_title = _('Document types assigned this workflow') - related_field = 'document_types' - - def get_actions_extra_kwargs(self): - return {'_user': self.request.user} - - def get_extra_context(self): - return { - 'object': self.main_object, - 'subtitle': _( - 'Removing a document type from a workflow will also ' - 'remove all running instances of that workflow for ' - 'documents of the document type just removed.' - ), - 'title': _( - 'Document types assigned the workflow: %s' - ) % self.main_object, - } - - def action_add(self, queryset, _user): - with transaction.atomic(): - event_workflow_edited.commit( - actor=_user, target=self.main_object - ) - - for obj in queryset: - self.main_object.document_types.add(obj) - event_document_type_edited.commit( - action_object=self.main_object, actor=_user, target=obj - ) - - def action_remove(self, queryset, _user): - with transaction.atomic(): - event_workflow_edited.commit( - actor=_user, target=self.main_object - ) - - for obj in queryset: - self.main_object.document_types.remove(obj) - event_document_type_edited.commit( - action_object=self.main_object, actor=_user, - target=obj - ) - self.main_object.instances.filter( - document__document_type=obj - ).delete() - - -# Workflow state actions - - -class SetupWorkflowStateActionCreateView(SingleObjectDynamicFormCreateView): - form_class = WorkflowStateActionDynamicForm - object_permission = permission_workflow_edit - - def get_class(self): - try: - return WorkflowAction.get(name=self.kwargs['class_path']) - except KeyError: - raise Http404( - '{} class not found'.format(self.kwargs['class_path']) - ) - - def get_extra_context(self): - return { - 'navigation_object_list': ('object', 'workflow'), - 'object': self.get_object(), - 'title': _( - 'Create a "%s" workflow action' - ) % self.get_class().label, - 'workflow': self.get_object().workflow - } - - def get_form_extra_kwargs(self): - return { - 'request': self.request, - 'action_path': self.kwargs['class_path'] - } - - def get_form_schema(self): - return self.get_class()().get_form_schema(request=self.request) - - def get_instance_extra_data(self): - return { - 'action_path': self.kwargs['class_path'], - 'state': self.get_object() - } - - def get_object(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) - - def get_post_action_redirect(self): - return reverse( - viewname='document_states:setup_workflow_state_action_list', - kwargs={'pk': self.get_object().pk} - ) - - -class SetupWorkflowStateActionDeleteView(SingleObjectDeleteView): - model = WorkflowStateAction - object_permission = permission_workflow_edit - - def get_extra_context(self): - return { - 'navigation_object_list': ( - 'object', 'workflow_state', 'workflow' - ), - 'object': self.get_object(), - 'title': _('Delete workflow state action: %s') % self.get_object(), - 'workflow': self.get_object().state.workflow, - 'workflow_state': self.get_object().state, - } - - def get_post_action_redirect(self): - return reverse( - viewname='document_states:setup_workflow_state_action_list', - kwargs={'pk': self.get_object().state.pk} - ) - - -class SetupWorkflowStateActionEditView(SingleObjectDynamicFormEditView): - form_class = WorkflowStateActionDynamicForm - model = WorkflowStateAction - object_permission = permission_workflow_edit - - def get_extra_context(self): - return { - 'navigation_object_list': ( - 'object', 'workflow_state', 'workflow' - ), - 'object': self.get_object(), - 'title': _('Edit workflow state action: %s') % self.get_object(), - 'workflow': self.get_object().state.workflow, - 'workflow_state': self.get_object().state, - } - - def get_form_extra_kwargs(self): - return { - 'request': self.request, - 'action_path': self.get_object().action_path, - } - - def get_form_schema(self): - return self.get_object().get_class_instance().get_form_schema( - request=self.request - ) - - def get_post_action_redirect(self): - return reverse( - viewname='document_states:setup_workflow_state_action_list', - kwargs={'pk': self.get_object().state.pk} - ) - - -class SetupWorkflowStateActionListView(SingleObjectListView): - object_permission = permission_workflow_edit - - def get_extra_context(self): - return { - 'hide_object': True, - 'navigation_object_list': ('object', 'workflow'), - 'no_results_icon': icon_workflow_state_action, - 'no_results_main_link': link_setup_workflow_state_action_selection.resolve( - context=RequestContext( - request=self.request, dict_={ - 'object': self.get_workflow_state() - } - ) - ), - 'no_results_text': _( - 'Workflow state actions are macros that get executed when ' - 'documents enters or leaves the state in which they reside.' - ), - 'no_results_title': _( - 'There are no actions for this workflow state' - ), - 'object': self.get_workflow_state(), - 'title': _( - 'Actions for workflow state: %s' - ) % self.get_workflow_state(), - 'workflow': self.get_workflow_state().workflow, - } - - def get_form_schema(self): - return {'fields': self.get_class().fields} - - def get_source_queryset(self): - return self.get_workflow_state().actions.all() - - def get_workflow_state(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) - - -class SetupWorkflowStateActionSelectionView(FormView): - form_class = WorkflowActionSelectionForm - view_permission = permission_workflow_edit - - def form_valid(self, form): - klass = form.cleaned_data['klass'] - return HttpResponseRedirect( - redirect_to=reverse( - viewname='document_states:setup_workflow_state_action_create', - kwargs={'pk': self.get_object().pk, 'class_path': klass} - ) - ) - - def get_extra_context(self): - return { - 'navigation_object_list': ( - 'object', 'workflow' - ), - 'object': self.get_object(), - 'title': _('New workflow state action selection'), - 'workflow': self.get_object().workflow, - } - - def get_object(self): - return get_object_or_404(klass=WorkflowState, pk=self.kwargs['pk']) - - -# Workflow states - - -class SetupWorkflowStateCreateView(ExternalObjectMixin, SingleObjectCreateView): - external_object_class = Workflow - external_object_permission = permission_workflow_edit - external_object_pk_url_kwarg = 'pk' - form_class = WorkflowStateForm - - def get_extra_context(self): - return { - 'object': self.get_workflow(), - 'title': _( - 'Create states for workflow: %s' - ) % self.get_workflow() - } - - def get_instance_extra_data(self): - return {'workflow': self.get_workflow()} - - def get_source_queryset(self): - return self.get_workflow().states.all() - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_state_list', - kwargs={'pk': self.kwargs['pk']} - ) - - def get_workflow(self): - return self.external_object - - -class SetupWorkflowStateDeleteView(SingleObjectDeleteView): - model = WorkflowState - object_permission = permission_workflow_edit - pk_url_kwarg = 'pk' - - def get_extra_context(self): - return { - 'navigation_object_list': ('object', 'workflow_instance'), - 'object': self.get_object(), - 'title': _( - 'Delete workflow state: %s?' - ) % self.object, - 'workflow_instance': self.get_object().workflow, - } - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_state_list', - kwargs={'pk': self.get_object().workflow.pk} - ) - - -class SetupWorkflowStateEditView(SingleObjectEditView): - form_class = WorkflowStateForm - model = WorkflowState - object_permission = permission_workflow_edit - pk_url_kwarg = 'pk' - - def get_extra_context(self): - return { - 'navigation_object_list': ('object', 'workflow_instance'), - 'object': self.get_object(), - 'title': _( - 'Edit workflow state: %s' - ) % self.object, - 'workflow_instance': self.get_object().workflow, - } - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_state_list', - kwargs={'pk': self.get_object().workflow.pk} - ) - - -class SetupWorkflowStateListView(ExternalObjectMixin, SingleObjectListView): - external_object_class = Workflow - external_object_permission = permission_workflow_view - external_object_pk_url_kwarg = 'pk' - object_permission = permission_workflow_view - - def get_extra_context(self): - return { - 'hide_object': True, - 'no_results_icon': icon_workflow_state, - 'no_results_main_link': link_setup_workflow_state_create.resolve( - context=RequestContext( - self.request, {'object': self.get_workflow()} - ) - ), - 'no_results_text': _( - 'Create states and link them using transitions.' - ), - 'no_results_title': _( - 'This workflow doesn\'t have any states' - ), - 'object': self.get_workflow(), - 'title': _('States of workflow: %s') % self.get_workflow() - } - - def get_source_queryset(self): - return self.get_workflow().states.all() - - def get_workflow(self): - return self.external_object - - -# Transitions - - -class SetupWorkflowTransitionCreateView(ExternalObjectMixin, SingleObjectCreateView): - external_object_class = Workflow - external_object_permission = permission_workflow_edit - external_object_pk_url_kwarg = 'pk' - form_class = WorkflowTransitionForm - - def get_extra_context(self): - return { - 'object': self.get_workflow(), - 'title': _( - 'Create transitions for workflow: %s' - ) % self.get_workflow() - } - - def get_form_kwargs(self): - kwargs = super( - SetupWorkflowTransitionCreateView, self - ).get_form_kwargs() - kwargs['workflow'] = self.get_workflow() - return kwargs - - def get_instance_extra_data(self): - return {'workflow': self.get_workflow()} - - def get_source_queryset(self): - return self.get_workflow().transitions.all() - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_transition_list', - kwargs={'pk': self.kwargs['pk']} - ) - - def get_workflow(self): - return self.external_object - - -class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView): - model = WorkflowTransition - object_permission = permission_workflow_edit - pk_url_kwarg = 'pk' - - def get_extra_context(self): - return { - 'object': self.get_object(), - 'navigation_object_list': ('object', 'workflow_instance'), - 'title': _( - 'Delete workflow transition: %s?' - ) % self.object, - 'workflow_instance': self.get_object().workflow, - } - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_transition_list', - kwargs={'pk': self.get_object().workflow.pk} - ) - - -class SetupWorkflowTransitionEditView(SingleObjectEditView): - form_class = WorkflowTransitionForm - model = WorkflowTransition - object_permission = permission_workflow_edit - pk_url_kwarg = 'pk' - - def get_extra_context(self): - return { - 'navigation_object_list': ('object', 'workflow_instance'), - 'object': self.get_object(), - 'title': _( - 'Edit workflow transition: %s' - ) % self.object, - 'workflow_instance': self.get_object().workflow, - } - - def get_form_kwargs(self): - kwargs = super( - SetupWorkflowTransitionEditView, self - ).get_form_kwargs() - kwargs['workflow'] = self.get_object().workflow - return kwargs - - def get_success_url(self): - return reverse( - viewname='document_states:setup_workflow_transition_list', - kwargs={'pk': self.get_object().workflow.pk} - ) - - -class SetupWorkflowTransitionListView(ExternalObjectMixin, SingleObjectListView): - external_object_class = Workflow - external_object_permission = permission_workflow_view - external_object_pk_url_kwarg = 'pk' - object_permission = permission_workflow_view - - def get_extra_context(self): - return { - 'hide_object': True, - 'no_results_icon': icon_workflow_transition, - 'no_results_main_link': link_setup_workflow_transition_create.resolve( - context=RequestContext( - self.request, {'object': self.get_workflow()} - ) - ), - 'no_results_text': _( - 'Create a transition and use it to move a workflow from ' - ' one state to another.' - ), - 'no_results_title': _( - 'This workflow doesn\'t have any transitions' - ), - 'object': self.get_workflow(), - 'title': _( - 'Transitions of workflow: %s' - ) % self.get_workflow() - } - - def get_source_queryset(self): - return self.get_workflow().transitions.all() - - def get_workflow(self): - return self.external_object - - -class SetupWorkflowTransitionTriggerEventListView(ExternalObjectMixin, FormView): - external_object_class = WorkflowTransition - external_object_permission = permission_workflow_edit - external_object_pk_url_kwarg = 'pk' - form_class = WorkflowTransitionTriggerEventRelationshipFormSet - - def dispatch(self, *args, **kwargs): - EventType.refresh() - return super( - SetupWorkflowTransitionTriggerEventListView, self - ).dispatch(*args, **kwargs) - - def form_valid(self, form): - try: - for instance in form: - instance.save() - except Exception as exception: - messages.error( - message=_( - 'Error updating workflow transition trigger events; %s' - ) % exception, request=self.request - - ) - else: - messages.success( - message=_( - 'Workflow transition trigger events updated successfully' - ), request=self.request - ) - - return super( - SetupWorkflowTransitionTriggerEventListView, self - ).form_valid(form=form) - - def get_extra_context(self): - return { - 'form_display_mode_table': True, - 'navigation_object_list': ('object', 'workflow'), - 'object': self.get_object(), - 'subtitle': _( - 'Triggers are events that cause this transition to execute ' - 'automatically.' - ), - 'title': _( - 'Workflow transition trigger events for: %s' - ) % self.get_object(), - 'workflow': self.get_object().workflow, - } - - def get_initial(self): - obj = self.get_object() - initial = [] - - # Return the queryset by name from the sorted list of the class - event_type_ids = [event_type.id for event_type in EventType.all()] - event_type_queryset = StoredEventType.objects.filter( - name__in=event_type_ids - ) - - # Sort queryset in Python by namespace, then by label - event_type_queryset = sorted( - event_type_queryset, key=lambda x: (x.namespace, x.label) - ) - - for event_type in event_type_queryset: - initial.append({ - 'transition': obj, - 'event_type': event_type, - }) - return initial - - def get_object(self): - return self.external_object - - def get_post_action_redirect(self): - return reverse( - viewname='document_states:setup_workflow_transition_list', - kwargs={'pk': self.get_object().workflow.pk} - ) - - -class ToolLaunchAllWorkflows(ConfirmView): - extra_context = { - 'title': _('Launch all workflows?'), - 'subtitle': _( - 'This will launch all workflows created after documents have ' - 'already been uploaded.' - ) - } - view_permission = permission_workflow_tools - - def view_action(self): - task_launch_all_workflows.apply_async() - messages.success( - message=_('Workflow launch queued successfully.'), - request=self.request - ) - - -class WorkflowImageView(SingleObjectDownloadView): - attachment = False - model = Workflow - object_permission = permission_workflow_view - - def get_file(self): - workflow = self.get_object() - return ContentFile(workflow.render(), name=workflow.label) - - def get_mimetype(self): - return 'image' - - -class WorkflowPreviewView(SingleObjectDetailView): - form_class = WorkflowPreviewForm - model = Workflow - object_permission = permission_workflow_view - - def get_extra_context(self): - return { - 'hide_labels': True, - 'title': _('Preview of: %s') % self.get_object() - } diff --git a/mayan/apps/document_states/widgets.py b/mayan/apps/document_states/widgets.py index 87ae0a5f4b..a1ccdb57d7 100644 --- a/mayan/apps/document_states/widgets.py +++ b/mayan/apps/document_states/widgets.py @@ -1,38 +1,12 @@ from __future__ import unicode_literals from django import forms -from django.urls import reverse -from django.utils.html import format_html_join, mark_safe -from django.utils.translation import ugettext_lazy as _ - - -def widget_transition_events(transition): - return format_html_join( - sep='\n', format_string='
    {}
    ', args_generator=( - ( - transition_trigger.event_type.label, - ) for transition_trigger in transition.trigger_events.all() - ) - ) - - -def widget_workflow_diagram(workflow): - return mark_safe( - '{}'.format( - _('Workflow preview'), reverse( - viewname='document_states:workflow_image', kwargs={ - 'pk': workflow.pk - } - ) - ) - ) class WorkflowImageWidget(forms.widgets.Widget): - def render(self, name, value, attrs=None): - if value: - output = [] - output.append(widget_workflow_diagram(value)) - return mark_safe(''.join(output)) - else: - return '' + template_name = 'document_states/forms/widgets/workflow_image.html' + + def format_value(self, value): + if value == '' or value is None: + return None + return value diff --git a/mayan/apps/document_states/workflow_actions.py b/mayan/apps/document_states/workflow_actions.py index 1e1eb5fe01..702d5f1d0e 100644 --- a/mayan/apps/document_states/workflow_actions.py +++ b/mayan/apps/document_states/workflow_actions.py @@ -11,7 +11,6 @@ from django.utils.translation import ugettext_lazy as _ from .classes import WorkflowAction from .exceptions import WorkflowStateActionError -__all__ = ('DocumentPropertiesEditAction', 'HTTPPostAction',) logger = logging.getLogger(__name__) DEFAULT_TIMEOUT = 4 # 4 seconds @@ -37,7 +36,7 @@ class DocumentPropertiesEditAction(WorkflowAction): }, } field_order = ('document_label', 'document_description') - label = _('Modify the properties of the document') + label = _('Modify document properties') widgets = { 'document_description': { 'class': 'django.forms.widgets.Textarea', 'kwargs': { @@ -102,7 +101,10 @@ class HTTPPostAction(WorkflowAction): }, 'timeout': { 'label': _('Timeout'), 'class': 'django.forms.IntegerField', 'default': DEFAULT_TIMEOUT, - 'help_text': _('Time in seconds to wait for a response.'), + 'help_text': _( + 'Time in seconds to wait for a response. Can be a static ' + 'value or a template. ' + ), 'required': True }, 'payload': { @@ -117,53 +119,124 @@ class HTTPPostAction(WorkflowAction): '"workflow_instance", "datetime", "transition", "user", ' 'and "comment" attributes.' ), 'required': False - } - - }, + }, + }, 'username': { + 'label': _('Username'), + 'class': 'django.forms.CharField', 'kwargs': { + 'help_text': _( + 'Username to use for making the request with HTTP Basic ' + 'Auth. Can be a static value or a template. Templates ' + 'receive the workflow log entry instance as part of ' + 'their context via the variable "entry_log". ' + 'The "entry_log" in turn provides the ' + '"workflow_instance", "datetime", "transition", "user", ' + 'and "comment" attributes.' + ), 'max_length': 192, 'required': False + }, + }, 'password': { + 'label': _('Password'), + 'class': 'django.forms.CharField', 'kwargs': { + 'help_text': _( + 'Password to use for making the request with HTTP Basic ' + 'Auth. Can be a static value or a template. Templates ' + 'receive the workflow log entry instance as part of ' + 'their context via the variable "entry_log". ' + 'The "entry_log" in turn provides the ' + '"workflow_instance", "datetime", "transition", "user", ' + 'and "comment" attributes.' + ), 'max_length': 192, 'required': False + }, + }, 'headers': { + 'label': _('Headers'), + 'class': 'django.forms.CharField', 'kwargs': { + 'help_text': _( + 'Headers to send with the HTTP request. Must be in JSON ' + 'format. Can be a static value or a template. Templates ' + 'receive the workflow log entry instance as part of ' + 'their context via the variable "entry_log". ' + 'The "entry_log" in turn provides the ' + '"workflow_instance", "datetime", "transition", "user", ' + 'and "comment" attributes.' + ), 'required': False + }, + } } - field_order = ('url', 'timeout', 'payload') + field_order = ( + 'url', 'username', 'password', 'headers', 'timeout', 'payload' + ) label = _('Perform a POST request') widgets = { 'payload': { 'class': 'django.forms.widgets.Textarea', 'kwargs': { 'attrs': {'rows': '10'}, } + }, + 'headers': { + 'class': 'django.forms.widgets.Textarea', 'kwargs': { + 'attrs': {'rows': '10'}, + } } } + def render_load(self, field_name, context): + """ + Method to perform a template render and subsequent JSON load. + """ + render_result = self.render( + field_name=field_name, context=context + ) or '{}' + + try: + load_result = json.loads(render_result, strict=False) + except Exception as exception: + raise WorkflowStateActionError( + _('%(field_name)s JSON error: %(exception)s') % { + 'field_name': field_name, 'exception': exception + } + ) + + logger.debug('load result: %s', load_result) + + return load_result + + def render(self, field_name, context): + try: + result = Template(self.form_data.get(field_name, '')).render( + context=Context(context) + ) + except Exception as exception: + raise WorkflowStateActionError( + _('%(field_name)s template error: %(exception)s') % { + 'field_name': field_name, 'exception': exception + } + ) + + logger.debug('%s template result: %s', field_name, result) + + return result + def execute(self, context): - self.url = self.form_data.get('url') - self.payload = self.form_data.get('payload') + url = self.render(field_name='url', context=context) + username = self.render(field_name='username', context=context) + password = self.render(field_name='password', context=context) + timeout = self.render(field_name='timeout', context=context) + headers = self.render_load(field_name='headers', context=context) + payload = self.render_load(field_name='payload', context=context) - try: - url = Template(self.url).render( - context=Context(context) - ) - except Exception as exception: - raise WorkflowStateActionError( - _('URL template error: %s') % exception + if '.' in timeout: + timeout = float(timeout) + elif timeout: + timeout = int(timeout) + else: + timeout = None + + authentication = None + if username or password: + authentication = requests.auth.HTTPBasicAuth( + username=username, password=password ) - logger.debug('URL template result: %s', url) - - try: - result = Template(self.payload or '{}').render( - context=Context(context) - ) - except Exception as exception: - raise WorkflowStateActionError( - _('Payload template error: %s') % exception - ) - - logger.debug('payload template result: %s', result) - - try: - payload = json.loads(result, strict=False) - except Exception as exception: - raise WorkflowStateActionError( - _('Payload JSON error: %s') % exception - ) - - logger.debug('payload json result: %s', payload) - - requests.post(url=url, json=payload, timeout=self.form_data['timeout']) + requests.post( + url=url, json=payload, timeout=timeout, + auth=authentication, headers=headers + ) diff --git a/mayan/apps/documents/api_views.py b/mayan/apps/documents/api_views.py index c42a8d50c2..f8ceb5eee9 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -7,12 +7,11 @@ from django.shortcuts import get_object_or_404 from django.views.decorators.cache import cache_control, patch_cache_control from django_downloadview import DownloadMixin, VirtualFile -from rest_framework import generics, status +from rest_framework import status from rest_framework.response import Response from mayan.apps.acls.models import AccessControlList -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter -from mayan.apps.rest_api.permissions import MayanPermission +from mayan.apps.rest_api import generics from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT from .models import ( @@ -31,12 +30,12 @@ from .permissions import ( from .serializers import ( DeletedDocumentSerializer, DocumentPageSerializer, DocumentSerializer, DocumentTypeSerializer, DocumentVersionSerializer, - NewDocumentSerializer, NewDocumentVersionSerializer, - RecentDocumentSerializer, WritableDocumentSerializer, - WritableDocumentTypeSerializer, WritableDocumentVersionSerializer + NewDocumentDocumentTypeSerializer, NewDocumentSerializer, + NewDocumentVersionSerializer, RecentDocumentSerializer, + WritableDocumentSerializer, WritableDocumentTypeSerializer, + WritableDocumentVersionSerializer ) from .settings import settings_document_page_image_cache_time -from .storages import storage_documentimagecache from .tasks import task_generate_document_page_image logger = logging.getLogger(__name__) @@ -46,9 +45,7 @@ class APITrashedDocumentListView(generics.ListAPIView): """ Returns a list of all the trashed documents. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_view,)} - permission_classes = (MayanPermission,) queryset = DeletedDocument.objects.all() serializer_class = DeletedDocumentSerializer @@ -63,7 +60,6 @@ class APIDeletedDocumentView(generics.RetrieveDestroyAPIView): 'DELETE': (permission_document_delete,), 'GET': (permission_document_view,) } - permission_classes = (MayanPermission,) queryset = DeletedDocument.objects.all() serializer_class = DeletedDocumentSerializer @@ -75,7 +71,6 @@ class APIDeletedDocumentRestoreView(generics.GenericAPIView): mayan_object_permissions = { 'POST': (permission_document_restore,) } - permission_classes = (MayanPermission,) queryset = DeletedDocument.objects.all() def get_serializer(self, *args, **kwargs): @@ -89,6 +84,26 @@ class APIDeletedDocumentRestoreView(generics.GenericAPIView): return Response(status=status.HTTP_200_OK) +class APIDocumentDocumentTypeChangeView(generics.GenericAPIView): + """ + post: Change the type of the selected document. + """ + mayan_object_permissions = { + 'POST': (permission_document_properties_edit,), + } + queryset = Document.objects.all() + serializer_class = NewDocumentDocumentTypeSerializer + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + document_type = DocumentType.objects.get(pk=request.data['new_document_type']) + self.get_object().set_document_type( + document_type=document_type, _user=self.request.user + ) + return Response(status=status.HTTP_200_OK) + + class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView): """ get: Download the latest version of a document. @@ -96,7 +111,6 @@ class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView): mayan_object_permissions = { 'GET': (permission_document_download,) } - permission_classes = (MayanPermission,) queryset = Document.objects.all() def get_encoding(self): @@ -124,9 +138,7 @@ class APIDocumentListView(generics.ListCreateAPIView): get: Returns a list of all the documents. post: Create a new document. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_view,)} - permission_classes = (MayanPermission,) queryset = Document.objects.all() def get_serializer(self, *args, **kwargs): @@ -165,7 +177,7 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): AccessControlList.objects.check_access( obj=document, permissions=(permission_required,), - user=self.request.user, manager=Document.passthrough + user=self.request.user ) return document @@ -175,7 +187,7 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): ) def get_queryset(self): - return self.get_document_version().pages.all() + return self.get_document_version().pages_all.all() def get_serializer(self, *args, **kwargs): return None @@ -197,19 +209,27 @@ class APIDocumentPageImageView(generics.RetrieveAPIView): if rotation: rotation = int(rotation) + maximum_layer_order = request.GET.get('maximum_layer_order') + if maximum_layer_order: + maximum_layer_order = int(maximum_layer_order) + task = task_generate_document_page_image.apply_async( kwargs=dict( document_page_id=self.get_object().pk, width=width, - height=height, zoom=zoom, rotation=rotation + height=height, zoom=zoom, rotation=rotation, + maximum_layer_order=maximum_layer_order, + user_id=request.user.pk ) ) cache_filename = task.get(timeout=DOCUMENT_IMAGE_TASK_TIMEOUT) - with storage_documentimagecache.open(cache_filename) as file_object: + cache_file = self.get_object().cache_partition.get_file(filename=cache_filename) + with cache_file.open() as file_object: response = HttpResponse(file_object.read(), content_type='image') if '_hash' in request.GET: patch_cache_control( - response, max_age=settings_document_page_image_cache_time.value + response=response, + max_age=settings_document_page_image_cache_time.value ) return response @@ -251,10 +271,8 @@ class APIDocumentTypeListView(generics.ListCreateAPIView): get: Returns a list of all the document types. post: Create a new document type. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_type_view,)} mayan_view_permissions = {'POST': (permission_document_type_create,)} - permission_classes = (MayanPermission,) queryset = DocumentType.objects.all() serializer_class = DocumentTypeSerializer @@ -284,7 +302,6 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView): 'PATCH': (permission_document_type_edit,), 'DELETE': (permission_document_type_delete,) } - permission_classes = (MayanPermission,) queryset = DocumentType.objects.all() def get_serializer(self, *args, **kwargs): @@ -304,7 +321,6 @@ class APIDocumentTypeDocumentListView(generics.ListAPIView): """ Returns a list of all the documents of a particular document type. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = {'GET': (permission_document_view,)} serializer_class = DocumentSerializer @@ -382,7 +398,6 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView): 'PATCH': (permission_document_properties_edit,), 'DELETE': (permission_document_trash,) } - permission_classes = (MayanPermission,) queryset = Document.objects.all() def get_serializer(self, *args, **kwargs): @@ -441,11 +456,9 @@ class APIDocumentVersionsListView(generics.ListCreateAPIView): get: Return a list of the selected document's versions. post: Create a new document version. """ - filter_backends = (MayanObjectPermissionsFilter,) mayan_object_permissions = { 'GET': (permission_document_version_view,), } - permission_classes = (MayanPermission,) def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 238eda888e..a39baa0e33 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -1,6 +1,6 @@ from __future__ import absolute_import, unicode_literals -from django.db.models.signals import post_delete +from django.db.models.signals import post_delete, post_migrate from django.utils.translation import ugettext_lazy as _ from mayan.apps.acls.classes import ModelPermission @@ -43,40 +43,56 @@ from .events import ( event_document_view ) from .handlers import ( - handler_create_default_document_type, handler_remove_empty_duplicates_lists, - handler_scan_duplicates_for, + handler_create_default_document_type, handler_create_document_cache, + handler_remove_empty_duplicates_lists, handler_scan_duplicates_for ) -from .links import ( - link_clear_image_cache, link_document_clear_transformations, - link_document_clone_transformations, link_document_delete, +from .links.document_links import ( + link_document_clear_transformations, link_document_clone_transformations, link_document_document_type_edit, link_document_download, - link_document_duplicates_list, link_document_edit, - link_document_favorites_add, link_document_favorites_remove, - link_document_list, link_document_list_deleted, - link_document_list_favorites, link_document_list_recent_access, + link_document_edit, link_document_list, link_document_list_recent_access, link_document_list_recent_added, link_document_multiple_clear_transformations, - link_document_multiple_delete, link_document_multiple_document_type_edit, - link_document_multiple_download, link_document_multiple_favorites_add, - link_document_multiple_favorites_remove, link_document_multiple_restore, - link_document_multiple_trash, link_document_multiple_update_page_count, - link_document_page_navigation_first, link_document_page_navigation_last, - link_document_page_navigation_next, link_document_page_navigation_previous, - link_document_page_return, link_document_page_rotate_left, - link_document_page_rotate_right, link_document_page_view, - link_document_page_view_reset, link_document_page_zoom_in, - link_document_page_zoom_out, link_document_pages, link_document_preview, - link_document_print, link_document_properties, link_document_quick_download, - link_document_restore, link_document_trash, link_document_type_create, - link_document_type_delete, link_document_type_edit, - link_document_type_filename_create, link_document_type_filename_delete, - link_document_type_filename_edit, link_document_type_filename_list, - link_document_type_list, link_document_type_policies, - link_document_type_setup, link_document_update_page_count, + link_document_multiple_document_type_edit, + link_document_multiple_download, link_document_preview, + link_document_print, link_document_properties, + link_document_quick_download +) +from .links.document_version_links import ( link_document_version_download, link_document_version_list, link_document_version_return_document, link_document_version_return_list, - link_document_version_revert, link_document_version_view, - link_duplicated_document_list, link_duplicated_document_scan, + link_document_version_revert, link_document_version_view +) +from .links.document_type_links import ( + link_document_type_create, link_document_type_delete, + link_document_type_edit, link_document_type_filename_create, + link_document_type_filename_delete, link_document_type_filename_edit, + link_document_type_filename_list, link_document_type_list, + link_document_type_policies, link_document_type_setup +) +from .links.document_version_page_links import ( + link_document_multiple_update_page_count, link_document_page_disable, + link_document_page_enable, link_document_page_multiple_enable, + link_document_page_multiple_disable, link_document_page_navigation_first, + link_document_page_navigation_last, link_document_page_navigation_next, + link_document_page_navigation_previous, link_document_page_return, + link_document_page_rotate_left, link_document_page_rotate_right, + link_document_page_view, link_document_page_view_reset, + link_document_page_zoom_in, link_document_page_zoom_out, + link_document_pages, link_document_update_page_count +) +from .links.duplicated_document_links import ( + link_document_duplicates_list, link_duplicated_document_list, + link_duplicated_document_scan +) +from .links.favorite_links import ( + link_document_favorites_add, link_document_favorites_remove, + link_document_list_favorites, link_document_multiple_favorites_add, + link_document_multiple_favorites_remove +) +from .links.trashed_document_links import ( + link_document_delete, link_document_list_deleted, + link_document_multiple_delete, link_document_multiple_restore, + link_document_multiple_trash, link_document_restore, link_document_trash, link_trash_can_empty ) from .menus import menu_documents @@ -85,10 +101,10 @@ from .permissions import ( permission_document_download, permission_document_edit, permission_document_new_version, permission_document_print, permission_document_properties_edit, permission_document_restore, - permission_document_trash, permission_document_type_delete, - permission_document_type_edit, permission_document_type_view, - permission_document_version_revert, permission_document_version_view, - permission_document_view + permission_document_tools, permission_document_trash, + permission_document_type_delete, permission_document_type_edit, + permission_document_type_view, permission_document_version_revert, + permission_document_version_view, permission_document_view ) # Just import to initialize the search models from .search import document_search, document_page_search # NOQA @@ -100,6 +116,10 @@ from .widgets import ( ) +def is_document_page_enabled(context): + return context['object'].enabled + + class DocumentsApp(MayanAppConfig): app_namespace = 'documents' app_url = 'documents' @@ -185,8 +205,8 @@ class DocumentsApp(MayanAppConfig): permission_document_delete, permission_document_download, permission_document_edit, permission_document_new_version, permission_document_print, permission_document_properties_edit, - permission_document_restore, permission_document_trash, - permission_document_version_revert, + permission_document_restore, permission_document_tools, + permission_document_trash, permission_document_version_revert, permission_document_version_view, permission_document_view, permission_events_view, permission_transformation_create, permission_transformation_delete, @@ -206,12 +226,21 @@ class DocumentsApp(MayanAppConfig): ModelPermission.register_inheritance( model=Document, related='document_type', ) + ModelPermission.register_manager( + model=Document, manager_name='passthrough' + ) ModelPermission.register_inheritance( model=DocumentPage, related='document_version__document', ) + ModelPermission.register_manager( + model=DocumentPage, manager_name='passthrough' + ) ModelPermission.register_inheritance( model=DocumentPageResult, related='document_version__document', ) + ModelPermission.register_manager( + model=DocumentPageResult, manager_name='passthrough' + ) ModelPermission.register_inheritance( model=DocumentTypeFilename, related='document_type', ) @@ -254,13 +283,21 @@ class DocumentsApp(MayanAppConfig): # DocumentPage SourceColumn( attribute='get_label', is_identifier=True, - is_object_absolute_url=True, source=DocumentPage + is_object_absolute_url=True, source=DocumentPage, + widget_condition=is_document_page_enabled ) SourceColumn( func=lambda context: document_page_thumbnail_widget.render( instance=context['object'] ), label=_('Thumbnail'), source=DocumentPage ) + SourceColumn( + attribute='enabled', include_label=True, source=DocumentPage, + widget=TwoStateWidget + ) + SourceColumn( + attribute='page_number', include_label=True, source=DocumentPage + ) SourceColumn( attribute='get_label', is_identifier=True, @@ -302,14 +339,6 @@ class DocumentsApp(MayanAppConfig): attribute='label', is_identifier=True, is_sortable=True, source=DeletedDocument ) - SourceColumn( - func=lambda context: document_page_thumbnail_widget.render( - instance=context['object'] - ), label=_('Thumbnail'), source=DeletedDocument - ) - SourceColumn( - attribute='document_type', is_sortable=True, source=DeletedDocument - ) SourceColumn( attribute='deleted_date_time', include_label=True, order=99, source=DeletedDocument @@ -377,7 +406,7 @@ class DocumentsApp(MayanAppConfig): menu_setup.bind_links(links=(link_document_type_setup,)) menu_tools.bind_links( - links=(link_clear_image_cache, link_duplicated_document_scan) + links=(link_duplicated_document_scan,) ) # Document type links @@ -503,6 +532,16 @@ class DocumentsApp(MayanAppConfig): link_document_page_navigation_last ), sources=(DocumentPage,) ) + menu_multi_item.bind_links( + links=( + link_document_page_multiple_disable, + link_document_page_multiple_enable + ), sources=(DocumentPage,) + ) + menu_object.bind_links( + links=(link_document_page_disable, link_document_page_enable), + sources=(DocumentPage,) + ) menu_list_facet.bind_links( links=(link_transformation_list,), sources=(DocumentPage,) ) @@ -519,16 +558,20 @@ class DocumentsApp(MayanAppConfig): ) post_delete.connect( - dispatch_uid='handler_remove_empty_duplicates_lists', + dispatch_uid='documents_handler_remove_empty_duplicates_lists', receiver=handler_remove_empty_duplicates_lists, sender=Document ) post_initial_setup.connect( - dispatch_uid='handler_create_default_document_type', + dispatch_uid='documents_handler_create_default_document_type', receiver=handler_create_default_document_type ) + post_migrate.connect( + dispatch_uid='documents_handler_create_document_cache', + receiver=handler_create_document_cache, + ) post_version_upload.connect( - dispatch_uid='handler_scan_duplicates_for', + dispatch_uid='documents_handler_scan_duplicates_for', receiver=handler_scan_duplicates_for ) diff --git a/mayan/apps/documents/events.py b/mayan/apps/documents/events.py index 77a7b8136e..bfecda5c7d 100644 --- a/mayan/apps/documents/events.py +++ b/mayan/apps/documents/events.py @@ -18,6 +18,9 @@ event_document_new_version = namespace.add_event_type( event_document_properties_edit = namespace.add_event_type( label=_('Document properties edited'), name='document_edit' ) +event_document_trashed = namespace.add_event_type( + label=_('Document trashed'), name='document_trashed' +) # The type of an existing document is changed to another type event_document_type_change = namespace.add_event_type( label=_('Document type changed'), name='document_type_change' diff --git a/mayan/apps/documents/forms/document_type_forms.py b/mayan/apps/documents/forms/document_type_forms.py index cc8a029a03..7484cf23c3 100644 --- a/mayan/apps/documents/forms/document_type_forms.py +++ b/mayan/apps/documents/forms/document_type_forms.py @@ -41,7 +41,8 @@ class DocumentTypeFilteredSelectForm(forms.Form): self.fields['document_type'] = field_class( help_text=help_text, label=_('Document type'), queryset=queryset, required=True, - widget=widget_class(attrs={'size': 10}), **extra_kwargs + widget=widget_class(attrs={'class': 'select2', 'size': 10}), + **extra_kwargs ) diff --git a/mayan/apps/documents/handlers.py b/mayan/apps/documents/handlers.py index 597a38c40d..a033ec609f 100644 --- a/mayan/apps/documents/handlers.py +++ b/mayan/apps/documents/handlers.py @@ -1,8 +1,13 @@ from __future__ import unicode_literals from django.apps import apps +from django.utils.translation import ugettext_lazy as _ -from .literals import DEFAULT_DOCUMENT_TYPE_LABEL +from .literals import ( + DEFAULT_DOCUMENT_TYPE_LABEL, DOCUMENT_CACHE_STORAGE_INSTANCE_PATH, + DOCUMENT_IMAGES_CACHE_NAME +) +from .settings import setting_document_cache_maximum_size from .signals import post_initial_document_type from .tasks import task_clean_empty_duplicate_lists, task_scan_duplicates_for @@ -21,6 +26,17 @@ def handler_create_default_document_type(sender, **kwargs): ) +def handler_create_document_cache(sender, **kwargs): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + Cache.objects.update_or_create( + defaults={ + 'label': _('Document images'), + 'storage_instance_path': DOCUMENT_CACHE_STORAGE_INSTANCE_PATH, + 'maximum_size': setting_document_cache_maximum_size.value, + }, name=DOCUMENT_IMAGES_CACHE_NAME, + ) + + def handler_scan_duplicates_for(sender, instance, **kwargs): task_scan_duplicates_for.apply_async( kwargs={'document_id': instance.document.pk} diff --git a/mayan/apps/documents/icons.py b/mayan/apps/documents/icons.py index 7d411a30f0..fb891fd585 100644 --- a/mayan/apps/documents/icons.py +++ b/mayan/apps/documents/icons.py @@ -7,13 +7,11 @@ icon_document_type = Icon( driver_name='fontawesome-layers', data=[ {'class': 'fas fa-circle', 'transform': 'shrink-12 up-2'}, {'class': 'fas fa-cog', 'transform': 'shrink-6 up-2', 'mask': 'fas fa-torah'} - ] + ], shadow_class='fas fa-torah' ) icon_menu_documents = Icon(driver_name='fontawesome', symbol='book') -icon_clear_image_cache = Icon(driver_name='fontawesome', symbol='file-image') - icon_dashboard_document_types = icon_document_type icon_dashboard_documents_in_trash = Icon( driver_name='fontawesome', symbol='trash-alt' @@ -27,8 +25,6 @@ icon_dashboard_new_documents_this_month = Icon( icon_dashboard_total_document = Icon( driver_name='fontawesome', symbol='book' ) - - icon_document_quick_download = Icon( driver_name='fontawesome', symbol='download' ) @@ -106,6 +102,14 @@ icon_favorite_document_remove = Icon( secondary_symbol='minus' ) +# Document pages + +icon_document_page_disable = Icon( + driver_name='fontawesomecss', css_classes='far fa-eye-slash' +) +icon_document_page_enable = Icon( + driver_name='fontawesomecss', css_classes='far fa-eye' +) icon_document_page_navigation_first = Icon( driver_name='fontawesome', symbol='step-backward' ) diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py deleted file mode 100644 index 98920e1dc1..0000000000 --- a/mayan/apps/documents/links.py +++ /dev/null @@ -1,428 +0,0 @@ -from __future__ import absolute_import, unicode_literals - -from django.utils.translation import ugettext_lazy as _ - -from mayan.apps.converter.permissions import ( - permission_transformation_delete, permission_transformation_edit -) -from mayan.apps.navigation.classes import Link - -from .icons import ( - icon_clear_image_cache, icon_document_list_recent_access, - icon_recent_added_document_list, icon_document_page_navigation_first, - icon_document_page_navigation_last, icon_document_page_navigation_next, - icon_document_page_navigation_previous, icon_document_page_return, - icon_document_page_rotate_left, icon_document_page_rotate_right, - icon_document_page_zoom_in, icon_document_page_zoom_out, - icon_document_type_create, icon_document_type_delete, - icon_document_type_edit, icon_document_type_setup, - icon_duplicated_document_list, icon_duplicated_document_scan -) -from .permissions import ( - permission_document_delete, permission_document_download, - permission_document_properties_edit, permission_document_print, - permission_document_restore, permission_document_tools, - permission_document_version_revert, permission_document_view, - permission_document_trash, permission_document_type_create, - permission_document_type_delete, permission_document_type_edit, - permission_document_type_view, permission_empty_trash, - permission_document_version_view -) -from .settings import setting_zoom_max_level, setting_zoom_min_level - - -def is_not_current_version(context): - # Use the 'object' key when the document version is an object in a list, - # such as when showing the version list view and use the 'resolved_object' - # when the document version is the context object, such as when showing the - # signatures list of a documern version. This can be fixed by updating - # the navigations app object resolution logic to use 'resolved_object' even - # for objects in a list. - document_version = context.get('object', context['resolved_object']) - return document_version.document.latest_version.timestamp != document_version.timestamp - - -def is_first_page(context): - return context['resolved_object'].page_number <= 1 - - -def is_last_page(context): - return context['resolved_object'].page_number >= context['resolved_object'].document_version.pages.count() - - -def is_max_zoom(context): - return context['zoom'] >= setting_zoom_max_level.value - - -def is_min_zoom(context): - return context['zoom'] <= setting_zoom_min_level.value - - -# Facet -link_document_preview = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_preview', - permissions=(permission_document_view,), - text=_('Preview'), view='documents:document_preview', -) -link_document_properties = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_properties', - permissions=(permission_document_view,), - text=_('Properties'), view='documents:document_properties', -) -link_document_version_list = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_list', - permissions=(permission_document_version_view,), - text=_('Versions'), view='documents:document_version_list', -) -link_document_pages = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_pages', - permissions=(permission_document_view,), text=_('Pages'), - view='documents:document_pages', -) - -# Actions -link_document_clear_transformations = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', - permissions=(permission_transformation_delete,), - text=_('Clear transformations'), - view='documents:document_clear_transformations', -) -link_document_clone_transformations = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clone', - permissions=(permission_transformation_edit,), - text=_('Clone transformations'), - view='documents:document_clone_transformations', -) -link_document_delete = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', - permissions=(permission_document_delete,), - tags='dangerous', text=_('Delete'), view='documents:document_delete', - -) - -link_document_list_favorites = Link( - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_list', - text=_('Favorites'), - view='documents:document_list_favorites' -) -link_document_favorites_add = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', - permissions=(permission_document_view,), text=_('Add to favorites'), - view='documents:document_add_to_favorites', -) -link_document_favorites_remove = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', - permissions=(permission_document_view,), text=_('Remove from favorites'), - view='documents:document_remove_from_favorites', -) -link_document_trash = Link( - args='resolved_object.id', permissions=(permission_document_trash,), - icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', - tags='dangerous', text=_('Move to trash'), - view='documents:document_trash', -) -link_document_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_edit', - permissions=(permission_document_properties_edit,), - text=_('Edit properties'), view='documents:document_edit', -) -link_document_document_type_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_change', - permissions=(permission_document_properties_edit,), text=_('Change type'), - view='documents:document_document_type_edit', -) -link_document_download = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_download', - permissions=(permission_document_download,), text=_('Advanced download'), - view='documents:document_download_form', -) -link_document_print = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_print', - permissions=(permission_document_print,), - text=_('Print'), view='documents:document_print', -) -link_document_quick_download = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_quick_download', - permissions=(permission_document_download,), text=_('Quick download'), - view='documents:document_download', -) -link_document_update_page_count = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', - permissions=(permission_document_tools,), - text=_('Recalculate page count'), - view='documents:document_update_page_count' -) -link_document_restore = Link( - permissions=(permission_document_restore,), - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', - text=_('Restore'), - view='documents:document_restore', args='object.pk' -) -link_document_multiple_clear_transformations = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', - permissions=(permission_transformation_delete,), - text=_('Clear transformations'), - view='documents:document_multiple_clear_transformations' -) -link_document_multiple_trash = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', - tags='dangerous', text=_('Move to trash'), - view='documents:document_multiple_trash' -) -link_document_multiple_delete = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', - tags='dangerous', text=_('Delete'), - view='documents:document_multiple_delete' -) -link_document_multiple_favorites_add = Link( - text=_('Add to favorites'), - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', - view='documents:document_multiple_add_to_favorites', -) -link_document_multiple_favorites_remove = Link( - text=_('Remove from favorites'), - icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', - view='documents:document_multiple_remove_from_favorites', -) -link_document_multiple_document_type_edit = Link( - text=_('Change type'), - icon_class_path='mayan.apps.documents.icons.icon_document_type_change', - view='documents:document_multiple_document_type_edit' -) -link_document_multiple_download = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_download', - text=_('Advanced download'), - view='documents:document_multiple_download_form' -) -link_document_multiple_update_page_count = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', - text=_('Recalculate page count'), - view='documents:document_multiple_update_page_count' -) -link_document_multiple_restore = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', - text=_('Restore'), view='documents:document_multiple_restore' -) - -# Versions -link_document_version_download = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_download', - permissions=(permission_document_download,), text=_('Download version'), - view='documents:document_version_download_form' -) -link_document_version_return_document = Link( - args='resolved_object.document.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_return_document', - permissions=(permission_document_view,), text=_('Document'), - view='documents:document_preview', -) -link_document_version_return_list = Link( - args='resolved_object.document.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_return_list', - permissions=(permission_document_version_view,), text=_('Versions'), - view='documents:document_version_list', -) -link_document_version_view = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.documents.icons.icon_document_version_view', - permissions=(permission_document_version_view,), - text=_('Details'), view='documents:document_version_view' -) - -# Views -link_document_list = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_list', - text=_('All documents'), - view='documents:document_list' -) -link_document_list_recent_access = Link( - icon_class=icon_document_list_recent_access, text=_('Recently accessed'), - view='documents:document_list_recent_access' -) -link_document_list_recent_added = Link( - icon_class=icon_recent_added_document_list, text=_('Recently added'), - view='documents:document_list_recent_added' -) -link_document_list_deleted = Link( - icon_class_path='mayan.apps.documents.icons.icon_trashed_document_list', - text=_('Trash can'), view='documents:document_list_deleted' -) - -# Tools -link_clear_image_cache = Link( - icon_class=icon_clear_image_cache, - description=_( - 'Clear the graphics representations used to speed up the documents\' ' - 'display and interactive transformations results.' - ), permissions=(permission_document_tools,), - text=_('Clear document image cache'), - view='documents:document_clear_image_cache' -) -link_trash_can_empty = Link( - permissions=(permission_empty_trash,), text=_('Empty trash'), - view='documents:trash_can_empty' -) - -# Document pages -link_document_page_navigation_first = Link( - args='resolved_object.pk', conditional_disable=is_first_page, - icon_class=icon_document_page_navigation_first, - keep_query=True, permissions=(permission_document_view,), - text=_('First page'), view='documents:document_page_navigation_first', -) -link_document_page_navigation_last = Link( - args='resolved_object.pk', conditional_disable=is_last_page, - icon_class=icon_document_page_navigation_last, - keep_query=True, text=_('Last page'), - permissions=(permission_document_view,), - view='documents:document_page_navigation_last', -) -link_document_page_navigation_previous = Link( - args='resolved_object.pk', conditional_disable=is_first_page, - icon_class=icon_document_page_navigation_previous, - keep_query=True, permissions=(permission_document_view,), - text=_('Previous page'), - view='documents:document_page_navigation_previous', -) -link_document_page_navigation_next = Link( - args='resolved_object.pk', conditional_disable=is_last_page, - icon_class=icon_document_page_navigation_next, - keep_query=True, text=_('Next page'), - permissions=(permission_document_view,), - view='documents:document_page_navigation_next', -) -link_document_page_return = Link( - args='resolved_object.document.pk', icon_class=icon_document_page_return, - permissions=(permission_document_view,), text=_('Document'), - view='documents:document_preview', -) -link_document_page_rotate_left = Link( - args='resolved_object.pk', icon_class=icon_document_page_rotate_left, - keep_query=True, permissions=(permission_document_view,), - text=_('Rotate left'), view='documents:document_page_rotate_left', -) -link_document_page_rotate_right = Link( - args='resolved_object.pk', icon_class=icon_document_page_rotate_right, - keep_query=True, permissions=(permission_document_view,), - text=_('Rotate right'), view='documents:document_page_rotate_right', -) -link_document_page_view = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_view', - permissions=(permission_document_view,), text=_('Page image'), - view='documents:document_page_view', args='resolved_object.pk' -) -link_document_page_view_reset = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_page_view_reset', - permissions=(permission_document_view,), text=_('Reset view'), - view='documents:document_page_view_reset', args='resolved_object.pk' -) -link_document_page_zoom_in = Link( - args='resolved_object.pk', conditional_disable=is_max_zoom, - icon_class=icon_document_page_zoom_in, keep_query=True, - permissions=(permission_document_view,), text=_('Zoom in'), - view='documents:document_page_zoom_in', -) -link_document_page_zoom_out = Link( - args='resolved_object.pk', conditional_disable=is_min_zoom, - icon_class=icon_document_page_zoom_out, keep_query=True, - permissions=(permission_document_view,), text=_('Zoom out'), - view='documents:document_page_zoom_out', -) - -# Document versions -link_document_version_revert = Link( - args='object.pk', condition=is_not_current_version, - icon_class_path='mayan.apps.documents.icons.icon_document_version_revert', - permissions=(permission_document_version_revert,), tags='dangerous', - text=_('Revert'), view='documents:document_version_revert', -) - -# Document type related links -link_document_type_create = Link( - icon_class=icon_document_type_create, - permissions=(permission_document_type_create,), - text=_('Create document type'), view='documents:document_type_create' -) -link_document_type_delete = Link( - args='resolved_object.id', icon_class=icon_document_type_delete, - permissions=(permission_document_type_delete,), tags='dangerous', - text=_('Delete'), view='documents:document_type_delete', -) -link_document_type_policies = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_policies', - permissions=(permission_document_type_edit,), - text=_('Deletion policies'), view='documents:document_type_policies', -) -link_document_type_edit = Link( - args='resolved_object.id', icon_class=icon_document_type_edit, - permissions=(permission_document_type_edit,), text=_('Edit'), - view='documents:document_type_edit', -) -link_document_type_filename_create = Link( - args='document_type.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_create', - permissions=(permission_document_type_edit,), - text=_('Add quick label to document type'), - view='documents:document_type_filename_create', -) -link_document_type_filename_delete = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_delete', - permissions=(permission_document_type_edit,), - tags='dangerous', text=_('Delete'), - view='documents:document_type_filename_delete', -) -link_document_type_filename_edit = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_edit', - permissions=(permission_document_type_edit,), - text=_('Edit'), view='documents:document_type_filename_edit', -) -link_document_type_filename_list = Link( - args='resolved_object.id', - icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_list', - permissions=(permission_document_type_view,), - text=_('Quick labels'), view='documents:document_type_filename_list', -) -link_document_type_list = Link( - icon_class_path='mayan.apps.documents.icons.icon_document_type_list', - permissions=(permission_document_type_view,), text=_('Document types'), - view='documents:document_type_list' -) -link_document_type_setup = Link( - icon_class=icon_document_type_setup, - permissions=(permission_document_type_view,), text=_('Document types'), - view='documents:document_type_list' -) -link_duplicated_document_list = Link( - icon_class=icon_duplicated_document_list, text=_('Duplicated documents'), - view='documents:duplicated_document_list' -) -link_document_duplicates_list = Link( - args='resolved_object.id', icon_class=icon_duplicated_document_list, - permissions=(permission_document_view,), text=_('Duplicates'), - view='documents:document_duplicates_list', -) -link_duplicated_document_scan = Link( - icon_class=icon_duplicated_document_scan, - permissions=(permission_document_tools,), - text=_('Duplicated document scan'), - view='documents:duplicated_document_scan' -) diff --git a/mayan/apps/documents/links/__init__.py b/mayan/apps/documents/links/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/documents/links/document_links.py b/mayan/apps/documents/links/document_links.py new file mode 100644 index 0000000000..2f16cd5afd --- /dev/null +++ b/mayan/apps/documents/links/document_links.py @@ -0,0 +1,103 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.converter.permissions import ( + permission_transformation_delete, permission_transformation_edit +) +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_document_list_recent_access, icon_recent_added_document_list +) +from ..permissions import ( + permission_document_download, permission_document_properties_edit, + permission_document_print, permission_document_view +) + + +link_document_clear_transformations = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', + permissions=(permission_transformation_delete,), + text=_('Clear transformations'), + view='documents:document_clear_transformations', +) +link_document_clone_transformations = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clone', + permissions=(permission_transformation_edit,), + text=_('Clone transformations'), + view='documents:document_clone_transformations', +) +link_document_document_type_edit = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_change', + permissions=(permission_document_properties_edit,), text=_('Change type'), + view='documents:document_document_type_edit', +) +link_document_download = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_download', + permissions=(permission_document_download,), text=_('Advanced download'), + view='documents:document_download_form', +) +link_document_edit = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_edit', + permissions=(permission_document_properties_edit,), + text=_('Edit properties'), view='documents:document_edit', +) +link_document_list = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_list', + text=_('All documents'), + view='documents:document_list' +) +link_document_list_recent_access = Link( + icon_class=icon_document_list_recent_access, text=_('Recently accessed'), + view='documents:document_list_recent_access' +) +link_document_list_recent_added = Link( + icon_class=icon_recent_added_document_list, text=_('Recently added'), + view='documents:document_list_recent_added' +) +link_document_multiple_clear_transformations = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_transformations_clear', + permissions=(permission_transformation_delete,), + text=_('Clear transformations'), + view='documents:document_multiple_clear_transformations' +) +link_document_multiple_document_type_edit = Link( + text=_('Change type'), + icon_class_path='mayan.apps.documents.icons.icon_document_type_change', + view='documents:document_multiple_document_type_edit' +) +link_document_multiple_download = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_download', + text=_('Advanced download'), + view='documents:document_multiple_download_form' +) +link_document_preview = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_preview', + permissions=(permission_document_view,), + text=_('Preview'), view='documents:document_preview', +) +link_document_properties = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_properties', + permissions=(permission_document_view,), + text=_('Properties'), view='documents:document_properties', +) +link_document_print = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_print', + permissions=(permission_document_print,), + text=_('Print'), view='documents:document_print', +) +link_document_quick_download = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_quick_download', + permissions=(permission_document_download,), text=_('Quick download'), + view='documents:document_download', +) diff --git a/mayan/apps/documents/links/document_type_links.py b/mayan/apps/documents/links/document_type_links.py new file mode 100644 index 0000000000..f99886df89 --- /dev/null +++ b/mayan/apps/documents/links/document_type_links.py @@ -0,0 +1,73 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_document_type_create, icon_document_type_delete, + icon_document_type_edit, icon_document_type_setup, +) +from ..permissions import ( + permission_document_type_create, permission_document_type_delete, + permission_document_type_edit, permission_document_type_view, +) + + +link_document_type_create = Link( + icon_class=icon_document_type_create, + permissions=(permission_document_type_create,), + text=_('Create document type'), view='documents:document_type_create' +) +link_document_type_delete = Link( + args='resolved_object.id', icon_class=icon_document_type_delete, + permissions=(permission_document_type_delete,), tags='dangerous', + text=_('Delete'), view='documents:document_type_delete', +) +link_document_type_policies = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_policies', + permissions=(permission_document_type_edit,), + text=_('Deletion policies'), view='documents:document_type_policies', +) +link_document_type_edit = Link( + args='resolved_object.id', icon_class=icon_document_type_edit, + permissions=(permission_document_type_edit,), text=_('Edit'), + view='documents:document_type_edit', +) +link_document_type_filename_create = Link( + args='document_type.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_create', + permissions=(permission_document_type_edit,), + text=_('Add quick label to document type'), + view='documents:document_type_filename_create', +) +link_document_type_filename_delete = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_delete', + permissions=(permission_document_type_edit,), + tags='dangerous', text=_('Delete'), + view='documents:document_type_filename_delete', +) +link_document_type_filename_edit = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_edit', + permissions=(permission_document_type_edit,), + text=_('Edit'), view='documents:document_type_filename_edit', +) +link_document_type_filename_list = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_document_type_filename_list', + permissions=(permission_document_type_view,), + text=_('Quick labels'), view='documents:document_type_filename_list', +) +link_document_type_list = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_type_list', + permissions=(permission_document_type_view,), text=_('Document types'), + view='documents:document_type_list' +) +link_document_type_setup = Link( + icon_class=icon_document_type_setup, + permissions=(permission_document_type_view,), text=_('Document types'), + view='documents:document_type_list' +) diff --git a/mayan/apps/documents/links/document_version_links.py b/mayan/apps/documents/links/document_version_links.py new file mode 100644 index 0000000000..12c0db813d --- /dev/null +++ b/mayan/apps/documents/links/document_version_links.py @@ -0,0 +1,59 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import ( + permission_document_download, permission_document_version_revert, + permission_document_version_view, permission_document_view, +) + + +def is_not_current_version(context): + # Use the 'object' key when the document version is an object in a list, + # such as when showing the version list view and use the 'resolved_object' + # when the document version is the context object, such as when showing the + # signatures list of a documern version. This can be fixed by updating + # the navigations app object resolution logic to use 'resolved_object' even + # for objects in a list. + document_version = context.get('object', context['resolved_object']) + return document_version.document.latest_version.timestamp != document_version.timestamp + + +link_document_version_list = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_list', + permissions=(permission_document_version_view,), + text=_('Versions'), view='documents:document_version_list', +) +link_document_version_download = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_download', + permissions=(permission_document_download,), text=_('Download version'), + view='documents:document_version_download_form' +) +link_document_version_return_document = Link( + args='resolved_object.document.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_return_document', + permissions=(permission_document_view,), text=_('Document'), + view='documents:document_preview', +) +link_document_version_return_list = Link( + args='resolved_object.document.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_return_list', + permissions=(permission_document_version_view,), text=_('Versions'), + view='documents:document_version_list', +) +link_document_version_view = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_version_view', + permissions=(permission_document_version_view,), + text=_('Details'), view='documents:document_version_view' +) +link_document_version_revert = Link( + args='object.pk', condition=is_not_current_version, + icon_class_path='mayan.apps.documents.icons.icon_document_version_revert', + permissions=(permission_document_version_revert,), tags='dangerous', + text=_('Revert'), view='documents:document_version_revert', +) diff --git a/mayan/apps/documents/links/document_version_page_links.py b/mayan/apps/documents/links/document_version_page_links.py new file mode 100644 index 0000000000..6d301544d2 --- /dev/null +++ b/mayan/apps/documents/links/document_version_page_links.py @@ -0,0 +1,151 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_document_page_navigation_first, + icon_document_page_navigation_last, icon_document_page_navigation_next, + icon_document_page_navigation_previous, icon_document_page_return, + icon_document_page_rotate_left, icon_document_page_rotate_right, + icon_document_page_zoom_in, icon_document_page_zoom_out, +) +from ..permissions import ( + permission_document_edit, permission_document_tools, + permission_document_view +) +from ..settings import setting_zoom_max_level, setting_zoom_min_level + + +def is_first_page(context): + return context['resolved_object'].siblings.first() == context['resolved_object'] + + +def is_last_page(context): + return context['resolved_object'].siblings.last() == context['resolved_object'] + + +def is_max_zoom(context): + return context['zoom'] >= setting_zoom_max_level.value + + +def is_min_zoom(context): + return context['zoom'] <= setting_zoom_min_level.value + + +def is_document_page_enabled(context): + return context['resolved_object'].enabled + + +def is_document_page_disabled(context): + return not context['resolved_object'].enabled + + +link_document_page_disable = Link( + condition=is_document_page_enabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', + kwargs={'pk': 'resolved_object.id'}, + permissions=(permission_document_edit,), text=_('Disable page'), + view='documents:document_page_disable' +) +link_document_page_multiple_disable = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_disable', + text=_('Disable pages'), + view='documents:document_page_multiple_disable' +) +link_document_page_enable = Link( + condition=is_document_page_disabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', + kwargs={'pk': 'resolved_object.id'}, + permissions=(permission_document_edit,), text=_('Enable page'), + view='documents:document_page_enable' +) +link_document_page_multiple_enable = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_enable', + text=_('Enable pages'), + view='documents:document_page_multiple_enable' +) +link_document_page_navigation_first = Link( + args='resolved_object.pk', conditional_disable=is_first_page, + icon_class=icon_document_page_navigation_first, + keep_query=True, permissions=(permission_document_view,), + text=_('First page'), view='documents:document_page_navigation_first', +) +link_document_page_navigation_last = Link( + args='resolved_object.pk', conditional_disable=is_last_page, + icon_class=icon_document_page_navigation_last, + keep_query=True, text=_('Last page'), + permissions=(permission_document_view,), + view='documents:document_page_navigation_last', +) +link_document_page_navigation_previous = Link( + args='resolved_object.pk', conditional_disable=is_first_page, + icon_class=icon_document_page_navigation_previous, + keep_query=True, permissions=(permission_document_view,), + text=_('Previous page'), + view='documents:document_page_navigation_previous', +) +link_document_page_navigation_next = Link( + args='resolved_object.pk', conditional_disable=is_last_page, + icon_class=icon_document_page_navigation_next, + keep_query=True, text=_('Next page'), + permissions=(permission_document_view,), + view='documents:document_page_navigation_next', +) +link_document_page_return = Link( + args='resolved_object.document.pk', icon_class=icon_document_page_return, + permissions=(permission_document_view,), text=_('Document'), + view='documents:document_preview', +) +link_document_page_rotate_left = Link( + args='resolved_object.pk', icon_class=icon_document_page_rotate_left, + keep_query=True, permissions=(permission_document_view,), + text=_('Rotate left'), view='documents:document_page_rotate_left', +) +link_document_page_rotate_right = Link( + args='resolved_object.pk', icon_class=icon_document_page_rotate_right, + keep_query=True, permissions=(permission_document_view,), + text=_('Rotate right'), view='documents:document_page_rotate_right', +) +link_document_page_view = Link( + conditional_disable=is_document_page_disabled, + icon_class_path='mayan.apps.documents.icons.icon_document_page_view', + permissions=(permission_document_view,), text=_('Page image'), + view='documents:document_page_view', args='resolved_object.pk' +) +link_document_page_view_reset = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_view_reset', + permissions=(permission_document_view,), text=_('Reset view'), + view='documents:document_page_view_reset', args='resolved_object.pk' +) +link_document_page_zoom_in = Link( + args='resolved_object.pk', conditional_disable=is_max_zoom, + icon_class=icon_document_page_zoom_in, keep_query=True, + permissions=(permission_document_view,), text=_('Zoom in'), + view='documents:document_page_zoom_in', +) +link_document_page_zoom_out = Link( + args='resolved_object.pk', conditional_disable=is_min_zoom, + icon_class=icon_document_page_zoom_out, keep_query=True, + permissions=(permission_document_view,), text=_('Zoom out'), + view='documents:document_page_zoom_out', +) +link_document_pages = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_pages', + permissions=(permission_document_view,), text=_('Pages'), + view='documents:document_pages', +) +link_document_multiple_update_page_count = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', + text=_('Recalculate page count'), + view='documents:document_multiple_update_page_count' +) +link_document_update_page_count = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.documents.icons.icon_document_page_count_update', + permissions=(permission_document_tools,), + text=_('Recalculate page count'), + view='documents:document_update_page_count' +) diff --git a/mayan/apps/documents/links/duplicated_document_links.py b/mayan/apps/documents/links/duplicated_document_links.py new file mode 100644 index 0000000000..01b42f1eae --- /dev/null +++ b/mayan/apps/documents/links/duplicated_document_links.py @@ -0,0 +1,26 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..icons import ( + icon_duplicated_document_list, icon_duplicated_document_scan +) +from ..permissions import permission_document_tools, permission_document_view + +link_document_duplicates_list = Link( + args='resolved_object.id', icon_class=icon_duplicated_document_list, + permissions=(permission_document_view,), text=_('Duplicates'), + view='documents:document_duplicates_list', +) +link_duplicated_document_list = Link( + icon_class=icon_duplicated_document_list, text=_('Duplicated documents'), + view='documents:duplicated_document_list' +) +link_duplicated_document_scan = Link( + icon_class=icon_duplicated_document_scan, + permissions=(permission_document_tools,), + text=_('Duplicated document scan'), + view='documents:duplicated_document_scan' +) diff --git a/mayan/apps/documents/links/favorite_links.py b/mayan/apps/documents/links/favorite_links.py new file mode 100644 index 0000000000..3690e4b76e --- /dev/null +++ b/mayan/apps/documents/links/favorite_links.py @@ -0,0 +1,36 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import permission_document_view + + +link_document_list_favorites = Link( + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_list', + text=_('Favorites'), + view='documents:document_list_favorites' +) +link_document_favorites_add = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', + permissions=(permission_document_view,), text=_('Add to favorites'), + view='documents:document_add_to_favorites', +) +link_document_favorites_remove = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', + permissions=(permission_document_view,), text=_('Remove from favorites'), + view='documents:document_remove_from_favorites', +) +link_document_multiple_favorites_add = Link( + text=_('Add to favorites'), + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_add', + view='documents:document_multiple_add_to_favorites', +) +link_document_multiple_favorites_remove = Link( + text=_('Remove from favorites'), + icon_class_path='mayan.apps.documents.icons.icon_favorite_document_remove', + view='documents:document_multiple_remove_from_favorites', +) diff --git a/mayan/apps/documents/links/trashed_document_links.py b/mayan/apps/documents/links/trashed_document_links.py new file mode 100644 index 0000000000..ffc231da17 --- /dev/null +++ b/mayan/apps/documents/links/trashed_document_links.py @@ -0,0 +1,53 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.navigation.classes import Link + +from ..permissions import ( + permission_document_delete, permission_document_restore, + permission_document_trash, permission_empty_trash +) + + +link_document_delete = Link( + args='resolved_object.id', + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', + permissions=(permission_document_delete,), + tags='dangerous', text=_('Delete'), view='documents:document_delete', + +) +link_document_trash = Link( + args='resolved_object.id', permissions=(permission_document_trash,), + icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', + tags='dangerous', text=_('Move to trash'), + view='documents:document_trash', +) +link_document_list_deleted = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_list', + text=_('Trash can'), view='documents:document_list_deleted' +) +link_document_restore = Link( + permissions=(permission_document_restore,), + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', + text=_('Restore'), + view='documents:document_restore', args='object.pk' +) +link_document_multiple_trash = Link( + icon_class_path='mayan.apps.documents.icons.icon_document_trash_send', + tags='dangerous', text=_('Move to trash'), + view='documents:document_multiple_trash' +) +link_document_multiple_delete = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_delete', + tags='dangerous', text=_('Delete'), + view='documents:document_multiple_delete' +) +link_document_multiple_restore = Link( + icon_class_path='mayan.apps.documents.icons.icon_trashed_document_restore', + text=_('Restore'), view='documents:document_multiple_restore' +) +link_trash_can_empty = Link( + permissions=(permission_empty_trash,), text=_('Empty trash'), + view='documents:trash_can_empty' +) diff --git a/mayan/apps/documents/literals.py b/mayan/apps/documents/literals.py index c56f92d39b..e29ed17e8d 100644 --- a/mayan/apps/documents/literals.py +++ b/mayan/apps/documents/literals.py @@ -9,6 +9,7 @@ CHECK_TRASH_PERIOD_INTERVAL = 60 DELETE_STALE_STUBS_INTERVAL = 60 * 10 # 10 minutes DEFAULT_DELETE_PERIOD = 30 DEFAULT_DELETE_TIME_UNIT = TIME_DELTA_UNIT_DAYS +DEFAULT_DOCUMENTS_CACHE_MAXIMUM_SIZE = 500 * 2 ** 20 # 500 Megabytes DEFAULT_DOCUMENTS_HASH_BLOCK_SIZE = 65535 DEFAULT_LANGUAGE = 'eng' DEFAULT_LANGUAGE_CODES = ( @@ -30,6 +31,8 @@ DEFAULT_LANGUAGE_CODES = ( DEFAULT_ZIP_FILENAME = 'document_bundle.zip' DEFAULT_DOCUMENT_TYPE_LABEL = _('Default') DOCUMENT_IMAGE_TASK_TIMEOUT = 120 +DOCUMENT_IMAGES_CACHE_NAME = 'document_images' +DOCUMENT_CACHE_STORAGE_INSTANCE_PATH = 'mayan.apps.documents.storages.storage_documentimagecache' STUB_EXPIRATION_INTERVAL = 60 * 60 * 24 # 24 hours UPDATE_PAGE_COUNT_RETRY_DELAY = 10 UPLOAD_NEW_VERSION_RETRY_DELAY = 10 diff --git a/mayan/apps/documents/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/ar/LC_MESSAGES/django.mo index 3bf3396e99..495d9ec81d 100644 Binary files a/mayan/apps/documents/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/ar/LC_MESSAGES/django.po b/mayan/apps/documents/locale/ar/LC_MESSAGES/django.po index 4162a0fe53..47437daa0a 100644 --- a/mayan/apps/documents/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "الوثائق" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "انشاء نوع وثيقة" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "كل وثيقة ترفع يجب ان يحدد لها نوع \"نوع الوثيقة\", انها الطريقة الاساسية التي يقوم مايان اي دي ام اس بها بترتيب الوثائق. " -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "صفحات" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "النسخ المكررة" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "النوع" @@ -78,7 +79,8 @@ msgstr "عدد الوثائق الكلي" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "" @@ -107,23 +109,27 @@ msgstr "" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -186,7 +192,7 @@ msgstr "لا شيء" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "حجم الملف" @@ -198,12 +204,12 @@ msgstr "موجود في التخزين" msgid "File path in storage" msgstr "مسار الملف في التخزين" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Checksum" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "نطاق الصفحات" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "حذف" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "" - -#: links.py:245 -msgid "Details" -msgstr "التفاصيل" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "مسح بيانات الرسومات المستخدمة لتسريع عرض الوثائق و نتائج التحويلات." - -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" +#: links/document_links.py:96 +msgid "Print" msgstr "" -#: links.py:287 -msgid "First page" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:292 -msgid "Last page" -msgstr "" - -#: links.py:300 -msgid "Previous page" -msgstr "" - -#: links.py:306 -msgid "Next page" -msgstr "" - -#: links.py:318 -msgid "Rotate left" -msgstr "" - -#: links.py:323 -msgid "Rotate right" -msgstr "" - -#: links.py:327 -msgid "Page image" -msgstr "صورة الصفحة" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "" - -#: links.py:344 -msgid "Zoom out" -msgstr "" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "حذف" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "تحرير" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "التفاصيل" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "صورة الصفحة" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "Default" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "مفعل" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "صفحة %(page_num)d من أصل %(total_pages)d للوثيقة %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "اسم الملف" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "" msgid "Documents types" msgstr "" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "مفعل" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "تعليق" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "ملف" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "نوع الملف" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -653,7 +654,7 @@ msgstr "حذف الوثائق" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "تحميل الوثائق" @@ -745,115 +746,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "الدرجة المسموح بها لتدوير الوثيقة لكل مستخدم." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "أكبر نسبة مئوية (%) للسماح بالتكبير داخل الوثيقة لكل مستخدم." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "أقل نسبة مئوية (%) للسماح بالتكبير داخل الوثيقة لكل مستخدم." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "النسبة المئوية لتكبير أو تصغير في صفحة الوثيقة لكل مستخدم." @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,48 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "لا توجد صفحات أخرى بهذه الوثيقة" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "أنت بالفعل في الصفحة الأولى من هذه الوثيقة" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,37 +1106,37 @@ msgstr "خطأ بارجاع اصدار الوثيقة %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" @@ -1123,59 +1146,46 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "تحميل" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" @@ -1185,29 +1195,29 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" @@ -1217,63 +1227,91 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "خطأ بمسح التحويلات الخاصة بالوثيقة: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "ارسال" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1340,22 +1378,6 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/bg/LC_MESSAGES/django.mo index c8ab2e65d2..3f9a8f37b0 100644 Binary files a/mayan/apps/documents/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po b/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po index f256cf9be2..7647d9fe2d 100644 --- a/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-16 21:23+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-04 18:41+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Документи" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Създайте тип документ" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "На всеки качен документ трябва да бъде присвоен тип документ, това е основният начин, по който Mayan EDMS категоризира документите." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Коментар на версиите" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Кодиране на версиите" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Мime тип на версиите" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Времева марка на версиите" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Умалено изображение" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Страници" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Дубликати" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Тип" @@ -78,7 +79,8 @@ msgstr "Общо документи" msgid "Documents in trash" msgstr "Документи в кошчето" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Типове документи" @@ -107,23 +109,27 @@ msgstr "Качена нова версия" msgid "Document properties edited" msgstr "Свойствата на документа са редактирани" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "Изхвърлени документи" + +#: events.py:26 msgid "Document type changed" msgstr "Типът документ е променен" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Тип на документа е създаден" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Тип на документа редактиран" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Версията на документа е обърната" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Прегледан документ" @@ -186,7 +192,7 @@ msgstr "Няма" msgid "File encoding" msgstr "Кодиране на файлове" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Размер на файла" @@ -198,12 +204,12 @@ msgstr "Съществува в склада" msgid "File path in storage" msgstr "Файлов път до склада" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Контролна сума" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Поредица от страници" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "Взема разширението на файла и го премества в края на името на файла, което позволява на операционните системи, които разчитат на разширения на файлове, да отворят правилно изтеглената версия на документа." -#: links.py:66 -msgid "Preview" -msgstr "Предварителен преглед" +#: handlers.py:33 +msgid "Document images" +msgstr "Документни изображения" -#: links.py:72 -msgid "Properties" -msgstr "Свойства" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Версии" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Изчисти трансформациите" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Клонирай трансформациите" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Изтрийте" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Любими" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Добави към любими" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Премахни от любими" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Преместване в кошчето" - -#: links.py:137 -msgid "Edit properties" -msgstr "Редактиране на свойства" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Промяна на типа" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Разширено изтегляне" -#: links.py:155 -msgid "Print" -msgstr "Печат" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Редактиране на свойства" -#: links.py:160 -msgid "Quick download" -msgstr "Бързо изтегляне" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Преизчисляване броя на страниците" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Възстанови" - -#: links.py:226 -msgid "Download version" -msgstr "Изтеглете версия" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Документ" - -#: links.py:245 -msgid "Details" -msgstr "Детайли" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Всички документи" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Наскоро достъпени" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Неотдавна добавени" -#: links.py:264 -msgid "Trash can" -msgstr "Кошче за боклук" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Предварителен преглед" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Изчистване на графичното представяне, използвано да ускори изобразяването на документите и интерактивните промени." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Свойства" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Изчистване на кеша на изображението на документа" +#: links/document_links.py:96 +msgid "Print" +msgstr "Печат" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Изпразни кошчето" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Бързо изтегляне" -#: links.py:287 -msgid "First page" -msgstr "Първа страница" - -#: links.py:292 -msgid "Last page" -msgstr "Последна страница" - -#: links.py:300 -msgid "Previous page" -msgstr "Предишна страница" - -#: links.py:306 -msgid "Next page" -msgstr "Следваща страница" - -#: links.py:318 -msgid "Rotate left" -msgstr "Завърти наляво" - -#: links.py:323 -msgid "Rotate right" -msgstr "Завърти надясно" - -#: links.py:327 -msgid "Page image" -msgstr "Изображение на страница" - -#: links.py:332 -msgid "Reset view" -msgstr "Нулиране на изгледа" - -#: links.py:338 -msgid "Zoom in" -msgstr "Увеличаване" - -#: links.py:344 -msgid "Zoom out" -msgstr "Намаляване" - -#: links.py:353 -msgid "Revert" -msgstr "Обръщане" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Създаване на тип документ" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Изтрийте" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Политики за изтриване" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Редактиране" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Добавете бърз етикет към типа документ" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Бързи етикети" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Версии" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Изтеглете версия" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Документ" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Детайли" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Обръщане" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "Деактивиране на страницата" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "Деактивиране на страниците" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "Активиране на страницата" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "Активиране на страниците" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Първа страница" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Последна страница" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Предишна страница" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Следваща страница" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Завърти наляво" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Завърти надясно" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Изображение на страница" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Нулиране на изгледа" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Увеличаване" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Намаляване" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Преизчисляване броя на страниците" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Дублирани документи" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Дублирано сканиране на документи" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Любими" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Добави към любими" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Премахни от любими" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Преместване в кошчето" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Кошче за боклук" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Възстанови" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Изпразни кошчето" + +#: literals.py:32 msgid "Default" msgstr "По подразбиране" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Всички страници" @@ -429,7 +447,7 @@ msgstr "UUID на документ, универсално уникален ид msgid "The name of the document." msgstr "Име на документа." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "Дали този документ е в кошчето или не." msgid "In trash?" msgstr "В кошчето ли е?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Дата и час на сървъра, когато документът е преместен в кошчето." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Дата и час на изхвърляне в кошчето" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Кочан на документ е документ със запис в базата данни, но не е качен файл. Това може да бъде прекъснато качване или отложено качване чрез API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Кочан ли е?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Кочан на документ, №: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Версия на документа" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Активиран" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Номер на страница" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Страница на документа" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Страници на документа" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Страница %(page_num)d от общо %(total_pages)d страници от %(document)s документи." -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Дата час" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Име на файл" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Кеширано изображение на страница от документ" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Кеширани изображения от страници на документ" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Име на типа документ." @@ -564,52 +569,48 @@ msgstr "Изтриване на единица време" msgid "Documents types" msgstr "Типове документи" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Активиран" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Бърз етикет" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Дата и час на сървъра, когато е обработена версията на документа." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Времева марка" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Незадължителен кратък текст, описващ версията на документа." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Коментар" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Файл" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Mime тип на файла на версията на документа Типовете MIME са стандартен начин да се опише форматът на файл, в този случай форматът на файла на документа. Някои примери: „текст/обикновена“ или „изображение/jpeg“." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME тип" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Кодиране на файла на версията на документа. двоичен 7-битов, двоичен 8-битов, текст, base64 и т.н." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Кодиране" @@ -653,7 +654,7 @@ msgstr "Изтриване на документи" msgid "Trash documents" msgstr "Изхвърли документи" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Изтегляне на документи" @@ -745,115 +746,117 @@ msgstr "Проверете периодите на изхвърляне на т msgid "Delete document stubs" msgstr "Изтрийте кочаните на документи" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Изчистване на кеш на изображенията" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Актуализиране на броя на страниците на документа" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Качете нова версия на документа" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Дублирания на сканове на документи" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "Прагът, при който DOCUMENT_CACHE_STORAGE_BACKEND ще започне да изтрива най-старите файлове за кеш на изображение на документ. Посочете размера в байтове." + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Път към подклас Storage, който да се използва при съхранение на кешираните файлове с изображения на документи." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Аргументи за подаване към DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Деактивира първия слой на кеша, който съхранява нетрансформирани версии на страниците на документи с висока разделителна способност." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Деактивира втория кеш слой, който съхранява средни до ниски разделителни способности, трансформирани (завъртяни, увеличени и т.н.) версии на страниците на документи." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Максимален брой любими документи за запомняне на потребител." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Открийте ориентацията на всяка от страниците на документа и създайте съответна ротационна трансформация, за да я покажете с дясната страна отгоре. Това е експериментална функция и е деактивирана по подразбиране." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Размер на блоковете, които да се използват при изчисляване на контролната сума на файла на документа. Стойност 0 деактивира изчислението на блока и целият файл ще бъде зареден в паметта." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Език на документи по подразбиране (във формат ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Списък на поддържаните езици на документи. Във формат ISO639-3" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Време за секунди за което браузърът трябва да кешира предоставените изображения на документи. По подразбиране 31559626 секунди съответства на 1 година." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Максимален брой наскоро ползвани (създадени, редактирани, прегледани) документи, които да се запомнят на потребител." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Максимален брой наскоро създадени документи за показване." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Градуси на завъртане на страница от документ, при потребителско действие" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Път към подклас Storage, който да се използва при съхранение на файлове с документи." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Аргументи за подаване към DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Височина в пиксели на миниатюрното изображение на документа." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Максимален процент (%) допустим за интерактивно увеличаване страницата от потребителя" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Минимален процент (%) допустим за интерактивно смаляване страницата от потребителя" -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Процент приближаване или отдалечаване на страницата на документа, приложен за потребителя" @@ -905,27 +908,27 @@ msgstr "Ноември" msgid "December" msgstr "Декември" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Нови документи на месец" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Нови версии на документи на месец" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Нови страници на документи на месец" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Общо документи на всеки месец" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Общо версии на документи на всеки месец" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Общо страници от документи на всеки месец" @@ -949,12 +952,12 @@ msgstr "Няма страници за показване" msgid "Document image" msgstr "Документно изображение" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Неизвестен език "%s"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "Това може да означава, че документът е във формат, който не се поддържа, че е повреден или че процесът на качване е прекъснат. Използвайте действието за преизчисляване на страниците на документ, за да се опитате отново да прегледате броя на страниците." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Няма налични страници от документ" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Страници за документ: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Няма повече страници в този документ" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Вече сте на първа страница на този документ" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Изображение на: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "Деактивиране на избраната страница с документи?" +msgstr[1] "Деактивиране на избраните страници с документи?" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "Да се активира ли избраната страница с документи?" +msgstr[1] "Да се активират ли избраните страници с документи?" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,186 +1098,201 @@ msgstr "Грешка при връщане на версията на докум msgid "Preview of document version: %s" msgstr "Визуализация на версията на документа: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Грешка при извличането на списъка с документи: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Това може да означава, че не са качени документи или че потребителският ви акаунт не е получил разрешение за преглед за всеки документ или тип документ." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Няма налични документи" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Заявка за промяна на типа документ, извършена на %(count)d документ " -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Заявка за промяна на типа документ, извършена за %(count)d документи" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Промяна" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Променете типа на избрания документ" msgstr[1] "Променете типа на избраните документи" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Променете типа на документа: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Типът на документа за "%s" е променен успешно." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Сваляне" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "В този списък ще бъдат показани само точни копия на този документ." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Няма дубликати за този документ" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Дубликати за документ: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Редактиране на свойствата на документа: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Визуализация на документа: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Свойства на документа: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d документ на опашка за преизчисляване на броя на страниците" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d документи на опашка за преизчисляване на броя на страниците" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Да преизчислите броя на страниците на избрания документ?" msgstr[1] "Преизчисляване на броя на страниците на избраните документи?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Преизчисляване броя на страниците на документа: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Документът "%(document)s" е празен. Качете поне една версия на документа, преди да се опитате да откриете броя на страниците." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Заявка за изчистване на трансформация, обработена за %(count)d документ" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Заявка за изчистване на трансформация, обработена за %(count)d документи" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Да се изчистят ли всички трансформации на страницата за избрания документ?" msgstr[1] "Да се изчистят ли всички трансформации на страницата за избрания документ?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Да се изчистят ли всички трансформации на страници за документа: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Грешка при изтриването на трансформация на страница на документ %(document)s, %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "Грешка при клониране на трансформациите на страниците за документ: %(document)s; %(error)s." + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Трансформациите клонирани успешно." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Подаване" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Клониране на трансформации на страница за документ: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Печат: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Този изглед ще изброява най-новите документи, гледани или манипулирани по някакъв начин от този потребителски акаунт." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Няма наскоро работени документи" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Този изглед ще изброява последните документи, качени в системата." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Няма наскоро добавен документ" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "В този списък ще бъдат показани само точни копия на този документ." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Няма дубликати за този документ" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Дубликати за документ: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Дублиращи са документи, които са съставени от същия файл, до последния байт. Файлове, които имат един и същ текст или OCR, но не са идентични или са запазени с различен файлов формат, няма да се появят като дубликати." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Няма дублирани документи" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Този изглед ще изброява най-новите документи, гледани или манипулирани по някакъв начин от този потребителски акаунт." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Да сканирате ли за дублирани документи?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Няма наскоро работени документи" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Този изглед ще изброява последните документи, качени в системата." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Няма наскоро добавен документ" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Дублираните сканове на документи са поставени на опашка успешно." #: views/favorite_document_views.py:33 #, python-format @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "Премахнете избрания документ от любимите" msgstr[1] "Премахнете избраните документи от любими" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Да изчистите ли кеша на изображенията на документи?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Изчистването на кеш на документи е поставено на опашка успешно." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Да сканирате ли за дублирани документи?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Дублираните сканове на документи са поставени на опашка успешно." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.mo index 54742d4bf7..50ea29d3f5 100644 Binary files a/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.po index dd56350d37..3938546a61 100644 --- a/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/bs_BA/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" @@ -19,51 +19,52 @@ msgstr "" "Language: bs_BA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenti" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Kreirajte tip dokumenta" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Svaki uploadovani dokument mora biti dodeljen tipu dokumenta, to je osnovni način koji Maian EDMS kategorizuje dokumente." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Thumbnail" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Stranice" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikati" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tip" @@ -79,7 +80,8 @@ msgstr "Ukupni dokumenti" msgid "Documents in trash" msgstr "Dokumenti u smeću" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipovi dokumenta" @@ -108,23 +110,27 @@ msgstr "Nova verzija je otpremljena" msgid "Document properties edited" msgstr "Karakteristike dokumenata izmenjene" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Tip dokumenta promenjen" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Verzija dokumenta se povukla" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokument je pregledan" @@ -187,7 +193,7 @@ msgstr "Nijedno" msgid "File encoding" msgstr "Kodiranje datoteka" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Veličina datoteke" @@ -199,12 +205,12 @@ msgstr "Postoji u pohrani" msgid "File path in storage" msgstr "Putanja dokumenta u pohrani" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Checksum" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Opseg stranice" @@ -227,196 +233,208 @@ msgid "" "document version correctly." msgstr "Uzima produžetak datoteke i pomera je do kraja imena datoteke koja omogućava operativne sisteme koji se oslanjaju na produžetak datoteka da bi ispravno otvorili preuzetu verziju dokumenta." -#: links.py:66 -msgid "Preview" -msgstr "Pregled" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Osobine" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Verzije" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Izbriši transformacije" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Kloniraj transformacije" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Obriši" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Pošalji u đubre" - -#: links.py:137 -msgid "Edit properties" -msgstr "Izmenite svojstva" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Izmjeni tip" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Print" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Izmenite svojstva" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Ponovo izračunajte broj stranica" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Vratiti" - -#: links.py:226 -msgid "Download version" -msgstr "Preuzmite verziju" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Detalji" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Svi dokumenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Kanta za smeće" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Pregled" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Obriši grafičku prezentaciju korištenu za ubrzanje prikaza dokumenata i interaktivnu transformaciju rezultata." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Osobine" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Obrišite cache memorije dokumenta" +#: links/document_links.py:96 +msgid "Print" +msgstr "Print" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Prazni smeće" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "" -#: links.py:287 -msgid "First page" -msgstr "Prva stranica" - -#: links.py:292 -msgid "Last page" -msgstr "Zadnja stranica" - -#: links.py:300 -msgid "Previous page" -msgstr "Prethodna stranica" - -#: links.py:306 -msgid "Next page" -msgstr "Sledeća stranica" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotirajte levo" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotirajte desno" - -#: links.py:327 -msgid "Page image" -msgstr "Slika za stranicu" - -#: links.py:332 -msgid "Reset view" -msgstr "Resetiraj prikaz" - -#: links.py:338 -msgid "Zoom in" -msgstr "Uveličaj" - -#: links.py:344 -msgid "Zoom out" -msgstr "Smanji" - -#: links.py:353 -msgid "Revert" -msgstr "Vraćaj" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Kreirajte tip dokumenta" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Obriši" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Urediti" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Dodajte brzi nalepnicu u tip dokumenta" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Brze etikete" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Verzije" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Preuzmite verziju" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detalji" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Vraćaj" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Prva stranica" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Zadnja stranica" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Prethodna stranica" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Sledeća stranica" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotirajte levo" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotirajte desno" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Slika za stranicu" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Resetiraj prikaz" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Uveličaj" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Smanji" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Ponovo izračunajte broj stranica" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Duplirani dokumenti" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Duplikat skeniranja dokumenata" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Pošalji u đubre" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Kanta za smeće" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Vratiti" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Prazni smeće" + +#: literals.py:32 msgid "Default" msgstr "default" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Sve stranice" @@ -430,7 +448,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -466,69 +484,56 @@ msgstr "" msgid "In trash?" msgstr "U smeće?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Datum i vreme uklonjeni" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Stub dokumenta je dokument sa unosom u bazu podataka, ali datoteka nije otpremljena. Ovo bi moglo biti prekinuto otpremanje ili odloženo otpremanje preko API-ja." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Da li je stub?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Dokument stub, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Verzija dokumenta" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Omogućeno" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Broj stranice" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Strnica dokumenta" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Dokumenti dokumenta" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Stranica %(page_num)d od ukupno %(total_pages)d u %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Datum vreme" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Naziv datoteke" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Dokumentna stranica sačuvana slika" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Dokumentirane stranice sa dokumentima" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -565,52 +570,48 @@ msgstr "Izbrišite vremensku jedinicu" msgid "Documents types" msgstr "Tipovi dokumenata" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Omogućeno" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Brza etiketa" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Vremenska oznaka" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentar" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Datoteka" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME tip" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Enkoding" @@ -654,7 +655,7 @@ msgstr "Obriši dokumente" msgid "Trash documents" msgstr "Dokumenti za otpatke" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Download dokumenata" @@ -746,115 +747,117 @@ msgstr "Proverite periode otpada dokumenta" msgid "Delete document stubs" msgstr "Obrišite ispravke dokumenata" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Obrišite keš memorije" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Ažurirajte broj stranice dokumenta" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Otpremite novu verziju dokumenta" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Onemogućava prvu tačku keša koja skladišti visoke rezolucije, nepreformirane verzije dokumenata." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Onemogućava drugi sloj keša koji čuva medije do niske rezolucije, transformiše (rotira, zumira, itd.) Verzije stranica dokumenata." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Otkrijte orijentaciju svake stranice dokumenta i kreirajte odgovarajuću transformaciju rotacije da biste je prikazali. Ovo je eksperimentalna funkcija i ona je podrazumevano onemogućena." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Podrazumevani jezik dokumenta (u formatu ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Lista podržanih jezika dokumenata. U formatu ISO639-3." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Iznos u stepenima za rotaciju stranice dokumenta po korisniku." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maksimalni dozvoljeni iznos u procentima (%) korisniku da zumira stranicu dokumenta." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimalni dozvoljeni iznos u procentima (%) po korisniku da zumira stranicu dokumenta." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Iznos u procentima zumiranja stranice dokumenta po korisničkoj sesiji." @@ -906,27 +909,27 @@ msgstr "Novembar" msgid "December" msgstr "Decembar" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Novi dokumenti mesečno" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nove verzije dokumenta mesečno" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nove stranice dokumenta mesečno" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Ukupni dokumenti svakog meseca" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Ukupne verzije dokumenata svakog meseca" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Ukupne stranice dokumenta svakog meseca" @@ -950,12 +953,12 @@ msgstr "Nema stranica za prikazivanje" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -963,28 +966,42 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Stranice za dokument: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Ovaj dokument nema više stranica." -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Već ste na prvoj stranici ovog dokumenta" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Slika od: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1084,189 +1101,204 @@ msgstr "Greška pri vraćanju verzije dokumenta; %s" msgid "Preview of document version: %s" msgstr "Pregled verzije dokumenta: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Zahtev za izmenu tipa dokumenta izvršen na dokumentu %(count)d" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Zahtev za izmenu vrste dokumenta izvršen na dokumentima %(count)d" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Promeni" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Promenite vrstu izabranog dokumenta" msgstr[1] "Promenite vrstu izabranih dokumenata" msgstr[2] "Promenite vrstu izabranih dokumenata" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Promijenite vrstu dokumenta: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Tip dokumenta za \"%s\" se uspešno promjenio." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Download" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplikati za dokument: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Izmenite svojstva dokumenta: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Pregled dokumenta: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Osobine za dokument: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d dokument stavljen u red za ponovni izračun broja stranica" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d dokumenti postavljeni redom za ponovni izračun broja stranica" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Ponovo izračunajte broj stranica izabranog dokumenta?" msgstr[1] "Ponovo izračunajte broj stranica izabranih dokumenata?" msgstr[2] "Ponovo izračunajte broj stranica izabranih dokumenata?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Ponovo izračunajte broj stranica dokumenta: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Zahtev za transformaciju obrađen za dokument %(count)d" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Zahtev za transformaciju obrađen za dokumente %(count)d" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Obrišite sve transformacije stranice za izabrani dokument?" msgstr[1] "Obrišite sve transformacije stranice za izabrani dokument?" msgstr[2] "Obrišite sve transformacije stranice za izabrani dokument?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Obrišite sve transformacije stranice za dokument: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Greška brisanja transformacija za dokument: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformacije su uspešno klonirane." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Podnijeti" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Transformacije stranica klonova za dokument: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Štampa: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplikati za dokument: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Skeniraj za duplirana dokumenta?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Duplirano skeniranje dokumenata je u redu." #: views/favorite_document_views.py:33 #, python-format @@ -1326,22 +1358,6 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Obrišite keš memorije dokumenta?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Uspjesno izbrisanje cache dokumenta " - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Skeniraj za duplirana dokumenta?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Duplirano skeniranje dokumenata je u redu." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/cs/LC_MESSAGES/django.mo index 543cb336cd..5c155a8de5 100644 Binary files a/mayan/apps/documents/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po b/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po index e1216112ee..c77f3ce72d 100644 --- a/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-22 18:57+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,51 +18,52 @@ msgstr "" "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:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenty" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Vytvořit typ dokumentu" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Každému nahranému dokumentu musí být přiřazen typ dokumentu, jedná se o základní způsob, jakým Mayan EDMS kategorizuje dokumenty." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Komentáře k verzím" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Verze kódování" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Verze mime type" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Časová značka verzí" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Náhled" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Strany" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikáty" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Typ" @@ -78,7 +79,8 @@ msgstr "Celkem dokumentů" msgid "Documents in trash" msgstr "Dokumenty v koši" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Typy dokumentů" @@ -107,23 +109,27 @@ msgstr "Nová verze byla nahrána" msgid "Document properties edited" msgstr "Vlastnosti dokumentu byly upraveny" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Typ dokumentu se změnil" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Typ dokumentu byl vytvořen" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Typ dokumentu byl upraven" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Dokument se vrátil k předchozí verzi" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokument zobrazen" @@ -186,7 +192,7 @@ msgstr "žádný" msgid "File encoding" msgstr "Kódování souborů" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Velikost souboru" @@ -198,12 +204,12 @@ msgstr "Existuje v úložišti" msgid "File path in storage" msgstr "Cesta k souboru v úložišti" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Kontrolní součet" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Rozsah stran" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "Vezme příponu souboru a přesune ji na konec názvu souboru, což umožní operačním systémům, které spoléhají na přípony souborů, aby správně stáhly verzi dokumentu." -#: links.py:66 -msgid "Preview" -msgstr "Náhled" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Vlastnosti" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Verze" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Vymazání transformací" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Klonování transformací" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Odstranit" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Oblíbené" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Přidat k oblíbeným" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Odstranit z oblíbených" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Přesunout do koše" - -#: links.py:137 -msgid "Edit properties" -msgstr "Upravit vlastnosti" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Změnit typ" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Pokročilé stahování" -#: links.py:155 -msgid "Print" -msgstr "Tisk" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Upravit vlastnosti" -#: links.py:160 -msgid "Quick download" -msgstr "Rychlé stažení" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Přepočítat počet stran" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Obnovit" - -#: links.py:226 -msgid "Download version" -msgstr "Stáhnout verzi" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Detail" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Všechny dokumenty" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Nedávno otevřeno" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Nedávno přidané" -#: links.py:264 -msgid "Trash can" -msgstr "Odpadkový koš" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Náhled" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Vymažte grafické znázornění použité k urychlení zobrazení dokumentů a výsledků interaktivních transformací." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Vlastnosti" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Vymazat mezipaměť obrázků dokumentu" +#: links/document_links.py:96 +msgid "Print" +msgstr "Tisk" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Prázdný koš" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Rychlé stažení" -#: links.py:287 -msgid "First page" -msgstr "První strana" - -#: links.py:292 -msgid "Last page" -msgstr "Poslední strana" - -#: links.py:300 -msgid "Previous page" -msgstr "Předchozí strana" - -#: links.py:306 -msgid "Next page" -msgstr "Další strana" - -#: links.py:318 -msgid "Rotate left" -msgstr "Otočit doleva" - -#: links.py:323 -msgid "Rotate right" -msgstr "Otočit doprava" - -#: links.py:327 -msgid "Page image" -msgstr "Obrázek stránky" - -#: links.py:332 -msgid "Reset view" -msgstr "Resetovat zobrazení" - -#: links.py:338 -msgid "Zoom in" -msgstr "Přiblížit" - -#: links.py:344 -msgid "Zoom out" -msgstr "Oddálit" - -#: links.py:353 -msgid "Revert" -msgstr "Vrátit" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Vytvořit dokument typu" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Odstranit" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Zásady mazání" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Editovat" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Přidejte k typu dokumentu rychlou jmenovku" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Rychlé jmenovky" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Verze" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Stáhnout verzi" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detail" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Vrátit" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "První strana" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Poslední strana" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Předchozí strana" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Další strana" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Otočit doleva" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Otočit doprava" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Obrázek stránky" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Resetovat zobrazení" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Přiblížit" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Oddálit" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Přepočítat počet stran" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Duplicitní dokumenty" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Skenování duplicitních dokumentů" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Oblíbené" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Přidat k oblíbeným" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Odstranit z oblíbených" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Přesunout do koše" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Odpadkový koš" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Obnovit" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Prázdný koš" + +#: literals.py:32 msgid "Default" msgstr "Výchozí" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Všechny strany" @@ -429,7 +447,7 @@ msgstr "UUID dokumentu, univerzálně jedinečné ID. Jedinečný identifikátor msgid "The name of the document." msgstr "Název dokumentu." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "Je tento dokument v koši, či není?" msgid "In trash?" msgstr "V koši?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Datum a čas serveru, kdy byl dokument přesunut do koše." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Datum a čas vyhození" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Útržek dokumentu je dokument s položkou v databázi, ale není nahrán žádný soubor. Může to být přerušené nahrávání nebo odložené nahrávání prostřednictvím rozhraní API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Je to útržek?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Útržek dokumentu, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Verze dokumentu" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Povoleno" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Číslo strany" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Strana dokumentu" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Stránky dokumentu" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Strana %(page_num)d z %(total_pages)d z %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Datum a čas" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Název souboru" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Obrázek dokumentu v mezipaměti" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Obrázky stran dokumentu v mezipaměti" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Název typu dokumentu." @@ -564,52 +569,48 @@ msgstr "Čsová jednotka smazání" msgid "Documents types" msgstr "Typy dokumentů" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Povoleno" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Rychlé jmenovky" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Datum a čas serveru, kdy byla zpracována verze dokumentu." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Časové razítko" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Volitelný krátký text popisující verzi dokumentu." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentář" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Soubor" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Mimetype souboru verze dokumentu. Typy MIME jsou standardním způsobem, jak popsat formát souboru, v tomto případě formát souboru dokumentu. Několik příkladů: „text / plain“ nebo „image / jpeg“." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Typ MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Kódování souboru verze dokumentu. binární 7bitové, binární 8bitové, textové, base64 atd." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kódování" @@ -653,7 +654,7 @@ msgstr "Odstranit dokumenty" msgid "Trash documents" msgstr "Dokumenty koše" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Stáhněte si dokumenty" @@ -745,115 +746,117 @@ msgstr "Zkontrolujte periody koše typu dokumentu" msgid "Delete document stubs" msgstr "Odstranění útržků dokumentu" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Vymazat mezipaměť obrázků" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Aktualizujte počet stránek dokumentu" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Nahrajte novou verzi dokumentu" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Sken dplicitních dokumentů" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Cesta k podtřídě Úložiště, která se použije při ukládání obrazových souborů dokumentů v mezipaměti." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argumenty k předání do DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Zakáže první vrstvu mezipaměti, která ukládá netransformované verze stránek dokumentů s vysokým rozlišením." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Zakáže druhou vrstvu mezipaměti, která ukládá střední až nízké rozlišení, transformované (otočené, zvětšené atd.) Verze stránek dokumentů." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Maximální počet oblíbených dokumentů, na uživatele" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Zjistěte orientaci každé ze stránek dokumentu a vytvořte odpovídající rotační transformaci, aby se zobrazila napravo. Toto je experimentální funkce a ve výchozím nastavení je deaktivována." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Velikost bloků, které se mají použít při výpočtu kontrolního součtu souboru dokumentu. Hodnota 0 zakáže výpočet bloku a celý soubor bude načten do paměti." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Výchozí jazyk dokumentů (ve formátu ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Seznam podporovaných jazyků dokumentů. Ve formátu ISO639-3." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Čas v sekundách, který má prohlížeč ukládat do mezipaměti dodané obrázky dokumentů. Výchozí hodnota 31559626 sekund odpovídá 1 roku." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Maximální počet nedávno zpřístupněných (vytvořených, upravených, zobrazených) dokumentů, na uživatele." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Maximální počet nedávno vytvořených dokumentů k zobrazení." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Částka ve stupních pro otočení stránky dokumentu na interakci uživatele." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Cesta k podtřídě Úložiště, která se použije při ukládání souborů dokumentů." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argumenty k předání do DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Výška obrázku v náhledech obrázku v pixelech." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maximální částka v procentech (%), která uživateli umožňuje interaktivně přibližovat stránku dokumentu." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimální částka v procentech (%) umožňující uživateli interaktivně oddálit stránku dokumentu." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Částka v procentech přiblížení nebo oddálení stránky dokumentu na interakci uživatele." @@ -905,27 +908,27 @@ msgstr "listopad" msgid "December" msgstr "prosinec" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nové dokumenty za měsíc" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nové verze dokumentů za měsíc" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nové stránky dokumentu za měsíc" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Celkem dokumentů za každý měsíc" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Celkem verze dokumentů v každém měsíci" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Celkový počet stránek dokumentu v každém měsíci" @@ -949,12 +952,12 @@ msgstr "Žádné stránky k zobrazení" msgid "Document image" msgstr "Obrázek dokumentu" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Neznámý jazyk "%s"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,44 @@ msgid "" "again." msgstr "To by mohlo znamenat, že dokument je ve formátu, který není podporován, že je poškozen, nebo že byl proces nahrávání přerušen. Pokuste se znovu zjistit počet stránek pomocí akce přepočítání stránky dokumentu." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Nejsou k dispozici žádné stránky dokumentu" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Strany pro dokument: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "V tomto dokumentu nejsou žádné další stránky" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Jste již na první straně tohoto dokumentu" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Obrázek: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,37 +1102,37 @@ msgstr "Při vrácení verze dokumentu došlo k chybě; %s" msgid "Preview of document version: %s" msgstr "Náhled verze dokumentu: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Chyba při načítání seznamu dokumentů: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "To by mohlo znamenat, že nebyly nahrány žádné dokumenty nebo že váš uživatelský účet nezískal oprávnění k zobrazení pro jakýkoli dokument nebo typ dokumentu." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Nejsou k dispozici žádné dokumenty" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Žádost o změnu typu dokumentu provedená v dokumentu %(count)d" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Žádost o změnu typu dokumentu provedená na dokumentech %(count)d" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Změna" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Změňte typ vybraného dokumentu" @@ -1121,59 +1140,46 @@ msgstr[1] "Změňte typ vybraných dokumentů" msgstr[2] "Změňte typ vybraných dokumentů" msgstr[3] "Změňte typ vybraných dokumentů" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Změňte typ dokumentu: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Typ dokumentu pro "%s" byl úspěšně změněn." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Stažení" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "V tomto seznamu se zobrazí pouze přesné kopie tohoto dokumentu." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Pro tento dokument nejsou duplikáty" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplikáty dokumentu: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Upravit vlastnosti dokumentu: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Náhled dokumentu: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Vlastnosti dokumentu: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "dokument %(count)d zařazený do fronty pro přepočet počtu stránek" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d dokumenty zařazené do fronty pro přepočet počtu stránek" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Přepočítat počet stránek vybraného dokumentu?" @@ -1181,29 +1187,29 @@ msgstr[1] "Přepočítat počet stránek vybraných dokumentů?" msgstr[2] "Přepočítat počet stránek vybraných dokumentů?" msgstr[3] "Přepočítat počet stránek vybraných dokumentů?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Přepočítat počet stránek dokumentu: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Dokument „%(document)s“ je prázdný. Před pokusem zjistit počet stránek nahrajte alespoň jednu verzi dokumentu." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Žádost o smazání transformací zpracovaná pro dokument %(count)d" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Žádost o smazání transformací zpracovaná pro dokumenty %(count)d" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Vymazat všechny transformace stránky pro vybraný dokument?" @@ -1211,64 +1217,92 @@ msgstr[1] "Vymazat všechny transformace stránky pro vybraný dokument?" msgstr[2] "Vymazat všechny transformace stránky pro vybraný dokument?" msgstr[3] "Vymazat všechny transformace stránky pro vybraný dokument?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Vymazat všechny transformace stránky pro dokument: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Chyba při odstraňování transformací stránky pro dokument: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformace byly úspěšně klonovány." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Odeslat" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Klonování transformací stránky pro dokument: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Tisk: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "V tomto zobrazení budou uvedeny nejnovější dokumenty, které byly tímto uživatelským účtem jakýmkoli způsobem prohlíženy nebo jakýmkoli jiným způsobem manipulovány." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Neexistují žádné nedávno prohlédnuté dokumenty" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "V tomto zobrazení se zobrazí nejnovější dokumenty nahrané do systému." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Neexistují žádné nedávno přidané dokumenty" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "V tomto seznamu se zobrazí pouze přesné kopie tohoto dokumentu." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Pro tento dokument nejsou duplikáty" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplikáty dokumentu: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Duplikáty jsou dokumenty, které se skládají ze stejného souboru, až po poslední bajt. Soubory, které mají stejný text nebo OCR, ale nejsou totožné nebo byly uloženy pomocí jiného formátu souboru, se nebudou zobrazovat jako duplikáty." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Nejsou žádné duplicitní dokumenty" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "V tomto zobrazení budou uvedeny nejnovější dokumenty, které byly tímto uživatelským účtem jakýmkoli způsobem prohlíženy nebo jakýmkoli jiným způsobem manipulovány." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Hledáte duplicitní dokumenty?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Neexistují žádné nedávno prohlédnuté dokumenty" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "V tomto zobrazení se zobrazí nejnovější dokumenty nahrané do systému." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Neexistují žádné nedávno přidané dokumenty" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Skenování duplicitních dokumentů bylo úspěšně zařazeno do fronty." #: views/favorite_document_views.py:33 #, python-format @@ -1330,22 +1364,6 @@ msgstr[1] "Odeberte vybrané dokumenty z oblíbených" msgstr[2] "Odeberte vybrané dokumenty z oblíbených" msgstr[3] "Odeberte vybrané dokumenty z oblíbených" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Vymazat mezipaměť obrázků dokumentu?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Vymazání mezipaměti dokumentů bylo úspěšně zařazeno do fronty." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Hledáte duplicitní dokumenty?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Skenování duplicitních dokumentů bylo úspěšně zařazeno do fronty." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.mo index 71fd77e853..b577385303 100644 Binary files a/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.po index 41d58df3b8..a8fe51fcb9 100644 --- a/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/da_DK/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenter" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Sider" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Type" @@ -78,7 +79,8 @@ msgstr "Antal dokumenter" msgid "Documents in trash" msgstr "Dokumenter i skraldespand" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Dokumenttyper" @@ -107,23 +109,27 @@ msgstr "Ny version uploaded" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -186,7 +192,7 @@ msgstr "Ingen" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Filstørrelse" @@ -198,12 +204,12 @@ msgstr "" msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versioner" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Slet" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Flyt til skraldespand" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Skift type" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Print" - -#: links.py:160 -msgid "Quick download" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Genskab" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Detaljer" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Alle dokumenter" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Skraldespand" - -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Tøm skraldespand" +#: links/document_links.py:96 +msgid "Print" +msgstr "Print" -#: links.py:287 -msgid "First page" -msgstr "Første side" - -#: links.py:292 -msgid "Last page" -msgstr "Sidste side" - -#: links.py:300 -msgid "Previous page" -msgstr "Forrige side" - -#: links.py:306 -msgid "Next page" -msgstr "Næste side" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotér til venstre" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotér til højre" - -#: links.py:327 -msgid "Page image" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "Zoom ind" - -#: links.py:344 -msgid "Zoom out" -msgstr "Zoom ud" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Slet" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Rediger" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versioner" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detaljer" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Første side" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Sidste side" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Forrige side" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Næste side" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotér til venstre" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotér til højre" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Zoom ind" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Zoom ud" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Flyt til skraldespand" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Skraldespand" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Genskab" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Tøm skraldespand" + +#: literals.py:32 msgid "Default" msgstr "Standard" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Alle sider" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "I skraldespand?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Dokumentversion" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Side nummer" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Dokumentside" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Dokumentsider" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Filnavn" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "" msgid "Documents types" msgstr "Dokumenttyper" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Fil" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -653,7 +654,7 @@ msgstr "Slet dokumenter" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Download dokumenter" @@ -745,115 +746,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "" -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "" @@ -905,27 +908,27 @@ msgstr "November" msgid "December" msgstr "December" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nye dokumenter pr måned" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nye dokumentversioner pr måned" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nye dokumentsider pr måned" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Antal dokumenter for hver måned" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Antal dokumentversioner for hver måned" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Antal dokumentsider for hver måned" @@ -949,12 +952,12 @@ msgstr "Ingen sider at vise" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Sider i dokument: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Der er ikke flere sider i dette dokument" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Du er allerede på første side i dokumentet" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,185 +1098,200 @@ msgstr "" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Skift" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Download" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Indsend" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Print %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.mo index 0d4aaad616..dd4933ef33 100644 Binary files a/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po index 22978acd66..d9a7c2ebfb 100644 --- a/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-08 11:14+0000\n" -"Last-Translator: Marvin Haschker \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,51 +25,52 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumente" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Dokumententyp erstellen" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Jedes hochgeladene Dokument muss einen Dokumententyp zugewiesen bekommen, da Mayan EDMS Dokumente auf der Grundlage von Dokumententypen kategorisiert." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Versionskommentar" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Versionskodierung" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Versions-MIME-Typ" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Versionszeitstempel" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniaturbild" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Seiten" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikate" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Typ" @@ -85,7 +86,8 @@ msgstr "Alle Dokumente" msgid "Documents in trash" msgstr "Dokumente im Papierkorb" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Dokumententypen" @@ -114,23 +116,27 @@ msgstr "Neue Dokumentenversion hochgeladen" msgid "Document properties edited" msgstr "Dokumenteneigenschaften bearbeitet" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Dokumententyp geändert" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Dokumententyp erstellt" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Dokumententyp bearbeitet" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Dokumentenversion wurde erfolgreich wiederhergestellt" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokument angezeigt" @@ -193,7 +199,7 @@ msgstr "Keine" msgid "File encoding" msgstr "Dateikodierung" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Dateigröße" @@ -205,12 +211,12 @@ msgstr "Im Dateispeicher" msgid "File path in storage" msgstr "Pfad im Dateispeicher" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Prüfsumme" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Seitenbereich" @@ -233,196 +239,208 @@ msgid "" "document version correctly." msgstr "Setzt die Dateierweiterung an das Ende des Dateinamens. Dies erlaubt es Betriebssystemen, die Dateierweiterungen für die Verarbeitung benötigen, das heruntergeladene Dokument korrekt zu öffnen." -#: links.py:66 -msgid "Preview" -msgstr "Vorschau" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Eigenschaften" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versionen" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Transformationen löschen" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Transformationen übernehmen" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Löschen" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Favoriten" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Zu Favoriten hinzufügen" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Aus Favoriten entfernen" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "In den Papierkorb verschieben" - -#: links.py:137 -msgid "Edit properties" -msgstr "Eigenschaften bearbeiten" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Typ ändern" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Erweiterte Downloadoptionen" -#: links.py:155 -msgid "Print" -msgstr "Drucken" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Eigenschaften bearbeiten" -#: links.py:160 -msgid "Quick download" -msgstr "Schnelldownload" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Seitenzählung korrigieren" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Wiederherstellen" - -#: links.py:226 -msgid "Download version" -msgstr "Version herunterladen" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Details" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Alle Dokumente" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Kürzlich abgerufen" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Zuletzt hinzugefügt" -#: links.py:264 -msgid "Trash can" -msgstr "Papierkorb" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Vorschau" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Grafiken löschen, die benutzt werden um die Dokumentendarstellung und interaktive Transformationsausgabe zu beschleunigen." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Eigenschaften" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Dokumentenbildercache löschen" +#: links/document_links.py:96 +msgid "Print" +msgstr "Drucken" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Papierkorb leeren" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Schnelldownload" -#: links.py:287 -msgid "First page" -msgstr "Erste Seite" - -#: links.py:292 -msgid "Last page" -msgstr "Letzte Seite" - -#: links.py:300 -msgid "Previous page" -msgstr "Vorherige Seite" - -#: links.py:306 -msgid "Next page" -msgstr "Nächste Seite" - -#: links.py:318 -msgid "Rotate left" -msgstr "Nach links drehen" - -#: links.py:323 -msgid "Rotate right" -msgstr "Nach rechts drehen" - -#: links.py:327 -msgid "Page image" -msgstr "Seitenbild" - -#: links.py:332 -msgid "Reset view" -msgstr "Ansicht zurücksetzen" - -#: links.py:338 -msgid "Zoom in" -msgstr "Ansicht vergößern" - -#: links.py:344 -msgid "Zoom out" -msgstr "Ansicht verkleinern" - -#: links.py:353 -msgid "Revert" -msgstr "Wiederherstellen" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Dokumententypen erstellen" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Löschen" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Löschungsrichtlinien" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Bearbeiten" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Schnellbezeichner zu Dokumententyp hinzufügen" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Schnellbezeichner" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versionen" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Version herunterladen" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Details" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Wiederherstellen" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Erste Seite" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Letzte Seite" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Vorherige Seite" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Nächste Seite" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Nach links drehen" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Nach rechts drehen" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Seitenbild" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Ansicht zurücksetzen" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Ansicht vergößern" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Ansicht verkleinern" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Seitenzählung korrigieren" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Duplikate" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Duplikatsuche" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Favoriten" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Zu Favoriten hinzufügen" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Aus Favoriten entfernen" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "In den Papierkorb verschieben" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Papierkorb" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Wiederherstellen" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Papierkorb leeren" + +#: literals.py:32 msgid "Default" msgstr "Standard" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Alle Seiten" @@ -436,7 +454,7 @@ msgstr "UUID des Dokuments. Eine eindeutige Identifikation für jedes Dokument." msgid "The name of the document." msgstr "Name des Dokuments." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -472,69 +490,56 @@ msgstr "Unabhängig davon, ob dieses Dokument im Papierkorb ist." msgid "In trash?" msgstr "Im Papierkorb?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Datum und Uhrzeit, zu dem das Dokument in den Papierkorb verschoben wurde." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Zeitpunkt der Löschung" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Ein Fragment ist ein Dokument mit einem Eintrag in der Datenbank, für das keine Datei hochgeladen wurde. Die Ursache könnte ein fehlgeschlagener Uploadvorgang sein oder ein verzögerter Upload über die API-Schnittstelle." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Inkomplett" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Fragment, ID: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Dokumentenversion" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Aktiviert" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Seitennummer" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Dokumentenseite" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Dokumentenseiten" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Seite %(page_num)d von %(total_pages)d des Dokuments %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Datum & Zeit" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Dateiname" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Zwischengespeichertes Bild für Dokumentenseite" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Zwischengespeicherte Bilder für Dokumentenseite" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Name des Dokumententyps." @@ -571,52 +576,48 @@ msgstr "Einheit (Löschen)" msgid "Documents types" msgstr "Dokumententypen" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Aktiviert" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Schnellbezeichner" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Serverdatum und -zeit der Verarbeitung der Dokumentenversion." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Zeitstempel" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Ein optionaler kurzer Text, der die Dokumentenversion beschreibt." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Kommentar" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Datei" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Der MIME-Typ der Datei der Dokumentenversion. MIME-Typen sind eine standardisierte Art zur Beschreibung des Dateiformats, in diesem Fall des Dokuments. Besipiele: \"text/plain\" oder \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME Typ" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Die Kodierung der Datei der Dokumentenversion. binary 7-bit, binary 8-bit, text, base64, etc." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kodierung" @@ -660,7 +661,7 @@ msgstr "Dokumente löschen" msgid "Trash documents" msgstr "Dokumente in den Papierkorb verschieben" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Dokumente herunterladen" @@ -752,115 +753,117 @@ msgstr "Zeiträume für Paperkörbe für Dokumententyp prüfen" msgid "Delete document stubs" msgstr "Dokumentenfragmente löschen" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Bildercache löschen" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Dokumentenseitenzahl aktualisieren" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Neue Dokumentenversion hochladen" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Duplikate scannen" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Pfad zu der Speicherklasse für die Speicherung des Bildercaches." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argumente, die an das DOCUMENT_CACHE_STORAGE_BACKEND weitergeleitet werden." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Deaktiviert die erste Cache-Ebene, die für die Speicherung der hochauflösenden, nicht transformierten Versionen von Dokumentenseiten zuständig ist." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Deaktiviert die zweite Cache-Ebene, die für die Speicherung der mittel- und niedrigauflösenden, transformierten (gedeht, gezoomt, etc.) Versionen von Dokumentenseiten zuständig ist." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Maximale Anzahl von Favoriten pro Benutzer." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Erkennung der Ausrichtung von Dokumentenseiten und Erstellung einer entsprechenden Rotationstransformation, um die Seite in der korrekten Ausrichtung anzuzeigen. Dies ist eine experimentelle Eigenschaft, weshalb sie standardmäßig deaktiviert ist." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Blockgröße die für die Berechnung der Dokumentenprüfsumme verwendet wird. Der Wert 0 verhindert die Berücksichtigung von Blöcken und das gesamte Dokument wird in den Speicher geladen." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Standarddokumentensprache (in ISO639-3 Format)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Liste der unterstützten Dokumentensprachen. In ISO639-3 Format." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Zeit in Sekunden, die der Browser die übermittelten Dokumentengraphiken im Cache speichern sollte. Der Standard von 31559626 Sekunden entspricht 1 Jahr." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Maximale Anzahl der letztens zugegriffenen (erstellten, bearbeiteten, angesehenen) Dokumente, die pro Benutzer gemerkt werden sollen." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Maximale Anzahl der letztens erstellten Dokumente, die angezeigt werden soll." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Gradzahl, die ein Dokument pro Benutzer Aktion gedreht wird." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Pfad zur Speicher-Unterklasse (Storage subclass) für die Speicherung der Dokumentendateien." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argumente, die an das DOCUMENT_STORAGE_BACKEND übergeben werden sollen." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Höhe des Dokumentenminiaturbilds (Thumbnail) in Pixeln." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maximaler erlaubter Zoom in %, den Benutzer interaktiv wählen können." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimaler erlaubter Zoom in %, den Benutzer interaktiv wählen können." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Betrag in Prozent für Ansicht vergrößern/verkleinern pro Benutzer Aktion." @@ -912,27 +915,27 @@ msgstr "November" msgid "December" msgstr "Dezember" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Neue Dokumente pro Monat" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Neue Dokumentenversionen pro Monat" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Neue Dokumentenseiten pro Monat" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Summe der Dokumente im Monat" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Summe der Dokumentenversionen im Monat" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Summe der Dokumentenseiten im Monat" @@ -956,12 +959,12 @@ msgstr "Keine Seiten für die Anzeige vorhanden" msgid "Document image" msgstr "Dokumentbild" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Unbekannte Sprache \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -969,28 +972,40 @@ msgid "" "again." msgstr "Das könnte bedeuten, dass das Format des Dokuments nicht unterstützt ist, dass es beschädigt ist oder dass der Uploadpozess unterbrochen wurde. Verwenden Sie die Neuberechnung der Seitenzahl für einen Aktualisierungsversuch." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Keine Dokumentenseiten verfügbar" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Seiten des Dokuments: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Keine weiteren Seiten in diesem Dokument" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Sie sind bereits auf der ersten Seite dieses Dokuments" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Seitenbild für %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1090,186 +1105,201 @@ msgstr "Fehler beim Wiederherstellen der Dokumentenversion %s" msgid "Preview of document version: %s" msgstr "Vorschau von Dokumentenversion %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Fehler bei der Erzeugung der Dokumentenliste: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Das könnte bedeuten, dass keine Dokumente hochgeladen wurden oder dass Ihr Benutzerkonto nicht die notwendigen Berechtigungen hat, um Dokumente oder Dokumententypen anzusehen." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Keine Dokumente vorhanden" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Dokumententyp geändert für %(count)d Dokument" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Dokumententyp geändert für %(count)d Dokumente" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Ändern" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Typ des ausgewählten Dokuments ändern" msgstr[1] "Typ der ausgewählten Dokumente ändern" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Typ ändern für Dokument: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Dokumententyp für \"%s\" erfolgreich geändert." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Herunterladen" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Nur exakte Kopien dieses Dokuments werden in dieser Liste angezeigt." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Keine Duplikate für dieses Dokument vorhanden" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplikate für Dokument %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Eigenschaften von Dokument \"%s\" bearbeiten" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Vorschau von Dokument %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Eigenschaften von Dokument %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d Dokument vorgemerkt für Neuberechnung der Seitenzahl" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d Dokumente vorgemerkt für Neuberechnung der Seitenzahl" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Seitenzahl des ausgewählten Dokuments neu berechnen?" msgstr[1] "Seitenzahl der ausgewählten Dokumente neu berechnen?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Seitenzahl neu berechnen für Dokument: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Dokument \"%(document)s\" hat keinen Inhalt. Laden Sie wenigstens eine Dokumentenversion hoch, bevor Sie versuchen die Seitenzahl zu ermitteln." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Transformation für %(count)d Dokument gelöscht" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Transformation für %(count)d Dokumente gelöscht" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Alle Seitentransformationen für das ausgewählte Dokument löschen?" msgstr[1] "Alle Seitentransformationen für die ausgewählten Dokumente löschen?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Transformationen zurücksetzen für Dokument: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Fehler beim Löschen der Seitentransformation von %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformationen erfolgreich kopiert." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Ändern" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Kopieren der Seiten-Transformationen für Dokument: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "%s drucken" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Diese Sicht zeigt die letzten in diesem Benutzerkonto angesehenen oder irgendwie bearbeiteten Bilder." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Keine zuletzt benutzten Dokumente vorhanden" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Diese Sicht listet die letzten in das System hochgeladenen Dokumente." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Keine zuletzt hinzugefügten Dokumente vorhanden" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Nur exakte Kopien dieses Dokuments werden in dieser Liste angezeigt." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Keine Duplikate für dieses Dokument vorhanden" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplikate für Dokument %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Duplikate sind Dokumente, die von exakt derselben (byte-identischen) Datei stammen. Dateien mit demselben Text oder OCR-Ergebnis, aber mit nicht exakt identischer Ursprungsdatei oder einem unterschiedlichen Speicherformat werden nicht als Duplikate geführt." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Keine Duplikate vorhanden" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Diese Sicht zeigt die letzten in diesem Benutzerkonto angesehenen oder irgendwie bearbeiteten Bilder." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Nach Duplikaten suchen?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Keine zuletzt benutzten Dokumente vorhanden" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Diese Sicht listet die letzten in das System hochgeladenen Dokumente." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Keine zuletzt hinzugefügten Dokumente vorhanden" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Duplikatsuche erfolgreich in die Warteschlange eingestellt." #: views/favorite_document_views.py:33 #, python-format @@ -1327,22 +1357,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "Ausgewähltes Dokument aus den Favoriten entfernen" msgstr[1] "Ausgewählte Dokumente aus den Favoriten entfernen" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Dokumentenbildercache löschen?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Löschung des Dokumentenbildcaches erfolgreich eingereiht." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Nach Duplikaten suchen?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Duplikatsuche erfolgreich in die Warteschlange eingestellt." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/el/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/el/LC_MESSAGES/django.mo index fcd198b53a..5ed4786821 100644 Binary files a/mayan/apps/documents/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/el/LC_MESSAGES/django.po b/mayan/apps/documents/locale/el/LC_MESSAGES/django.po index 2e0cd47c78..66dd38804b 100644 --- a/mayan/apps/documents/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/el/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Έγγραφα" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Δημιουργία τύπου εγγράφου" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Σε κάθε έγγραφο που ανεβάσατε πρέπει να ανατεθεί ένας τύπος εγγράφου. Αυτός είναι ο βασικός τρόπος κατηγοριοποίησης που χρησιμοποιεί το Mayan ΕDMS " -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Μικρογραφία" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Σελίδες" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Αντίγραφα" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Τύπος" @@ -78,7 +79,8 @@ msgstr "Σύνολο εγγράφων" msgid "Documents in trash" msgstr "Έγγραφα στα απορρίμματα" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Τύποι εγγράφων" @@ -107,23 +109,27 @@ msgstr "Ανεβασμένες εκδόσεις εγγράφων" msgid "Document properties edited" msgstr "Τροποποιημένες ιδιότητες εγγράφων" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Αλλαγές τύπου εγγράφων" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Επαναφορές εκδόσεων εγγράφων" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Παρουσιάσεις εγγράφων" @@ -186,7 +192,7 @@ msgstr "Κανένα" msgid "File encoding" msgstr "Κωδικοποίηση του αρχείου" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Μέγεθος του αρχείου" @@ -198,12 +204,12 @@ msgstr "Υπάρχει στον χώρο αποθήκευσης" msgid "File path in storage" msgstr "Διαδρομή αρχείου στον χώρο αποθήκευσης" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Εύρος σελίδων" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "Μεταφέρει την επέκταση του αρχείου στο τέλος ώστε λειτουργικά συστήματα που χρειάζονται την επέκταση να διαχειρίζονται το αρχείο σωστά." -#: links.py:66 -msgid "Preview" -msgstr "Προεπισκόπηση" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Ιδιότητες" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Εκδόσεις" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Καθαρισμός μετασχηματισμών" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Αντιγραφή μετασχηματισμών" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Διαγραφή" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Μετφορά στα απορρίμματα" - -#: links.py:137 -msgid "Edit properties" -msgstr "Τροποποίηση ιδιοτήτων" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Αλλαγή τύπου" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Εκτύπωση" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Τροποποίηση ιδιοτήτων" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Επανυπολογισμός αριθμού σελίδψν" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Επαναφορά" - -#: links.py:226 -msgid "Download version" -msgstr "Κατέβασμα έκδοσης" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Έγγραφο" - -#: links.py:245 -msgid "Details" -msgstr "Λεπτομέρειες" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Όλα τα έγγραφα" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Απορρίμματα" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Προεπισκόπηση" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Καθαριμός της γραφικής απεικόνισης που χρησιμοποιείται για την ταχύτερη εμφάνιση εγγράφων και των αποτελεσμάτων μετασχηματισμών." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Ιδιότητες" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Καθαρισμός μνήμης εικόνων των εγγράφων" +#: links/document_links.py:96 +msgid "Print" +msgstr "Εκτύπωση" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Καθαρισμός απορριμμάτων" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "" -#: links.py:287 -msgid "First page" -msgstr "Πρώτη σελίδα" - -#: links.py:292 -msgid "Last page" -msgstr "Τελευταία σελίδα" - -#: links.py:300 -msgid "Previous page" -msgstr "Προηγούμενη σελίδα" - -#: links.py:306 -msgid "Next page" -msgstr "Επόμενη σελίδα" - -#: links.py:318 -msgid "Rotate left" -msgstr "Περιστροφή αριστερά" - -#: links.py:323 -msgid "Rotate right" -msgstr "Περιστροφή δεξιά" - -#: links.py:327 -msgid "Page image" -msgstr "Εικόνα σελίδας" - -#: links.py:332 -msgid "Reset view" -msgstr "Επαναφορά εμφάνησης" - -#: links.py:338 -msgid "Zoom in" -msgstr "Μεγένθυνση" - -#: links.py:344 -msgid "Zoom out" -msgstr "Σμίκρυνση" - -#: links.py:353 -msgid "Revert" -msgstr "Επαναφορά" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Δημιουργία τύπου εγγράφου" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Διαγραφή" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Τροποποίηση" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Προσθήκη γρήγορης ετικέτας στον τύπο εγγράφου" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Γρήγορες ετικέτες" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Εκδόσεις" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Κατέβασμα έκδοσης" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Έγγραφο" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Λεπτομέρειες" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Επαναφορά" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Πρώτη σελίδα" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Τελευταία σελίδα" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Προηγούμενη σελίδα" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Επόμενη σελίδα" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Περιστροφή αριστερά" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Περιστροφή δεξιά" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Εικόνα σελίδας" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Επαναφορά εμφάνησης" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Μεγένθυνση" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Σμίκρυνση" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Επανυπολογισμός αριθμού σελίδψν" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Διπλο-καταχωρημένα έγγραφα" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Ανίχνευση για διπλές καταχωρήσεις εγγράφων" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Μετφορά στα απορρίμματα" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Απορρίμματα" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Επαναφορά" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Καθαρισμός απορριμμάτων" + +#: literals.py:32 msgid "Default" msgstr "Προκαθορισμένο" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Όλες οι σελίδες" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "Στα απορρίμματα;" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Ημερομηνία και ώρα μεταφοράς στα απορρίμματα" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Απομεινάρι είναι ένα έγγραφο για το οποίο υπάρχει καταχώρηση στην βάση δεδομένων αλλά δεν υπάρχει το έγγραφο καθεαυτό. Αυτό μπορεί να συμβεί αν η μεταφόρτωση/ανέβασμα έχει διακοπεί ή αν έγινε καταχώρηση του εγγράφου μέσω API και θα μεταφορτωθεί αργότερα." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Είναι απομεινάρι;" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Απομεινάρι εγγράφου, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Έκδοση εγγράφου" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Αριθμός σελίδας" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Σελίδα εγγράφου" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Σελίδες εγγράφου" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Σελίδα %(page_num)d από %(total_pages)d από %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Ηερομηνία ώρα" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Όνομα αρχείου" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Αρχειοθετημένη εικόνα σελίδας εγγράφου" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Αρχειοθετημένες εικόνες σελίδας εγγράφου" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "Μονάδα μέτρησης χρόνου διαγραφής" msgid "Documents types" msgstr "Τύποι εγγράφων" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Ενεργοποιημένο" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Γρήγορη ετικέτα" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Σχόλιο" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Αρχείο" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Τύπος ΜΙΜΕ" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Κωδικοποίηση" @@ -653,7 +654,7 @@ msgstr "Διαγραφή εγγράφων" msgid "Trash documents" msgstr "Μεταφορά εγγράφων στα απορρίμματα" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Κατέβασμα εγγράφων" @@ -745,115 +746,117 @@ msgstr "Έλεγχος χρόνων μεταφοράς εγγράφων στα msgid "Delete document stubs" msgstr "Διαγραφή απομειναριών" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Κθαρισμός μνήμης εικόνων" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Ενημέρωση αριθμού σελίδων εγγράφου" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Μεταφόρτωση/ανέβασμα νέας έκδοσης εγγράφου" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Απενεργοποιεί το πρώτο επίπεδο μνήμης όπου αποθηκεύονται σελίδες εγγράφων μεγάλης ανάλυσης που δεν έχουν ετασχηματιστεί." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Απενεργοποιεί το δεύτερο επίπεδο μνήμης όπου αποθηκεύονται εκδόσεις σελίδων εγγράφων μεσαίας και μικρής ανάλυσης, μετασχηματισμένες (με περιστροφή, ζουμαρισμένες, κλπ)" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Αριθμός μοιρών για περιστροφή μιας σελίδας εγγράφου από τον χρήστη ανά αλληλεπίδραση" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Μέγιστο επιτρεπτό ποσοστό (%) μεγένθυνσης σε μια σελίδα από τονχρήστη." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Ελλάχιστο επιτρεπτό ποσοστό (%) σμύκρινσης σε μια σελίδα από τονχρήστη." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Βαθμός μεγένθυνσης / σμύκρινσης σε μια σελίδα εγγράφου ανά χρήστη." @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Νέα έγγραφα τον μήνα" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Νέες εκδόσεις εγγράφων τον μήνα" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Νέες σελίδες εγγράφων τον μήνα" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Σϋνολο εγγράφων κάθε μήνα" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Σύνολο εκδόσεων εγγράφων κάθε μήνα" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Σύνολο σελίδων εγγράφων κάθε μήνα" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Σελίδες για έγγραφο: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Το έγγραφο δεν έχει άλλες σελίδες" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Βρίσκεστε ήδη στην πρώτη σελίδα του εγγράφου" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Εικόνα του: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,186 +1098,201 @@ msgstr "Σφάλμα κατά την επαναφορά στην έκδοση ε msgid "Preview of document version: %s" msgstr "Προεπισκόπηση της έκδοσης εγγράφου: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Πραγματοποιήθηκε αλλαγή τύπου εγγράφου για %(count)d έγραφο" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Πραγματοποιήθηκε αλλαγή τύπου εγγράφου για %(count)d έγραφα" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Αλλαγή" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Αλλαγή τύπου του επιλεγμένου έγγραφο" msgstr[1] "Αλλαγή τύπου των επιλεγμένων εγγράφων" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Αλλαγή τύπου του εγγράφου: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Αλλαγή τύπου εγγράφου για το \"%s\" πραγματοποιήθηκε με επιτυχία." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Κατέβασμα" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Διπλότυπα του εγγράφου: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Τροποποίηση ιδιοτήτων του εγγράφου: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Προεπισκόπηση του εγγράφου: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Ιδιότητες για το έγγραφο: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d έγγραφο στην λίστα για επανυπολογισμό αριθμού σελίδων" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d έγγραφα στην λίστα για επανυπολογισμό αριθμού σελίδων" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Επανυπολογισμός των σελίδων του επιλεγμένου εγγράφου;" msgstr[1] "Επανυπολογισμός των σελίδων των επιλεγμένων εγγράφων;" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Επανυπολογισμός του αριθμού σελίδων του εγγράφου: %s;" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Αίτημα καθαρισμού μετασχηματισμών ολοκληρώθηκε για %(count)d έγγραφο" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Αίτημα καθαρισμού μετασχηματισμών ολοκληρώθηκε για %(count)d έγγραφα" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Καθαρισμός όλων των μετασχηματισμών σελίδας για το επιλεγμένο έγγραφο: %s;" msgstr[1] "Καθαρισμός όλων των μετασχηματισμών σελίδας για τα επιλεγμένα έγγραφα: %s;" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Καθαρισμός όλων των μετασχηματισμών σελίδας για το έγγραφο: %s;" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Σφάλμα κατά την διαγραφή των μετασχηματισμών σελίδας για το έγγραφο: %(document)s, %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Ο μετασχηματισμός αντιγράφτηκε με επιτυχία." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Υποβολή" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Αντιγραφή μετασχηματισμών σελίδας για το έγγραφο: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Εκτύπωση: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Διπλότυπα του εγγράφου: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Αναζήτηση για διπλότυπα έγγραφα;" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Αίτημα αναζήτησης για διπλότυπα έγγραφα καταχωρήθηκε στην λίστα με επιτυχία." #: views/favorite_document_views.py:33 #, python-format @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Καθαρισμός της μνήμης εικόνων εγγράφου;" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Εντολή καθαρισμού μνήμης καταχωρήθηκε στην λίστα επιτυχώς." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Αναζήτηση για διπλότυπα έγγραφα;" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Αίτημα αναζήτησης για διπλότυπα έγγραφα καταχωρήθηκε στην λίστα με επιτυχία." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/en/LC_MESSAGES/django.po b/mayan/apps/documents/locale/en/LC_MESSAGES/django.po index 842961e59d..780e48d681 100644 --- a/mayan/apps/documents/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/en/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" "PO-Revision-Date: 2017-08-15 01:59-0400\n" "Last-Translator: Roberto Rosario\n" "Language-Team: English (http://www.transifex.com/rosarior/mayan-edms/" @@ -18,50 +18,51 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 models/document_models.py:94 -#: permissions.py:7 queues.py:26 settings.py:14 statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 models/document_models.py:93 +#: permissions.py:7 queues.py:26 settings.py:18 statistics.py:236 msgid "Documents" msgstr "" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "" @@ -77,7 +78,8 @@ msgstr "" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "" @@ -106,23 +108,27 @@ msgstr "" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -185,7 +191,7 @@ msgstr "" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "" @@ -197,12 +203,12 @@ msgstr "" msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "" @@ -225,196 +231,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "" - -#: links.py:245 -msgid "Details" -msgstr "" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:96 +msgid "Print" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:287 -msgid "First page" -msgstr "" - -#: links.py:292 -msgid "Last page" -msgstr "" - -#: links.py:300 -msgid "Previous page" -msgstr "" - -#: links.py:306 -msgid "Next page" -msgstr "" - -#: links.py:318 -msgid "Rotate left" -msgstr "" - -#: links.py:323 -msgid "Rotate right" -msgstr "" - -#: links.py:327 -msgid "Page image" -msgstr "" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "" - -#: links.py:344 -msgid "Zoom out" -msgstr "" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "" @@ -428,7 +446,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -464,69 +482,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -562,52 +567,48 @@ msgstr "" msgid "Documents types" msgstr "" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document. " "Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -651,7 +652,7 @@ msgstr "" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "" @@ -743,115 +744,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an " "experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value " "of 0 disables the block calculation and the entire file will be loaded into " "memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "" -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "" @@ -903,27 +906,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -947,40 +950,52 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that " "it is corrupted or that the upload process was interrupted. Use the document " "page recalculation action to attempt to introspect the page count again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1081,185 +1096,199 @@ msgstr "" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; %(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by " +"this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or " "were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by " -"this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1318,22 +1347,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/es/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/es/LC_MESSAGES/django.mo index 4b899b704f..9805128863 100644 Binary files a/mayan/apps/documents/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/es/LC_MESSAGES/django.po b/mayan/apps/documents/locale/es/LC_MESSAGES/django.po index 84c3895b11..1a26c41d61 100644 --- a/mayan/apps/documents/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/es/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-28 15:53+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:51+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documentos" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Crear tipo un tipo de documento" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Cada documento cargado debe tener asignado un tipo de documento, es la forma básica en que Mayan EDMS clasifica los documentos." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Comentario de versiones" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Codificación de versiones" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Tipo MIME de versiones" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Fecha y hora de versiones" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Foto miniatura" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicados" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tipo" @@ -78,7 +79,8 @@ msgstr "Total de documentos" msgid "Documents in trash" msgstr "Documentos en la papelera" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipos de documentos" @@ -107,23 +109,27 @@ msgstr "Nueva versión subida" msgid "Document properties edited" msgstr "Propiedades del documento fueron editadas" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "Documento enviado a papelera" + +#: events.py:26 msgid "Document type changed" msgstr "Tipo de documento ha sido cambiado" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Tipo de documento creado" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Tipo de documento editado" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Versión de documento revertida" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Documento visualizado" @@ -186,7 +192,7 @@ msgstr "Ninguno" msgid "File encoding" msgstr "Codificación de archivo" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Tamaño del archivo" @@ -198,12 +204,12 @@ msgstr "Existe en el almacenamiento" msgid "File path in storage" msgstr "Ruta de archivo en el almacenamiento" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Suma de comprobación" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Rango de páginas" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "Toma la extensión de archivo y la mueve al final del nombre de archivo permitiendo que los sistemas operativos que dependen de las extensiones de archivo abran correctamente la versión del documento descargado." -#: links.py:66 -msgid "Preview" -msgstr "Muestra" +#: handlers.py:33 +msgid "Document images" +msgstr "Imágenes de documento" -#: links.py:72 -msgid "Properties" -msgstr "Propiedades" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versiones" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Borrar transformaciones" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Clonar transformaciones" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Borrar" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Favoritos" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Agregar a los favoritos" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Remover de favoritos" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Mover a la papelera" - -#: links.py:137 -msgid "Edit properties" -msgstr "Editar propiedades" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Cambiar tipo" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Descarga avanzada" -#: links.py:155 -msgid "Print" -msgstr "Imprimir" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Editar propiedades" -#: links.py:160 -msgid "Quick download" -msgstr "Descarga rápida" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Recalcular el conteo de páginas" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Restaurar" - -#: links.py:226 -msgid "Download version" -msgstr "Descarga de versión" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Documento" - -#: links.py:245 -msgid "Details" -msgstr "Detalles" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Todos los documentos" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Recientemente accedido" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Recientemente añadido" -#: links.py:264 -msgid "Trash can" -msgstr "Papelera" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Muestra" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Borrar las representaciones gráficas utilizadas para acelerar la presentación de los documentos y resultados de las transformaciones interactivas." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Propiedades" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Borrar la caché de imágenes de documentos" +#: links/document_links.py:96 +msgid "Print" +msgstr "Imprimir" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Vaciar papelera" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Descarga rápida" -#: links.py:287 -msgid "First page" -msgstr "Primera página" - -#: links.py:292 -msgid "Last page" -msgstr "Última página" - -#: links.py:300 -msgid "Previous page" -msgstr "Página previa" - -#: links.py:306 -msgid "Next page" -msgstr "Próxima página" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotar a la izquierda" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotar a la derecha" - -#: links.py:327 -msgid "Page image" -msgstr "Imagen de la página" - -#: links.py:332 -msgid "Reset view" -msgstr "Reestablecer vista" - -#: links.py:338 -msgid "Zoom in" -msgstr "Acercar imagen" - -#: links.py:344 -msgid "Zoom out" -msgstr "Alejar imagen" - -#: links.py:353 -msgid "Revert" -msgstr "Revertir" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Crear tipo de documento" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Borrar" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Políticas de eliminación" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Editar" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Añadir nombre típico al tipo de documento" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Nombres típicos " -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versiones" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Descarga de versión" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Documento" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detalles" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Revertir" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "Deshabilitar página" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "Deshabilitar páginas" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "Habilitar página" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "Habilitar páginas" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Primera página" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Última página" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Página previa" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Próxima página" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotar a la izquierda" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotar a la derecha" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Imagen de la página" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Reestablecer vista" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Acercar imagen" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Alejar imagen" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Recalcular el conteo de páginas" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Documentos duplicados" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Escanéar documentos duplicados" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Favoritos" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Agregar a los favoritos" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Remover de favoritos" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Mover a la papelera" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Papelera" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Restaurar" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Vaciar papelera" + +#: literals.py:32 msgid "Default" msgstr "Por defecto" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Todas las páginas" @@ -429,7 +447,7 @@ msgstr "UUID de un documento, ID único universalmente. Un identificador único msgid "The name of the document." msgstr "El nombre del documento." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "Si este documento está o no en la papelera." msgid "In trash?" msgstr "¿En la papelera?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "La fecha y hora del servidor cuando el documento fue movido a la papelera." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Fecha y hora de envío a papelera" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Un recibo de documento es un documento con una entrada en la base de datos pero ningún archivo subido. Esto podría ser una subida interrumpida o una subida diferida a través de la API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "¿Es un recibo?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Recibo de documento, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Versión de documento" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Activado" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Número de página" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Página de documento" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Páginas de documento" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Página %(page_num)d de %(total_pages)d de %(document)s " -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Fecha y hora" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nombre del archivo" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Imagen en caché de la página del documento" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Imágenes de páginas de documento en caché" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "El nombre del tipo de documento." @@ -564,52 +569,48 @@ msgstr "Unidad de tiempo de eliminación" msgid "Documents types" msgstr "Tipos de documentos" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Activado" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Etiqueta rapida" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "La fecha y hora del servidor cuando se procesó la versión del documento." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Marca de tiempo" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Un texto breve opcional que describe la versión del documento." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Comentario" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Archivo" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "El tipo de archivo de la versión del documento. Los tipos MIME son una forma estándar de describir el formato de un archivo, en este caso el formato de archivo del documento. Algunos ejemplos: \"text/plain\" o \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Tipo MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "La codificación del archivo de la versión del documento. Binario de 7 bits, binario de 8 bits, texto, base64, etc." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Codificación" @@ -653,7 +654,7 @@ msgstr "Eliminar documentos" msgid "Trash documents" msgstr "Enivar documentos a la papelera" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Descargar documentos" @@ -745,115 +746,117 @@ msgstr "Compruebe los períodos de envío a papelera del tipo de documento" msgid "Delete document stubs" msgstr "Eliminar los recibos de documentos" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Borrar la caché de imágenes" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Actualizar el número de páginas del documento" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Subir nueva versión del documento" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Escanear documentos duplicados" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "El umbral en el que DOCUMENT_CACHE_STORAGE_BACKEND comenzará a eliminar los archivos de caché de imágenes de documentos más antiguos. Especifique el tamaño en bytes." + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Ruta a la subclase Storage para usar cuando se almacenan los archivos de imagen del documento en caché." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argumentos para pasar al DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Deshabilita el primer nivel de caché que almacena las versiones de las páginas de documentos que no son transformadas de alta resolución." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Deshabilita el segundo nivel de memoria caché que almacena versiones de páginas de documentos de media a baja resolución, transformadas (giradas, ampliadas, etc.)." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Número máximo de documentos favoritos para recordar por usuario." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Detecta la orientación de cada una de las páginas del documento y crea una transformación de rotación correspondiente para mostrarla a la derecha. Esta es una función experimental y está deshabilitada por defecto." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Tamaño de los bloques que se utilizarán al calcular la suma de comprobación del archivo de documento. Un valor de 0 desactiva el cálculo de bloque y todo el archivo se cargará en la memoria." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Idioma predeterminado de los documentos (en formato ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Lista de idiomas de documentos apoyados. En formato ISO639-3." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Tiempo en segundos que el navegador debe almacenar en caché las imágenes del documento suministradas. El valor predeterminado de 31559626 segundos corresponde a 1 año." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Número máximo de documentos recientemente accedidos (creados, editados, vistos) para recordar por usuario." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Número máximo de documentos creados recientemente para mostrar." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Cantidad de grados que se va a girar una página de documento por cada acción del usuario." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Ruta a la subclase Storage para usar cuando se almacenan archivos de documentos." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argumentos para pasar a DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Altura en píxeles de la imagen en miniatura del documento." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Cantidad máxima en porcentaje (%) a permitir al usuario aumentar la página del documento de forma interactiva." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Cantidad mínima en porcentaje (%) a permitir al usuario disminuir la página del documento de forma interactiva." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Cantidad en porcentaje a acercar o alejar una página de documento por cada interacción del usuario." @@ -905,27 +908,27 @@ msgstr "Noviembre" msgid "December" msgstr "Diciembre" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nuevos documentos por mes" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nuevas versiones de documentos por mes" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nuevas páginas de documentos por mes" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total de documentos cada mes" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total de versiones de documentos cada mes" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Total de páginas de documentos cada mes" @@ -949,12 +952,12 @@ msgstr "No hay páginas para mostrar" msgid "Document image" msgstr "Imagen del documento" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Idioma desconocido \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "Esto podría significar que el documento tiene un formato que no es compatible, que está dañado o que el proceso de carga se interrumpió. Utilice la acción de recálculo de la página del documento para intentar realizar una introspección del recuento de páginas nuevamente." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "No hay páginas de documentos disponibles" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Pagínas para documento: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "No hay más páginas en este documento" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Usted ya está en la primera página de este documento" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Imágen de: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "¿Deshabilitar la página del documento seleccionado?" +msgstr[1] "¿Deshabilitar las páginas del documento seleccionado?" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "¿Habilitar la página del documento seleccionado?" +msgstr[1] "¿Habilitar las páginas del documento seleccionado?" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,186 +1098,201 @@ msgstr "Error revirtiendo la versión del documento; %s" msgid "Preview of document version: %s" msgstr "Vista preliminar de la versión de documento: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Error al recuperar la lista de documentos: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Esto podría significar que no se han cargado documentos o que su cuenta de usuario no ha recibido el permiso de visualización para ningún documento o tipo de documento." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "No hay documentos disponibles" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Solicitud de cambio de tipo de documento realizada en el documento %(count)d" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Solicitud de cambio de tipo de documento realizada en %(count)d documentos" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Cambiar" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Cambiar el tipo del documento seleccionado" msgstr[1] "Cambiar el tipo de los documentos seleccionados" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Cambiar el tipo del documento: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Tipo de documento para \"%s\" cambiado con éxito." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Descargar" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Solo copias exactas de este documento se mostrarán en esta lista." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "No hay duplicados para este documento" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplicados para el documento: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Editar propiedades del documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Visualización del documento: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Propiedades para el documento: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d documento en cola para el recuento de total de páginas" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d documentos en cola para el recuento de total de páginas" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "¿Volver a calcular el total de páginas del documento seleccionado?" msgstr[1] "¿Volver a calcular el total de páginas de los documentos seleccionados?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "¿Volver a calcular el total de páginas del documento: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "El documento \"%(document)s\" está vacío. Cargue al menos una versión del documento antes de intentar detectar el número de páginas." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Solicitud de borrar transformaciones, procesada para %(count)d documento" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Solicitud de borrar transformaciones procesada para %(count)d documentos" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "¿Borrar todas las transformaciones de página para el documento seleccionado?" msgstr[1] "¿Borrar todas las transformaciones de página para el documento seleccionado?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "¿Borrar todas las transformaciones de página para el documento: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Error al eliminar las transformaciones de página para el documento: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "Error al clonar las transformaciones de página para el documento: %(document)s; %(error)s." + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformaciones clonadas con éxito." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Enviar" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Clonar transformaciones de página para el documento: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Imprimir: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Esta vista enumerará los últimos documentos visualizados o manipulados de alguna manera por esta cuenta de usuario." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "No hay documentos accedidos recientemente" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Esta vista mostrará una lista de los últimos documentos cargados en el sistema." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "No hay documento agregado recientemente" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Solo copias exactas de este documento se mostrarán en esta lista." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "No hay duplicados para este documento" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplicados para el documento: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Los duplicados son documentos que se componen del mismo archivo exacto, hasta el último byte. Los archivos que tienen el mismo texto u OCR pero que no son idénticos o que se guardaron con un formato de archivo diferente no aparecerán como duplicados." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "No hay documentos duplicados" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Esta vista enumerará los últimos documentos visualizados o manipulados de alguna manera por esta cuenta de usuario." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "¿Buscar documentos duplicados?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "No hay documentos accedidos recientemente" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Esta vista mostrará una lista de los últimos documentos cargados en el sistema." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "No hay documento agregado recientemente" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "La exploración de documentos duplicados sometido con éxito." #: views/favorite_document_views.py:33 #, python-format @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "Eliminar el documento seleccionado de favoritos" msgstr[1] "Eliminar los documentos seleccionados de favoritos" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "¿Borrar la caché de imágenes de documentos?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Borrado del caché de documentos sometido con éxito." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "¿Buscar documentos duplicados?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "La exploración de documentos duplicados sometido con éxito." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/fa/LC_MESSAGES/django.mo index ebb89e0776..4f90dd06f7 100644 Binary files a/mayan/apps/documents/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/fa/LC_MESSAGES/django.po b/mayan/apps/documents/locale/fa/LC_MESSAGES/django.po index 0b0e59cd97..19e39b9a3e 100644 --- a/mayan/apps/documents/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/fa/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "اسناد" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "نوع سند را ایجاد کنید" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "هر سند آپلود شده باید یک نوع سند اختصاص داده شود، این شیوه اصلی Mayan EDMS اسناد را دسته بندی می کند." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "اندازه کوچک" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "صفحات" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "تکراری" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "نوع" @@ -78,7 +79,8 @@ msgstr "کل اسناد" msgid "Documents in trash" msgstr "اسناد در سطل زباله" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "انواع سند" @@ -107,23 +109,27 @@ msgstr "نسخه جدید آپلود شد" msgid "Document properties edited" msgstr "خصوصیات سند ویرایش شد" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "نوع سند تغییر کرد" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "نسخه سند باز شده است" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "سند مشاهده شده" @@ -186,7 +192,7 @@ msgstr "هیچکدام." msgid "File encoding" msgstr "فایل Encoding" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "اندازه فایل" @@ -198,12 +204,12 @@ msgstr "موجود در مخزن" msgid "File path in storage" msgstr "آدرس فایل در مخزن" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "چک سام" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "محدوده صفحات" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "فرمت فایل را می گیرد و آن را به انتهای نام فایل منتقل می کند تا سیستم عامل هایی را که بر روی پسوندهای فایل تکیه دارند، به درستی باز می کند." -#: links.py:66 -msgid "Preview" -msgstr "پیش دید ویا دیدن" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "خصوصیات" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "نسخه ها" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "پاک کردن تبدیلات" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "تحولات کلون" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "حذف" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "انتقال به سطل زباله" - -#: links.py:137 -msgid "Edit properties" -msgstr "ویرایش خصوصیات" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "تغییر نوع" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "چاپ" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "ویرایش خصوصیات" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "شمارش صفحه مجددا محاسبه کنید" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "بازگرداندن" - -#: links.py:226 -msgid "Download version" -msgstr "دانلود نسخه" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "سند" - -#: links.py:245 -msgid "Details" -msgstr "جزئیات" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "کلیه اسناد" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "سطل زباله می تواند" +#: links/document_links.py:84 +msgid "Preview" +msgstr "پیش دید ویا دیدن" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "پاک کردن نحوه نمایش اسناد که در زمان سرعت بخشی به نمایش اسناد مورد استفاده قرار میگیرد." +#: links/document_links.py:90 +msgid "Properties" +msgstr "خصوصیات" -#: links.py:274 -msgid "Clear document image cache" -msgstr "پاک کردن حافظه تصویر سند" +#: links/document_links.py:96 +msgid "Print" +msgstr "چاپ" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "سطل زباله خالی" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "" -#: links.py:287 -msgid "First page" -msgstr "اولین صفحه" - -#: links.py:292 -msgid "Last page" -msgstr "آخرین صفحه" - -#: links.py:300 -msgid "Previous page" -msgstr "صفحه قبلی" - -#: links.py:306 -msgid "Next page" -msgstr "صفحه بعدی" - -#: links.py:318 -msgid "Rotate left" -msgstr "چرخش به چپ" - -#: links.py:323 -msgid "Rotate right" -msgstr "چرجش به راست" - -#: links.py:327 -msgid "Page image" -msgstr "تصویر صفحه" - -#: links.py:332 -msgid "Reset view" -msgstr "ریست ویو Reset View" - -#: links.py:338 -msgid "Zoom in" -msgstr "بزرگنمایی" - -#: links.py:344 -msgid "Zoom out" -msgstr "کوچک نمایی" - -#: links.py:353 -msgid "Revert" -msgstr "بازگرداندن" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "ایجاد نوع سند" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "حذف" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "ویرایش" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "برچسب سریع را به نوع سند اضافه کنید" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "برچسب های سریع" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "نسخه ها" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "دانلود نسخه" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "سند" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "جزئیات" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "بازگرداندن" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "اولین صفحه" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "آخرین صفحه" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "صفحه قبلی" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "صفحه بعدی" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "چرخش به چپ" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "چرجش به راست" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "تصویر صفحه" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "ریست ویو Reset View" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "بزرگنمایی" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "کوچک نمایی" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "شمارش صفحه مجددا محاسبه کنید" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "اسناد تکراری" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "اسکن سند تکراری" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "انتقال به سطل زباله" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "سطل زباله می تواند" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "بازگرداندن" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "سطل زباله خالی" + +#: literals.py:32 msgid "Default" msgstr "پیش فرض" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "تمام صفحات" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "در سطل زباله؟" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "تاریخ و زمان خراب شد" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "یک مستند سند یک سند با یک ورودی در پایگاه داده است اما هیچ فایل آپلود نشده است. این می تواند آپلود متوقف شده یا آپلود معلق از طریق API باشد." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "آیا خرد است؟" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "مستند مستند، شناسه: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "نسخه سند" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "فعال شده" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "شماره صفحه" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "صفحه سند" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "صفحات سند" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "صفحه شماره%(page_num)d از%(total_pages)d از سند %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "زمان قرار" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "نام فایل" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "صفحه مستند cached image" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "صفحه های ذخیره شده در صفحه سند" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "واحد زمان را حذف کنید" msgid "Documents types" msgstr "انواع اسناد" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "فعال شده" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "برچسب سریع" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "علامت زمان" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "شرح" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "فایل" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "نوع MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Encoding" @@ -653,7 +654,7 @@ msgstr "حذف سند" msgid "Trash documents" msgstr "اسناد حذف شده" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "دانلود اسناد" @@ -745,115 +746,117 @@ msgstr "نوع سند را حذف کنید" msgid "Delete document stubs" msgstr "حذف مستندات مقاله" -#: queues.py:66 -msgid "Clear image cache" -msgstr "پاک کردن حافظه تصویر" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "به روز رسانی تعداد سند صفحه" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "نسخه سند جدید را آپلود کنید" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "اولین سطر ذخیره سازی که نسخه های با وضوح بالا و بدون تغییرات صفحات اسناد را ذخیره می کند را غیرفعال می کند." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "محدوده دوم حافظه پنهان که محتویات نسخه های با وضوح متوسط ​​و پایین را تغییر داده (چرخش، زوم و ...) صفحات اسناد را غیرفعال می کند." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "مقدار درچه چرخش یک صفحه از سند به ازای هر کاربر" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "حداکثر درصد(%) اندازه بزرگنمایی بوسیله کاربر برروی یک صفحه از سند بصورت تعاملی" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "حداکثر درصد(%) اندازه کوچک نمایی بوسیله کاربر برروی یک صفحه از سند بصورت تعاملی" -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "اندازه بزرگنمایی/کوچک نمایی یک صفحه از سند جهت تعامل با هرکاربر" @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "اسناد جدید در هر ماه" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "نسخه های جدید سند در هر ماه" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "صفحات سند جدید در هر ماه" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "مجموع اسناد در هر ماه" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "نسخه های سند کامل در هر ماه" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "صفحات سند مجموع در هر ماه" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "صفحات برای سند: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "پایان صفحات سند" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "شما در حال حاضر برروی اولین صفحه این سند میباشید." -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "تصویر: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,186 +1098,201 @@ msgstr "خطا در بازگشت نسخه سند: %s" msgid "Preview of document version: %s" msgstr "پیش نمایش نسخه سند: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "درخواست تغییر نوع سند بر روی سند %(count)d انجام می شود" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "درخواست تغییر نوع سند بر روی اسناد %(count)d انجام می شود" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "تغییر دادن" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "تغییر نوع سند انتخاب شده" msgstr[1] "تغییر نوع سند انتخاب شده" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "نوع سند را تغییر دهید: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "نوع سند برای \"%s\" با موفقیت تغییر یافت." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "دانلود" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "تکراری برای سند: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "ویرایش خصوصیات سند : %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "پیش نمایش سند : %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "خصوصیات سند : %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d سند در محدوده شمارش تعداد صفحات" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d اسناد در محدوده شمارش شمارش صفحات" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "بازشماری تعداد صفحات اسناد انتخاب شده" msgstr[1] "بازشماری تعداد صفحات اسناد انتخاب شده" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "شمارش صفحه سند را محاسبه کنید: %s؟" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "درخواست واضح تر تبدیل شده برای سند %(count)d پردازش شده است" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "درخواست واضح تر تبدیل شده برای اسناد %(count)d پردازش شده است" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] " آیا تبدیلات صفحه برای سند انتخاب شده پاک گردد؟" msgstr[1] " آیا تبدیلات صفحه برای سند انتخاب شده پاک گردد؟" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "پاک کردن تمام تغییرات صفحه برای سند: %s؟" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "خطا %(error)s در زمان حذف تبدیلات سند %(document)s" -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "تغییرات با موفقیت کلون شدند." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "ارسال" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "تبدیل صفحه کلون برای سند: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "چاپ : %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "تکراری برای سند: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "برای اسناد تکراری اسکن کنید؟" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "اسکن کپی اسکن شده با موفقیت انجام شد." #: views/favorite_document_views.py:33 #, python-format @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "پاک کردن سند تصویر کش؟" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "پاکسازی پاکسازی سند با موفقیت انجام شد." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "برای اسناد تکراری اسکن کنید؟" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "اسکن کپی اسکن شده با موفقیت انجام شد." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/fr/LC_MESSAGES/django.mo index 94118662f6..bc768d0044 100644 Binary files a/mayan/apps/documents/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/fr/LC_MESSAGES/django.po b/mayan/apps/documents/locale/fr/LC_MESSAGES/django.po index 2bf2142073..72ce1d7820 100644 --- a/mayan/apps/documents/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/fr/LC_MESSAGES/django.po @@ -6,15 +6,16 @@ # Bruno CAPELETO , 2016 # Christophe CHAUVET , 2016-2018 # Frédéric Sheedy , 2019 +# Olivier W, 2019 # Thierry Schott , 2016 # Yves Dubois , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-27 00:52+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-08 19:13+0000\n" +"Last-Translator: Olivier W\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,51 +23,52 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documents" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Créer un type de document" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Chaque document transféré doit être associé à un type de document, cela permet à Mayan EDMS de catégoriser les documents." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Versions du commentaire" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Encodage des versions" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Type MIME des version" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Horodatage des versions " -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Vignette" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pages" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Doublons" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Type" @@ -82,7 +84,8 @@ msgstr "Nombre total de documents" msgid "Documents in trash" msgstr "Documents dans la corbeille" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Types de documents" @@ -111,23 +114,27 @@ msgstr "Nouvelle version transférée" msgid "Document properties edited" msgstr "Propriétés du document modifiées" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "Document mis à la corbeille" + +#: events.py:26 msgid "Document type changed" msgstr "Type de document modifié" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Type de document créé" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Type de document modifié" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Retour à la version précédente du document" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Document consulté" @@ -190,7 +197,7 @@ msgstr "Aucun" msgid "File encoding" msgstr "Encodage du fichier" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Taille du fichier" @@ -202,12 +209,12 @@ msgstr "Présent dans le stockage local" msgid "File path in storage" msgstr "Chemin du fichier dans le stockage local" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Somme de contrôle" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Ensemble de pages" @@ -230,196 +237,208 @@ msgid "" "document version correctly." msgstr "Reprend l'extension de fichier et la place à la fin du nom de fichier afin de permettre aux systèmes d'exploitation qui se basent sur les extensions d'ouvrir correctement la version téléchargée du document." -#: links.py:66 -msgid "Preview" -msgstr "Prévisualiser" +#: handlers.py:33 +msgid "Document images" +msgstr "Images du document" -#: links.py:72 -msgid "Properties" -msgstr "Propriétés" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versions" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Effacer les transformations" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Dupliquer les transformations" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Supprimer" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Favoris" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Ajouter aux favoris" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Retirer des favoris" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Envoyer à la corbeille" - -#: links.py:137 -msgid "Edit properties" -msgstr "Modifier les propriétés" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Changer le type" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Téléchargement avancé" -#: links.py:155 -msgid "Print" -msgstr "Imprimer" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Modifier les propriétés" -#: links.py:160 -msgid "Quick download" -msgstr "Téléchargement rapide" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Recompter le nombre de pages" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Restaurer" - -#: links.py:226 -msgid "Download version" -msgstr "Télécharger cette version" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Document" - -#: links.py:245 -msgid "Details" -msgstr "Détails" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Tous les documents" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Récemment accédé" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Récemment ajouté" -#: links.py:264 -msgid "Trash can" -msgstr "Corbeille" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Prévisualiser" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Effacer les représentations graphiques utilisées pour accélérer l'affichage des documents et les résultats des transformations interactives." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Propriétés" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Effacer le cache des images de documents" +#: links/document_links.py:96 +msgid "Print" +msgstr "Imprimer" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Vider la corbeille" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Téléchargement rapide" -#: links.py:287 -msgid "First page" -msgstr "Première page" - -#: links.py:292 -msgid "Last page" -msgstr "Dernière page" - -#: links.py:300 -msgid "Previous page" -msgstr "Page précédente" - -#: links.py:306 -msgid "Next page" -msgstr "Page suivante" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotation à gauche" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotation à droite" - -#: links.py:327 -msgid "Page image" -msgstr "Image de la page" - -#: links.py:332 -msgid "Reset view" -msgstr "Réinitialiser la vue" - -#: links.py:338 -msgid "Zoom in" -msgstr "Zoom avant" - -#: links.py:344 -msgid "Zoom out" -msgstr "Zoom arrière" - -#: links.py:353 -msgid "Revert" -msgstr "Rétablir" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Créer un type de document" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Supprimer" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Règle de suppression" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Modifier" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Ajouter un libellé rapide au type de document" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Libellés rapides" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versions" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Télécharger cette version" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Document" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Détails" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Rétablir" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "Désactiver la page" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "Désactiver les pages" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "Activer la page" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "Activer les pages" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Première page" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Dernière page" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Page précédente" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Page suivante" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotation à gauche" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotation à droite" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Image de la page" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Réinitialiser la vue" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Zoom avant" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Zoom arrière" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Recompter le nombre de pages" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Documents doublons" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Numérisations de documents doublons" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Favoris" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Ajouter aux favoris" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Retirer des favoris" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Envoyer à la corbeille" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Corbeille" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Restaurer" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Vider la corbeille" + +#: literals.py:32 msgid "Default" msgstr "Défaut" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Toutes les pages" @@ -433,7 +452,7 @@ msgstr "UUID d'un document, en anglais: universally Unique ID. Un identifiant un msgid "The name of the document." msgstr "Le nom du document." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -469,69 +488,56 @@ msgstr "Que ce document soit ou non à la poubelle." msgid "In trash?" msgstr "Présent dans la corbeille ?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "La date et l'heure du serveur lorsque le document a été placé dans la corbeille." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Date et heure d'envoi à la corbeille" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Un document parcellaire est un document avec une entrée en base de données mais aucun fichier transféré. Cela peut correspondre à un transfert interrompu ou à un transfert différé via l'API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Parcellaire ?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Document parcellaire, id : %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Version du document" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Activé" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Numéro de page" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Page du document" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Pages du document" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Page %(page_num)d sur %(total_pages)d de %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Date et heure" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nom de fichier" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Image mise en cache de page de document" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Images mises en cache de page de document" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Le nom du type de document." @@ -568,52 +574,48 @@ msgstr "Unité de temps avant suppression" msgid "Documents types" msgstr "Types de documents" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Activé" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Étiquetage rapide" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "La date et l'heure du serveur lorsque la version du document a été traitée." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Horodatage" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Un court texte facultatif décrivant la version du document." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Commentaire" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Fichier" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Le type MIME du fichier de la version du document. Les types MIME sont un moyen standard de décrire le format d'un fichier, dans ce cas le format de fichier du document. Quelques exemples: \"text/plain\" or \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Type MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "L'encodage du fichier de version du document. Binaire 7 bits, binaire 8 bits, texte, base64, etc." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Encodage" @@ -657,7 +659,7 @@ msgstr "Supprimer les documents" msgid "Trash documents" msgstr "Envoyer les documents à la corbeille" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Télécharger les documents" @@ -749,115 +751,117 @@ msgstr "Vérifier les périodes de mise à la corbeille du type de document" msgid "Delete document stubs" msgstr "Effacer des documents parcellaires" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Effacer le cache des images " - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Mettre à jour le compteur de page" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Transférer une nouvelle version du document" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Numériser des doublons de documents" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Chemin de la sous-classe de stockage à utiliser lors du stockage des fichiers d’image de document mis en cache." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Arguments à transmettre à DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Désactive le premier niveau de cache qui stocke les pages de documents de haute résolution et non transformées." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Désactive le deuxième niveau de cache qui stocke des versions de moyenne à faible résolution, transformées (tournées, agrandies, etc.) des pages des documents." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Nombre maximum de documents favoris à mémoriser par utilisateur." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Détecte l'orientation de chacune des pages du document et crée une transformation de rotation correspondante pour l'afficher dans la bonne orientation. Il s'agit d'une fonctionnalité expérimentale désactivée par défaut." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Taille des blocs à utiliser lors du calcul de la somme de contrôle d'un fichier d'un document. Une valeur de 0 désactive le calcul du bloc et le fichier entier sera chargé en mémoire." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Langue des documents par défaut (dans le format ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Liste des langues de document supportées. Dans le format ISO639-3." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Durée en secondes pendant laquelle le navigateur doit mettre en cache les images fournies pour un document. La valeur par défaut de 31559626 secondes correspond à 1 an." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Nombre maximum de documents récemment consultés (créés, modifiés ou consultés) à mémoriser par utilisateur." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Nombre maximum de documents récemment créés à afficher." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Valeur en degrés de la rotation d'une page de document par interaction de l'utilisateur." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Chemin de la sous-classe de stockage à utiliser lors du stockage des fichiers de document." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Arguments à transmettre à DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Hauteur en pixels de l'aperçu du document." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maximum en pourcents (%) de la valeur du zoom avant interactif autorisé pour l'utilisateur." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimum en pourcents (%) de la valeur du zoom arrière interactif autorisé pour l'utilisateur." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Valeur en pourcentage du zoom avant ou arrière d'une page de document par interaction de l'utilisateur." @@ -909,27 +913,27 @@ msgstr "Novembre" msgid "December" msgstr "Décembre" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nouveaux documents par mois" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nouvelles versions de document par mois" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nouvelles pages de documents par mois" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Nombre total de documents chaque mois" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Nombre total de versions de documents chaque mois" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Nombre total de pages de documents chaque mois" @@ -953,12 +957,12 @@ msgstr "Aucune page à afficher" msgid "Document image" msgstr "Image du document " -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Langue inconnue \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -966,28 +970,40 @@ msgid "" "again." msgstr "Cela pourrait signifier que le document a un format qui n'est pas pris en charge, qu'il est corrompu ou que le processus de téléchargement a été interrompu. Utilisez l'action de recalcul de page de document pour tenter à nouveau d'effectuer une introspection du nombre de pages." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Aucune page de document disponible" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Pages du document : %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Il n'y a pas d'autres pages dans ce document" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Vous êtes déjà sur la première page du document" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Image de : %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "Désactiver la page de document sélectionnée?" +msgstr[1] "Êtes-vous sûr de vouloir désactiver les pages sélectionnées du document ?" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "Activer la page de document sélectionnée?" +msgstr[1] "Êtes-vous sûr de vouloir activer les pages sélectionnées du document ?" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1087,186 +1103,201 @@ msgstr "Erreur lors du retour à une version précédente du document ; %s" msgid "Preview of document version: %s" msgstr "Prévisualiser la version du document : %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Erreur lors du chargement de la liste de documents: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Cela peut signifier qu'aucun document n'a été chargé ou que votre compte d'utilisateur ne dispose pas d'autorisation d'affichage pour aucun document ou type de document." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Aucun document disponible" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Demande de modification du type de document effectuée sur %(count)d document" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Demande de modification du type de document effectuée sur %(count)d documents" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Modifier" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Changer le type de document sélectionné" msgstr[1] "Modifier le type de documents sélectionnés" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Modifier le type de document : %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Type de document de \"%s\" modifié avec succès." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Télécharger" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Seules les copies exactes de ce document seront affichées dans cette liste." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Il n'y a pas de doublons pour ce document" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Doublons pour le document : %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Modifier les propriétés du document : %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Aperçu du document : %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Propriétés du document : %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d document dans la file d'attente pour le recalcul du nombre de page" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d documents dans la file d'attente pour le recalcul du nombre de page" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Êtes vous sûr de vouloir recalculer le nombre de pages du document sélectionné ?" msgstr[1] "Êtes-vous sûr de vouloir recalculer le nombre de pages des documents sélectionnés ?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Recalculer le nombre de page pour le document : %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Le document \"%(document)s\" est vide. Téléchargez au moins une version du document avant de tenter de détecter le nombre de pages." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Demande d'effacement de transformation traitée pour %(count)d document" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Demande d'effacement de transformation traitée pour %(count)d documents" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Effacer toutes les transformations de page pour le document sélectionné?" msgstr[1] "Effacer toutes les transformations de page pour le document sélectionné?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Effacer toutes les transformations de page pour le document : %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Erreur lors de la suppression des transformations de page pour le document : %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Les transformations ont été dupliquées avec succès." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Soumettre" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Dupliquer les transformations de la page pour le document : %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Imprimer : %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Cette page affiche la liste des derniers documents consultés ou manipulés de quelque manière que ce soit par ce compte d'utilisateur." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Il n'y a pas de document récemment consulté" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Cette page afficher la liste des derniers documents téléchargés dans le système." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Il n'y a pas de document ajouté récemment" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Seules les copies exactes de ce document seront affichées dans cette liste." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Il n'y a pas de doublons pour ce document" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Doublons pour le document : %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Les doublons sont des documents composés exactement du même fichier jusqu'au dernier octet. Les fichiers qui ont le même texte ou la même OCR mais qui ne sont pas identiques ou qui ont été enregistrés dans un format de fichier différent ne seront pas affichés comme doublons." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Il n'y a pas de documents en double" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Cette page affiche la liste des derniers documents consultés ou manipulés de quelque manière que ce soit par ce compte d'utilisateur." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Recherche de documents dupliqués ?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Il n'y a pas de document récemment consulté" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Cette page afficher la liste des derniers documents téléchargés dans le système." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Il n'y a pas de document ajouté récemment" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Recherche de documents dupliqués effectuée avec succès." #: views/favorite_document_views.py:33 #, python-format @@ -1324,22 +1355,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "Supprimer le document sélectionné des favoris" msgstr[1] "Retirer les documents sélectionnés des favoris" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Vider l'image en cache du document ?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Demande de nettoyage du cache de documents mise en file d'attente avec succès." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Recherche de documents dupliqués ?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Recherche de documents dupliqués effectuée avec succès." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/hu/LC_MESSAGES/django.mo index 4f8b24ea2c..30d40ed408 100644 Binary files a/mayan/apps/documents/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/hu/LC_MESSAGES/django.po b/mayan/apps/documents/locale/hu/LC_MESSAGES/django.po index a9cbb6de3f..18dd3ce2b1 100644 --- a/mayan/apps/documents/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/hu/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "dokumentumok" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Dokumentum típus létrehozása" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Minden betöltött dokumentumhoz hozzá kell rendelni egy típust, ez az alapvető kategorizálási elv a Mayan EDMS-ben." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "bélyegkép" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Lapok" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikátum" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Típus" @@ -78,7 +79,8 @@ msgstr "Dokumentumok száma" msgid "Documents in trash" msgstr "Dokumentumok a kukában" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Dokumentum típusok" @@ -107,23 +109,27 @@ msgstr "Új verzió betöltve" msgid "Document properties edited" msgstr "Dokumentum tulajdonságok szerkesztve" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Dokumentum típus megváltoztatva" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Dokumentum verzió visszaállítva" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokumentum megtekintve" @@ -186,7 +192,7 @@ msgstr "Semmi" msgid "File encoding" msgstr "Állomány kódolás" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Fájl mérete" @@ -198,12 +204,12 @@ msgstr "Létezik a tárolóban" msgid "File path in storage" msgstr "A fájl elérési útja a tárolóban" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Ellenőrző összeg" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Oldal tartomány" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" -msgstr "Előnézet" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Tulajdonságok" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Verziók" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "transzformálás elvétele" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "transformálás klónozása" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Törlés" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Kukába dob" - -#: links.py:137 -msgid "Edit properties" -msgstr "Tulajdonságok szerkesztése" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Típus változtatása" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Nyomtatás" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Tulajdonságok szerkesztése" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Oldalszámok újraszámlálása" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Visszaállít" - -#: links.py:226 -msgid "Download version" -msgstr "Verzió letöltésése" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokumentum" - -#: links.py:245 -msgid "Details" -msgstr "Részletek" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Minden dokumentum" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Kuka" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Előnézet" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Törölje a grafikus ábrázolásokat, hogy felgyorsítsa a dokumentum megjelenítését és az interaktív átalakításokat." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Tulajdonságok" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Dokumentum gyorsítótár ürítése" +#: links/document_links.py:96 +msgid "Print" +msgstr "Nyomtatás" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Kuka ürítése" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "" -#: links.py:287 -msgid "First page" -msgstr "Első oldal" - -#: links.py:292 -msgid "Last page" -msgstr "Utolsó oldal" - -#: links.py:300 -msgid "Previous page" -msgstr "Előző oldal" - -#: links.py:306 -msgid "Next page" -msgstr "Következő oldal" - -#: links.py:318 -msgid "Rotate left" -msgstr "Balra forgat" - -#: links.py:323 -msgid "Rotate right" -msgstr "Jobbra forgat" - -#: links.py:327 -msgid "Page image" -msgstr "Oldal kép" - -#: links.py:332 -msgid "Reset view" -msgstr "Nézet visszaállítása" - -#: links.py:338 -msgid "Zoom in" -msgstr "Közelít" - -#: links.py:344 -msgid "Zoom out" -msgstr "Távolít" - -#: links.py:353 -msgid "Revert" -msgstr "Visszaállít" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Dokumentum típus létrehozása" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Törlés" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Szerkesztés" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Gyorscímke dokumentum típushoz adása" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Gyorscímkék" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Verziók" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Verzió letöltésése" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokumentum" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Részletek" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Visszaállít" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Első oldal" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Utolsó oldal" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Előző oldal" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Következő oldal" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Balra forgat" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Jobbra forgat" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Oldal kép" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Nézet visszaállítása" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Közelít" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Távolít" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Oldalszámok újraszámlálása" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Dokumentum digitalizálás duplikálása" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Kukába dob" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Kuka" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Visszaállít" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Kuka ürítése" + +#: literals.py:32 msgid "Default" msgstr "Alapéretelmezett" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Minden oldal" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "Kukázva?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Kukázás dátuma és ideje" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Hivatkozás?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Dokumentum hivatkozás, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Dokumentum verzió" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Bekapcsolt" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Oldalszám" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Dokumentum oldal" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Dokumentum oldalak" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Az oldalak száma %(page_num)d nagyobb mint a %(document)s oldalainak száma: %(total_pages)d " -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Dátum idő" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Fájlnév" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Dokumentum oldal tárolt képe" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Dokumentum oldal tárolt képei" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "Törlési időegység" msgid "Documents types" msgstr "Dokumentum típusok" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Bekapcsolt" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Gyorscímke" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Időbélyeg" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Megjegyzés" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Állomány" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME típus" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kódolás" @@ -653,7 +654,7 @@ msgstr "Dokumentum törlése" msgid "Trash documents" msgstr "Kukázott dokumentumok" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Dokumentum letöltése" @@ -745,115 +746,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "A felhasználó ennyi fokkal lesz képes elforgatni a dokumentumot oldalt egy lépésben." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Egy dokumentum oldal százalékos (%) nagyításának aránya egy lépésben." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Egy dokumentum oldal százalékos (%) kicsinyítésének aránya egy lépésben." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Egy dokumentum oldal százalékos nagyításának vagy kicsinyítésének aránya egy lépésben." @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Új dokumentumok havonta" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Új dokumentum verziók havonta" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Új dokumentum oldalak havonta" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Dokumentumok számossága havonta" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Dokumentum verziók számossága havonta" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Dokumentum oldalak számossága havonta" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Dokumentum oldalak: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "a dokumentumnak nincs több oldala" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Ez már a dokumentum első oldala" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "%s képe" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,185 +1098,200 @@ msgstr "Hiba a dokumentum verzió visszaállítása közben; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Módosít" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Letöltés" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Hiba %(error)s a dokumentum %(document)s oldal átalakítójának törlése közben." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1320,22 +1350,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/id/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/id/LC_MESSAGES/django.mo index 705e6a6e54..e3dd4113f7 100644 Binary files a/mayan/apps/documents/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/id/LC_MESSAGES/django.po b/mayan/apps/documents/locale/id/LC_MESSAGES/django.po index aa695f7eae..e2db083476 100644 --- a/mayan/apps/documents/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/id/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumen" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Buat tipe dokumen" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Komentar versi" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Pengkodean versi" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Tipe MIME versi" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Halaman-halaman" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikat" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tipe" @@ -78,7 +79,8 @@ msgstr "Total dokumen" msgid "Documents in trash" msgstr "Dokumen dalam tong sampah" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipe dokumen" @@ -107,23 +109,27 @@ msgstr "Versi baru diunggah" msgid "Document properties edited" msgstr "Properti dokumen disunting" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Tipe dokumen diubah" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Tipe dokumen dibuat" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Tipe dokumen disunting" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Versi dokumen dikembalikan" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokumen diriviu" @@ -186,7 +192,7 @@ msgstr "Nihil" msgid "File encoding" msgstr "Pengkodean berkas" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Ukuran berkas" @@ -198,12 +204,12 @@ msgstr "Ada di penyimpanan" msgid "File path in storage" msgstr "Lokasi berkas pada penyimpanan" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Jangkauan halaman" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" -msgstr "Pratinjau" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Properti" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versi" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Hapus" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Favorit" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Tambah ke favorit" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Buang dari favorit" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Pindahkan ke tong sampah" - -#: links.py:137 -msgid "Edit properties" -msgstr "Sunting properti" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Ubah tipe" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Cetak" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Sunting properti" -#: links.py:160 -msgid "Quick download" -msgstr "Unduh cepat" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Hitung ulang jumlah halaman" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Pulihkan" - -#: links.py:226 -msgid "Download version" -msgstr "Unduh versi" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokumen" - -#: links.py:245 -msgid "Details" -msgstr "Detail" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Semua dokumen" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Baru saja diakses" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Baru saja ditambahkan" -#: links.py:264 -msgid "Trash can" -msgstr "Tong sampah" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Pratinjau" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Bersihkan representasi gambar-gambar yang dipergunakan untuk mempercepat menampilkan dokumen dan hasil transformasi interaktif." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Properti" -#: links.py:274 -msgid "Clear document image cache" -msgstr "" +#: links/document_links.py:96 +msgid "Print" +msgstr "Cetak" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Kosongkan tempat sampah" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Unduh cepat" -#: links.py:287 -msgid "First page" -msgstr "Halaman pertama" - -#: links.py:292 -msgid "Last page" -msgstr "Halaman terakhir" - -#: links.py:300 -msgid "Previous page" -msgstr "Halaman sebelumnya" - -#: links.py:306 -msgid "Next page" -msgstr "Halaman berikutnya" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotasi kekiri" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotasi kekanan" - -#: links.py:327 -msgid "Page image" -msgstr "Gambar halaman" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "Besarkan" - -#: links.py:344 -msgid "Zoom out" -msgstr "Kecilkan" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Buat tipe dokumen" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Hapus" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Sunting" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Tambah cepat label ke tipe dokumen" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versi" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Unduh versi" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokumen" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detail" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Halaman pertama" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Halaman terakhir" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Halaman sebelumnya" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Halaman berikutnya" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotasi kekiri" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotasi kekanan" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Gambar halaman" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Besarkan" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Kecilkan" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Hitung ulang jumlah halaman" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Dokumen terduplikasi" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Dokumen pindai terduplikasi" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Favorit" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Tambah ke favorit" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Buang dari favorit" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Pindahkan ke tong sampah" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Tong sampah" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Pulihkan" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Kosongkan tempat sampah" + +#: literals.py:32 msgid "Default" msgstr "Bawaan" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Semua halaman" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "Nama suatu dokumen." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "Ya atau tidak dokumen ini ada di tong sampah." msgid "In trash?" msgstr "Pada tong sampah?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Tanggal dan waktu pada peladen saat dipindahkan ke tong sampah." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Tanggal dan waktu dihapus" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Versi dokumen" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Nomor halaman" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Halaman dokumen" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Halaman dokumen" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Halaman %(page_num)d dari %(total_pages)d untuk %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "tanggal waktu" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "namafile" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Nama tipe dokumen." @@ -564,52 +569,48 @@ msgstr "Unit waktu hapus" msgid "Documents types" msgstr "Tipe dokumen" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Label cepat" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Tanggal dan waktu pada peladen saat versi dokumen diproses." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Teks penjelasan singkat mengenai versi dokumen." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentar" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "File" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Tipe MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Pengkodean versi dokumen. binari 7-bit, binari 8-bit, teks, base64, dll." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Pengkodean" @@ -653,7 +654,7 @@ msgstr "Hapus dokumen" msgid "Trash documents" msgstr "Hapus dokumen" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Unduh dokumen" @@ -745,115 +746,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Perbarui jumlah halaman dokumen" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Unggah versi terbaru dokumen" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Jumlah maksimum dokumen favorit per pengguna" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Jumlah dalam derajat untuk memutar halaman dokumen per interaksi pengguna." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Jumlah maksimal dalam persen (%) yang diperbolehkan bagi pengguna untuk memperbesar tampilan halaman dokumen secara interaktif" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Jumlah minimal dalam persen (%) yang diperbolehkan bagi pengguna untuk memperkecil tampilan halaman dokumen secara interaktif." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Satuan dalam persen untuk memperbesar atau memperkecil tampilan halaman dokumen per interaksi pengguna." @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,38 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Tidak ada halaman lagi dalam dokumen ini" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Anda telah berada pada halaman pertama dari dokumen ini" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,182 +1096,197 @@ msgstr "Masalah dalam mengembalikan versi dokumen; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Unduh" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Masalah dalam menghapus transformasi-transformasi untuk halaman: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1315,22 +1343,6 @@ msgid "Remove the selected document from favorites" msgid_plural "Remove the selected documents from favorites" msgstr[0] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/it/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/it/LC_MESSAGES/django.mo index ce23d0f17f..5f2ef7fb4a 100644 Binary files a/mayan/apps/documents/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/it/LC_MESSAGES/django.po b/mayan/apps/documents/locale/it/LC_MESSAGES/django.po index 8318bdee01..89fed8db33 100644 --- a/mayan/apps/documents/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/it/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" @@ -20,51 +20,52 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documenti" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Creare un tipo di documento" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Ad ogni documento caricato deve essere assegnato un tipo documento, questa è la via più semplice per categorizzare i documenti in Mayan EDMS." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Commento alle versioni" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Codifica delle versioni" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Tipo MIME delle versioni" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Timestamp delle versioni" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatura" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagine" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicati" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tipo" @@ -80,7 +81,8 @@ msgstr "Totale documenti" msgid "Documents in trash" msgstr "Documenti nel cestino" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipi di documento" @@ -109,23 +111,27 @@ msgstr "Nuove versioni caricate" msgid "Document properties edited" msgstr "Modificate proprietà del documento " -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Cambiamenti al tipo di documento" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Tipo di documento creato" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Tipo di documento modificato" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Versioni di documento recuperate" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Documenti visualizzati" @@ -188,7 +194,7 @@ msgstr "Nessuna " msgid "File encoding" msgstr "File encoding" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Dimensioni del file" @@ -200,12 +206,12 @@ msgstr "Esiste nello storage" msgid "File path in storage" msgstr "File path in storage" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Checksum" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Intervallo pagina" @@ -228,196 +234,208 @@ msgid "" "document version correctly." msgstr "Mette l'estensione del file alla fine del nome, consentendo ai sistemi operativi che tengono conto di ciò di aprire versione scaricata del file correttamente." -#: links.py:66 -msgid "Preview" -msgstr "Anteprima " +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Proprietà" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versioni" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Cancella trasformazioni" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Clona trasformazioni" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Cancella" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Preferiti" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Aggiungi ai preferiti" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Rimuovi dai preferiti" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Sposta nel cestino" - -#: links.py:137 -msgid "Edit properties" -msgstr "Modifica proprietà" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Cambia tipo" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Download avanzato" -#: links.py:155 -msgid "Print" -msgstr "Stampa" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Modifica proprietà" -#: links.py:160 -msgid "Quick download" -msgstr "Download rapido" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Ricalcola numero pagine" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Ripristina" - -#: links.py:226 -msgid "Download version" -msgstr "Scarica versione" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Documento" - -#: links.py:245 -msgid "Details" -msgstr "Dettagli" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Tutti i documenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Consultati di recente" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Aggiunti di recente" -#: links.py:264 -msgid "Trash can" -msgstr "Cestino" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Anteprima " -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Cancella le rappresentazioni grafiche utilizzate per accellerare la visualizzazione dei documenti e dei risultati interattivi trasformazioni." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Proprietà" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Pulisci la cache delle immagini dei documenti" +#: links/document_links.py:96 +msgid "Print" +msgstr "Stampa" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Svuota cestino" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Download rapido" -#: links.py:287 -msgid "First page" -msgstr "Prima pagina" - -#: links.py:292 -msgid "Last page" -msgstr "Ultima pagina" - -#: links.py:300 -msgid "Previous page" -msgstr "Pagina precedente" - -#: links.py:306 -msgid "Next page" -msgstr "Pagina successiva" - -#: links.py:318 -msgid "Rotate left" -msgstr "Ruota a sinistra" - -#: links.py:323 -msgid "Rotate right" -msgstr "Ruota a destra" - -#: links.py:327 -msgid "Page image" -msgstr "Immagine della pagina" - -#: links.py:332 -msgid "Reset view" -msgstr "Reset visualizzazione" - -#: links.py:338 -msgid "Zoom in" -msgstr "Zoom in" - -#: links.py:344 -msgid "Zoom out" -msgstr "Zoom out" - -#: links.py:353 -msgid "Revert" -msgstr "Ritornare" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Crea tipo di documento" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Cancella" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Politiche di cancellazione" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Modifica" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Aggiungi un'etichetta rapida al tipo documento" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Etichette rapide" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versioni" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Scarica versione" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Documento" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Dettagli" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Ritornare" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Prima pagina" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Ultima pagina" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Pagina precedente" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Pagina successiva" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Ruota a sinistra" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Ruota a destra" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Immagine della pagina" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Reset visualizzazione" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Zoom in" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Zoom out" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Ricalcola numero pagine" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Documenti duplicati" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Documento scansionato duplicato" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Preferiti" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Aggiungi ai preferiti" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Rimuovi dai preferiti" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Sposta nel cestino" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Cestino" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Ripristina" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Svuota cestino" + +#: literals.py:32 msgid "Default" msgstr "Default" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Tutte le pagine" @@ -431,7 +449,7 @@ msgstr "UUID, ID Universale del Documento. Un identifitacore univoco generato pe msgid "The name of the document." msgstr "Il nome del documento." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -467,69 +485,56 @@ msgstr "Se il documento si trova o no nel cestino." msgid "In trash?" msgstr "Nel cestino?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Data e ora del server in cui il documento è stato messo nel cestino." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Data e ora di spostamento nel cestino" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Un documento troncato è un documento presente sul database che non ha un file scaricato. Potrebbe essere dovuto ad un upload interrotto oppure rimandato per caricarlo via API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Documento troncato?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Documento troncato, ID: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Versione documento" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Abilitato" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Numero di pagina" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Pagina del documento" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Le pagine del documento" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pagina %(page_num)d di %(total_pages)d del %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Data e ora" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nome file" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Immagini pagine documenti in cache" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Immagini pagine documenti in cache" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Nome del tipo di documento." @@ -566,52 +571,48 @@ msgstr "Unità di tempo per cancellare" msgid "Documents types" msgstr "Tipi di documenti" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Abilitato" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Etichetta rapida" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Data e ora del server in cui il documento è stato processato." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Timestamp" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Breve testo opzionale per descrivere la versione del documento." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Commento" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "File" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Il tipo MIME della versione del documento. I tipi MIME sono un modo standard di descrivere il formato del file, in questo caso del documento. Alcuni esempi: \"text/plain\" o \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Tipo MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "La codifica di questa versione del file, es. 7-bit binario, 8-bit binario, testo, base64, ecc." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Codifica" @@ -655,7 +656,7 @@ msgstr "Cancella documenti" msgid "Trash documents" msgstr "Cestina documenti" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Scarica documenti" @@ -747,115 +748,117 @@ msgstr "Controlla la durata del tipo di documento nel cestino" msgid "Delete document stubs" msgstr "Cancella documenti incompleti" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Pulisci la cache immagini" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Aggiorna il conteggio delle pagine del documento" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Carica una nuova versione del documento" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Cerca duplicati del documento" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Percorso per la classe Storage da usare per la cache delle immagini dei documenti." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argomenti da passare a DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Disabilita il primo livello della cache, che memorizza le pagine dei documenti in alta risoluzione, in versione non trasformata." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Disabilita il secondo livello della cache, che memorizza le pagine dei documenti da media a bassa risoluzione, in versione trasformata (ruotati, ingranditi, ecc)." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Numero massimo di documenti preferiti da memorizzare per utente." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Individua l'orientamento di ogni pagina del documento e crea una corrispondente trasformazione per visualizzarlo in modo da essere letto. Questa è una funzionalità sperimentale ed è disattivata di default." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Grandezza dei blocchi da usare nel calcolo del checksum del file del documento. Un valore 0 disabilita il calcolo dei blocchi e l'intero file verrà caricato in memoria." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Lingua di default del documento (in formato ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Elenco delle lingue supportate. In ISO639-3 format." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Tempo in secondi per cui il browser memorizza nella cache le immagini del documento fornite. Il default è 31559626 secondi, che corrisponde a 1 anno." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Massimo numero di documenti aperti di recente (creati, modificati, visualizzati) da ricordare per utente." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Numero massimo di documenti creati di recente da visualizzare." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Quantità di gradi per la rotazione della pagina del documento" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Percorso per la classe Storage da usare per l'archiviazione dei file dei documenti." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argomenti da passare a DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Altezza in pixel dell'immagine anteprima del documento." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Ingrandimento massimo in percentuale (%) da consentire all'utente per una pagina del documento in modo interattivo." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Quantità minima in percentuale (%) per consentire all'utente di ingrandire una pagina di documento in modo interattivo." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Percentuale dello zoom di una pagina del documento per l'interazione dell'utente." @@ -907,27 +910,27 @@ msgstr "Novembre" msgid "December" msgstr "Dicembre" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nuovi documenti per mese" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nuove versioni dei documenti per mese" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nuove pagine di documento per mese" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Totale documenti per ogni mese" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Totale versioni di documento documento per ogni mese" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Totale pagine documento per ogni mese" @@ -951,12 +954,12 @@ msgstr "Nessuna pagina da visualizzare" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Lingua sconosciuta \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -964,28 +967,40 @@ msgid "" "again." msgstr "Questo significa che il documento è in un formato non supportato, è corrotto oppure che l'upload è stato interrotto. Usa il ricalcolo delle pagine documento per provare a rivedere il conteggio delle pagine." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Nessuna pagina documento disponibile" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Pagine del documento: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Non ci sono più pagine in questo documento" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Sei già alla prima pagina del documento" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Immagine di: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1085,185 +1100,200 @@ msgstr "Errore restituito, al ripristino del documento; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Modifica" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Cambia il tipo di documento: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Tipo documento per \"%s\" cambiato con successo." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Scarica" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplicati per il documento: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Modifica le proprietà del documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Anteprima del documento: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Proprietà del documento: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Ricalcolare il conteggio delle pagine del documento selezionato?" msgstr[1] "Ricalcolare il conteggio delle pagine dei documenti selezionati?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Errore nella cancellazione della trasformazione della pagina per il documento:%(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Clonazione delle trasformazioni completata." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Invia" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Stampa: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Questa schermata elenca gli ultimi documenti visti o manipolati in qualche modo da questo account utente." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Non ci sono documenti aperti di recente" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Questa schermata elenca gli ultimi documenti caricati nel sistema." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplicati per il documento: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Non ci sono documenti duplicati." -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Questa schermata elenca gli ultimi documenti visti o manipolati in qualche modo da questo account utente." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Non ci sono documenti aperti di recente" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Questa schermata elenca gli ultimi documenti caricati nel sistema." - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1322,22 +1352,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Cancellare la cache delle immagini documento?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Pulizia della cache documenti in coda completata con successo." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/lv/LC_MESSAGES/django.mo index e924da0784..cf092aed75 100644 Binary files a/mayan/apps/documents/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/lv/LC_MESSAGES/django.po b/mayan/apps/documents/locale/lv/LC_MESSAGES/django.po index 289ad731c2..dca86f9fd0 100644 --- a/mayan/apps/documents/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/lv/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenti" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Izveidojiet dokumenta veidu" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Katram augšupielādētajam dokumentam ir jāpiešķir dokumenta veids, tas ir galvenais veids, kā Mayan EDMS kategorizē dokumentus." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Versiju komentāri" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Versiju kodēšana" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Versiju mime tips" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Versiju laika zīmogs" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Sīktēls" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Lapas" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Dublikāti" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tips" @@ -78,7 +79,8 @@ msgstr "Kopā dokumenti" msgid "Documents in trash" msgstr "Dokumenti miskastē" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Dokumentu veidi" @@ -107,23 +109,27 @@ msgstr "Augšupielādēta jauna versija" msgid "Document properties edited" msgstr "Rediģēti dokumentu rekvizīti" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Dokumenta veids mainīts" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Izveidots dokumenta veids" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Rediģēts dokumenta veids" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Atjaunota dokumenta versija" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Skatīts dokuments" @@ -186,7 +192,7 @@ msgstr "Nav neviens" msgid "File encoding" msgstr "Failu kodēšana" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Faila lielums" @@ -198,12 +204,12 @@ msgstr "Pastāv glabāšanā" msgid "File path in storage" msgstr "Failu ceļš glabāšanā" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Kontrolsumma" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Lapu diapazons" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "Veic faila paplašinājumu un pārvieto to faila nosaukuma beigās, ļaujot operētājsistēmām, kas balstās uz failu paplašinājumiem, pareizi lejupielādēt lejupielādēto dokumentu versiju." -#: links.py:66 -msgid "Preview" -msgstr "Priekšskatījums" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Rekvizīti" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versijas" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Skaidras transformācijas" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Klonu transformācijas" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Dzēst" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Izlase" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Pievienot pie favorītiem" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Noņemt no izlases" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Pārvietot uz miskasti" - -#: links.py:137 -msgid "Edit properties" -msgstr "Rediģējiet rekvizītus" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Mainīt veidu" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Izvērstā lejupielāde" -#: links.py:155 -msgid "Print" -msgstr "Drukāt" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Rediģējiet rekvizītus" -#: links.py:160 -msgid "Quick download" -msgstr "Ātra lejupielāde" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Pārrēķiniet lapu skaitu" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Atjaunot" - -#: links.py:226 -msgid "Download version" -msgstr "Lejupielādēt versiju" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokuments" - -#: links.py:245 -msgid "Details" -msgstr "Detaļas" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Visi dokumenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Nesen piekļuva" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Nesen pievienotās" -#: links.py:264 -msgid "Trash can" -msgstr "Miskaste" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Priekšskatījums" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Notīriet grafikas attēlus, kas izmantoti, lai paātrinātu dokumentu displeju un interaktīvās transformācijas rezultātus." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Rekvizīti" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Notīrīt dokumentu attēla kešatmiņu" +#: links/document_links.py:96 +msgid "Print" +msgstr "Drukāt" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Iztukšojiet miskasti" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Ātra lejupielāde" -#: links.py:287 -msgid "First page" -msgstr "Pirmā lapa" - -#: links.py:292 -msgid "Last page" -msgstr "Pēdējā lapa" - -#: links.py:300 -msgid "Previous page" -msgstr "Iepriekšējā lapa" - -#: links.py:306 -msgid "Next page" -msgstr "Nākamā lapaspuse" - -#: links.py:318 -msgid "Rotate left" -msgstr "Pagrieziet pa kreisi" - -#: links.py:323 -msgid "Rotate right" -msgstr "Pagrieziet pa labi" - -#: links.py:327 -msgid "Page image" -msgstr "Lapas attēls" - -#: links.py:332 -msgid "Reset view" -msgstr "Atjaunot skatu" - -#: links.py:338 -msgid "Zoom in" -msgstr "Pietuvināt" - -#: links.py:344 -msgid "Zoom out" -msgstr "Attālināt" - -#: links.py:353 -msgid "Revert" -msgstr "Atgriezties" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Izveidot dokumenta veidu" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Dzēst" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Dzēšanas politika" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Rediģēt" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Pievienojiet dokumenta tipam ātru etiķeti" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Ātrās uzlīmes" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versijas" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Lejupielādēt versiju" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokuments" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detaļas" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Atgriezties" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Pirmā lapa" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Pēdējā lapa" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Iepriekšējā lapa" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Nākamā lapaspuse" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Pagrieziet pa kreisi" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Pagrieziet pa labi" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Lapas attēls" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Atjaunot skatu" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Pietuvināt" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Attālināt" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Pārrēķiniet lapu skaitu" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Dublētie dokumenti" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Dokumentu dublēšana" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Izlase" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Pievienot pie favorītiem" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Noņemt no izlases" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Pārvietot uz miskasti" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Miskaste" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Atjaunot" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Iztukšojiet miskasti" + +#: literals.py:32 msgid "Default" msgstr "Noklusējums" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Visas lapas" @@ -429,7 +447,7 @@ msgstr "Dokumenta UUID, universāli unikāls ID. Katram dokumentam izveidots uni msgid "The name of the document." msgstr "Dokumenta nosaukums." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "Neatkarīgi no tā, vai šis dokuments ir atkritumos." msgid "In trash?" msgstr "Miskastē?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Servera datums un laiks, kad dokuments tika pārvietots uz miskasti." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Datums un laiks, kas izgāztas" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Dokumenta gabals ir dokuments ar ierakstu datubāzē, bet neviens fails nav augšupielādēts. Tas varētu būt pārtraukta augšupielāde vai atlikta augšupielāde, izmantojot API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Vai stubs?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Dokumenta papīrs, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Dokumenta versija" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Iespējots" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Lapas numurs" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Dokumenta lapa" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Dokumenta lapas" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Lapa %(page_num)d no %(total_pages)d no %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Datums Laiks" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Faila nosaukums" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Dokumenta lapas kešatmiņā saglabāts attēls" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Dokumenta lapas kešatmiņā saglabātie attēli" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Dokumenta veida nosaukums." @@ -564,52 +569,48 @@ msgstr "Dzēst laika vienību" msgid "Documents types" msgstr "Dokumentu veidi" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Iespējots" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Ātra uzlīme" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Servera datums un laiks, kad dokumenta versija tika apstrādāta." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Laika zīmogs" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Izvēles īss teksts, kas apraksta dokumenta versiju." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentārs" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Fails" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Dokumenta versijas fails ir mimetype. MIME veidi ir standarta veids, kā aprakstīt faila formātu, šajā gadījumā dokumenta faila formātu. Daži piemēri: \"text/plain\" vai \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME tips" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Dokumenta versijas faila kodējums. binārā 7 bitu, binārā 8 bitu, teksta, bāzes64 utt." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kodēšana" @@ -653,7 +654,7 @@ msgstr "Dzēst dokumentus" msgid "Trash documents" msgstr "Atkritumu dokumenti" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Lejupielādējiet dokumentus" @@ -745,115 +746,117 @@ msgstr "Pārbaudiet dokumentu veida miskasti" msgid "Delete document stubs" msgstr "Dzēsiet dokumenta gabalus" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Notīrīt attēlu kešatmiņu" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Atjauniniet dokumenta lapas skaitu" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Augšupielādējiet jaunu dokumenta versiju" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Skenēt dokumentu dublikātus" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Ceļš uz glabāšanas apakšklasi, ko izmanto, saglabājot kešatmiņā saglabāto dokumentu attēlu failus." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argumenti, kas jānodod DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Atspējo pirmo kešatmiņas pakāpi, kurā tiek glabātas augstas izšķirtspējas, pārveidotu dokumentu lapu versijas." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Atspējo otro kešatmiņas pakāpi, kurā tiek saglabātas vidēja līdz zema izšķirtspēja, pārveidotas (pagrieztas, tālinātas utt.) Dokumentu lapu versijas." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Maksimālais iecienīto dokumentu skaits, kas jāatceras katram lietotājam." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Atklājiet katra dokumenta lapas orientāciju un izveidojiet atbilstošu rotācijas transformāciju, lai parādītu to tiesības uz augšu. Šī ir eksperimentāla funkcija un pēc noklusējuma tā ir atspējota." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Datu faila kontrolsummas aprēķināšanai izmantojamo bloku lielums. Vērtība 0 atspējo bloku aprēķinu un viss fails tiks ielādēts atmiņā." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Noklusējuma dokumentu valoda (ISO639-3 formātā)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Atbalstīto dokumentu valodu saraksts. ISO639-3 formātā." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Laiks sekundēs, kad pārlūkam ir jāsniedz piegādāto dokumentu attēlu kešatmiņa. Noklusējuma vērtība 31559626 sekundes atbilst 1 gadam." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Maksimālais skaits nesen piekļūto (izveidoto, rediģēto, skatīto) dokumentu, kas jāatceras katram lietotājam." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Maksimālais nesen izveidoto dokumentu skaits." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Summa grādos, lai pagrieztu dokumenta lapu katrai lietotāja mijiedarbībai." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Ceļš uz glabāšanas apakšklasi, ko var izmantot, glabājot dokumentu failus." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argumenti, kas jānodod DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Dokumenta sīktēla attēla pikseļu augstums." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maksimālā summa procentos (%), lai ļautu lietotājam interaktīvi tuvināt dokumenta lapu." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimālā summa procentos (%), lai ļautu lietotājam interaktīvi attālināt dokumentu lapu." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Summa, kas procentos palielināta vai samazināta dokumenta lappusē katrai lietotāja mijiedarbībai." @@ -905,27 +908,27 @@ msgstr "Novembris" msgid "December" msgstr "Decembrī" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Jauni dokumenti mēnesī" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Jaunas dokumentu versijas mēnesī" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Jaunas dokumentu lapas mēnesī" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Kopējie dokumenti katru mēnesi" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Kopējais dokumentu skaits katrā mēnesī" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Kopā dokumentu lapas katru mēnesi" @@ -949,12 +952,12 @@ msgstr "Parādāmās lapas nav" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Nezināma valoda \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,42 @@ msgid "" "again." msgstr "Tas varētu nozīmēt, ka dokuments ir tādā formātā, kas netiek atbalstīts, vai tas ir bojāts vai augšupielādes process tika pārtraukts. Izmantojiet dokumenta lapas pārrēķināšanas darbību, lai mēģinātu atkārtoti apskatīt lapu skaitu." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Dokumentu lapas nav pieejamas" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Dokumenta lapas: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Šajā dokumentā vairs nav lapu" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Jūs jau atrodaties šī dokumenta pirmajā lapā" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Attēls no: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,189 +1100,204 @@ msgstr "Atgriežot dokumenta versiju, radās kļūda; %s" msgid "Preview of document version: %s" msgstr "Dokumenta versijas priekšskatījums: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Ielādējot dokumentu sarakstu, radās kļūda: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Tas varētu nozīmēt, ka neviens dokuments nav augšupielādēts vai ka jūsu lietotāja kontam nav piešķirta neviena dokumenta vai dokumenta veida skatījuma atļauja." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Nav pieejami dokumenti" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Dokumenta tipa maiņas pieprasījums, kas veikts dokumentā %(count)d" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Dokumenta tipa maiņas pieprasījums, kas veikts dokumentos %(count)d" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Mainīt" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Mainiet atlasīto dokumentu veidu" msgstr[1] "Mainiet izvēlētā dokumenta veidu" msgstr[2] "Mainiet atlasīto dokumentu veidu" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Mainiet dokumenta veidu: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Dokumenta tips \"%s\" veiksmīgi mainīts." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Lejupielādēt" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Šajā sarakstā būs redzamas tikai precīzas šī dokumenta kopijas." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Šim dokumentam nav dublikātu" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Dokumenta dublikāti: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Dokumenta rekvizītu rediģēšana: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Dokumenta priekšskatījums: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Dokumenta rekvizīti: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d dokuments, kas ir rindā, lai pārrēķinātu lapas" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d dokumenti, kas ir rindā, lai pārrēķinātu lapas" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Vai pārrēķināt atlasīto dokumentu lapu skaitu?" msgstr[1] "Vai pārrēķināt izvēlētā dokumenta lapu skaitu?" msgstr[2] "Vai pārrēķināt atlasīto dokumentu lapu skaitu?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Pārrēķināt dokumenta lapu skaitu: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Dokuments \"%(document)s\" ir tukšs. Pirms mēģināt atklāt lapas skaitu, augšupielādējiet vismaz vienu dokumentu versiju." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Transformācijas skaidrs pieprasījums, kas apstrādāts dokumentā %(count)d" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Transformācijas skaidrais pieprasījums, kas apstrādāts dokumentiem %(count)d" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Vai izdzēst visas atlasītās dokumenta lapas transformācijas?" msgstr[1] "Vai izdzēst visas atlasītās dokumenta lapas transformācijas?" msgstr[2] "Vai izdzēst visas atlasītās dokumenta lapas transformācijas?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Notīriet visas dokumenta lapas transformācijas: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Kļūda, izdzēšot lapas pārveidojumus dokumentam: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformācijas veiksmīgi klonēja." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Iesniegt" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Klonēšanas lapu pārveidojumi dokumentam: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Drukāt: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Šajā skatā tiks uzskaitīti jaunākie dokumenti, kurus šī lietotāja konts jebkādā veidā skatījis vai manipulē." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Pēdējā laikā nav pieejams dokuments" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Šajā skatā tiks uzskaitīti jaunākie sistēmā augšupielādētie dokumenti." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Nav nesen pievienota dokumenta" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Šajā sarakstā būs redzamas tikai precīzas šī dokumenta kopijas." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Šim dokumentam nav dublikātu" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Dokumenta dublikāti: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Dublikāti ir dokumenti, kas sastāv no tā paša faila līdz pēdējam baitam. Faili, kuriem ir tāds pats teksts vai OCR, bet nav identiski vai tika saglabāti, izmantojot citu failu formātu, netiks parādīti kā dublikāti." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Nav dublētu dokumentu" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Šajā skatā tiks uzskaitīti jaunākie dokumenti, kurus šī lietotāja konts jebkādā veidā skatījis vai manipulē." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Meklējiet dublētus dokumentus?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Pēdējā laikā nav pieejams dokuments" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Šajā skatā tiks uzskaitīti jaunākie sistēmā augšupielādētie dokumenti." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Nav nesen pievienota dokumenta" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Dublētais dokumenta skenēšana veiksmīgi tika rindā." #: views/favorite_document_views.py:33 #, python-format @@ -1325,22 +1357,6 @@ msgstr[0] "Noņemiet atlasītos dokumentus no izlases" msgstr[1] "Noņemiet izvēlēto dokumentu no izlases" msgstr[2] "Noņemiet atlasītos dokumentus no izlases" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Notīriet dokumenta attēla kešatmiņu?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Dokumenta kešatmiņas tīrīšana veiksmīgi rindā." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Meklējiet dublētus dokumentus?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Dublētais dokumenta skenēšana veiksmīgi tika rindā." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.mo index 0a94477191..b64fdca0ca 100644 Binary files a/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.po index 540de75fb6..8e226a53d0 100644 --- a/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/nl_NL/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" @@ -19,51 +19,52 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documenten" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Een documentsoort aanmaken" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Thumbnail" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagina's" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Type" @@ -79,7 +80,8 @@ msgstr "" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Documentsoorten" @@ -108,23 +110,27 @@ msgstr "Nieuwe versie geüpload" msgid "Document properties edited" msgstr "Documenteigenschappen bewerkt" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Documentsoort veranderd" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Documentversie teruggedraaid" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Document bekeken" @@ -187,7 +193,7 @@ msgstr "Geen" msgid "File encoding" msgstr "Bestand encoderen" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Bestandgrootte" @@ -199,12 +205,12 @@ msgstr "Aanwezig in opslag" msgid "File path in storage" msgstr "Bestandspad in opslag" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Checksum" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Pagina bereik" @@ -227,196 +233,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" -msgstr "Preview" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Eigenschappen" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versies" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Verwijder" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Verplaats naar trash" - -#: links.py:137 -msgid "Edit properties" -msgstr "Bewerk eigenschappen" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Verander soort" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Printe" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Bewerk eigenschappen" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Aantal bladzijden herberekenen" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Document" - -#: links.py:245 -msgid "Details" -msgstr "Gegevens" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Alle documenten" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Preview" + +#: links/document_links.py:90 +msgid "Properties" +msgstr "Eigenschappen" + +#: links/document_links.py:96 +msgid "Print" +msgstr "Printe" + +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Opschonen van de grafische afbeeldingen, die gebuikt worden bij het versnellen van de documentweergave en interactive transformatie resultaten." - -#: links.py:274 -msgid "Clear document image cache" -msgstr "" - -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "" - -#: links.py:287 -msgid "First page" -msgstr "Eerste bladzijde" - -#: links.py:292 -msgid "Last page" -msgstr "Laatste bladzijde" - -#: links.py:300 -msgid "Previous page" -msgstr "Vorige bladzijde" - -#: links.py:306 -msgid "Next page" -msgstr "Volgende bladzijde" - -#: links.py:318 -msgid "Rotate left" -msgstr "Daai linksom" - -#: links.py:323 -msgid "Rotate right" -msgstr "Draai rechtsom" - -#: links.py:327 -msgid "Page image" -msgstr "Pagina afbeelding" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "Inzoomen" - -#: links.py:344 -msgid "Zoom out" -msgstr "Uitzoomen" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Verwijder" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "bewerken" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versies" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Document" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Gegevens" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Eerste bladzijde" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Laatste bladzijde" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Vorige bladzijde" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Volgende bladzijde" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Daai linksom" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Draai rechtsom" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Pagina afbeelding" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Inzoomen" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Uitzoomen" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Aantal bladzijden herberekenen" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Verplaats naar trash" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "Verstekwaarde" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Alle bladzijden" @@ -430,7 +448,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -466,69 +484,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Documentversie" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Ingeschakeld" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Paginanummer" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Documentpagina" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pagina %(page_num)d van %(total_pages)d in %(document)s " -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Datum en tijd" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Bestandsnaam" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -565,52 +570,48 @@ msgstr "" msgid "Documents types" msgstr "Documenttypes" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Ingeschakeld" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Timestamp" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Commentaar" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Bestand" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME type" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -654,7 +655,7 @@ msgstr "Documenten verwijderen" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Documenten downloaden" @@ -746,115 +747,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Aantal graden documentpagina rotatie per gebruikeractie." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maximaal toegestane documentpagina zoom percentage (%) per gebruikeractie." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimaal toegestane documentpagina zoom percentage (%) per gebruikeractie. " -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Percentage in- of uitzoomen voor documentpagina per gebruikeractie." @@ -906,27 +909,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nieuwe documenten per maand" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nieuwe documentversies per maand" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nieuwe documentpagina's per maand" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -950,12 +953,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -963,28 +966,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Er zijn verder geen pagina's meer in dit document" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "U bent al op de eerste pagina in dit document" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1084,185 +1099,200 @@ msgstr "Fout bij het terugvoeren van de documentversie. Foutmelding: %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Documenttype voor \"%s\" succesvol veranderd." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Download" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Bewerk eigenschappen van document: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Eigenschappen voor document: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Fout bij verwijderen van de pagina transformaties voor document: %(document)s ; %(error)s ." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Verstuur" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Afdrukken: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1321,22 +1351,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/pl/LC_MESSAGES/django.mo index 95c16e7242..f39d26f379 100644 Binary files a/mayan/apps/documents/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/pl/LC_MESSAGES/django.po b/mayan/apps/documents/locale/pl/LC_MESSAGES/django.po index eb56c04a85..89d4956e3f 100644 --- a/mayan/apps/documents/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/pl/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" @@ -20,51 +20,52 @@ msgstr "" "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:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenty" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Utwórz typ dokumentu" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Każdy przesłany dokument musi mieć przypisany typ dokumentu, ponieważ jest to podstawowy sposób kategoryzacji dokumentów w Mayan EDMS." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Wersja komentarza" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Wersja odkodowania" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Wersja rodzaju MIME" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniaturka" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Strony" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikaty" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Typ" @@ -80,7 +81,8 @@ msgstr "Razem dokumenty" msgid "Documents in trash" msgstr "Dokumenty w koszu" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Typy dokumentów" @@ -109,23 +111,27 @@ msgstr "Nowa wersja została przesłana" msgid "Document properties edited" msgstr "Właściwości dokumentu zostały zmodyfikowane" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Właściwości dokumentu zostały zmodyfikowane" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Typ dokumentu został utworzony." -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Typ dokumentu został zmieniony." -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Wersja dokumentu została przywrócona" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Dokument przeglądany" @@ -188,7 +194,7 @@ msgstr "Brak" msgid "File encoding" msgstr "Kodowanie pliku" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Rozmiar pliku" @@ -200,12 +206,12 @@ msgstr "Istnieje w systemie" msgid "File path in storage" msgstr "Ścieżka pliku w systemie" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Suma kontrolna" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Zakres stron" @@ -228,196 +234,208 @@ msgid "" "document version correctly." msgstr "Pobiera rozszerzenie pliku i łączy je z nazwą pliku umożliwiając systemom operacyjnym poprawnie otworzyć pobraną wersję dokumentu." -#: links.py:66 -msgid "Preview" -msgstr "Podgląd" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Właściwości" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Wersje" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Wyczyść transformacje" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Sklonuj przekształcenia" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Usuń" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Ulubione" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Dodaj do ulubionych" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Usuń z ulubionych" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Przenieś do kosza" - -#: links.py:137 -msgid "Edit properties" -msgstr "Edytuj właściwości" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Zmień typ" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Pobieranie zaawansowane" -#: links.py:155 -msgid "Print" -msgstr "Drukuj" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Edytuj właściwości" -#: links.py:160 -msgid "Quick download" -msgstr "Szybkie pobieranie" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Przelicz liczbę stron" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Odtwórz" - -#: links.py:226 -msgid "Download version" -msgstr "Pobierz wersję" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Szczegóły" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Wszystkie dokumenty" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Ostatnio przeglądane" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Ostatnio dodane" -#: links.py:264 -msgid "Trash can" -msgstr "Kosz" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Podgląd" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Wyczyść reprezentacje grafiki przyspieszające wyświetlanie dokumentów i wyniki interaktywnych przekształceń." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Właściwości" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Wyczyść pamięć podręczną obrazu dokumentu" +#: links/document_links.py:96 +msgid "Print" +msgstr "Drukuj" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Opróżnij kosz" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Szybkie pobieranie" -#: links.py:287 -msgid "First page" -msgstr "Pierwsza strona" - -#: links.py:292 -msgid "Last page" -msgstr "Ostatnia strona" - -#: links.py:300 -msgid "Previous page" -msgstr "Poprzednia strona" - -#: links.py:306 -msgid "Next page" -msgstr "Następna strona" - -#: links.py:318 -msgid "Rotate left" -msgstr "Obrót w lewo" - -#: links.py:323 -msgid "Rotate right" -msgstr "Obrót w prawo" - -#: links.py:327 -msgid "Page image" -msgstr "Obraz strony" - -#: links.py:332 -msgid "Reset view" -msgstr "Resetuj widok" - -#: links.py:338 -msgid "Zoom in" -msgstr "Powiększ" - -#: links.py:344 -msgid "Zoom out" -msgstr "Pomniejszyć" - -#: links.py:353 -msgid "Revert" -msgstr "Przywróć" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Tworzenie typów dokumentów" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Usuń" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Zasady usuwania" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Edytuj" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Dodaj szybką etykietę do typu dokumentu" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Szybkie etykiety" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Wersje" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Pobierz wersję" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Szczegóły" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Przywróć" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Pierwsza strona" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Ostatnia strona" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Poprzednia strona" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Następna strona" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Obrót w lewo" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Obrót w prawo" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Obraz strony" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Resetuj widok" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Powiększ" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Pomniejszyć" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Przelicz liczbę stron" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Zdublowane dokumenty" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Zduplikowany skan dokumentu" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Ulubione" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Dodaj do ulubionych" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Usuń z ulubionych" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Przenieś do kosza" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Kosz" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Odtwórz" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Opróżnij kosz" + +#: literals.py:32 msgid "Default" msgstr "Domyślne" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Wszystkie strony" @@ -431,7 +449,7 @@ msgstr "UUID dokumentu to jego unikatowy identyfikator. Generowany jest dla każ msgid "The name of the document." msgstr "Nawa dokumentu." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -467,69 +485,56 @@ msgstr "" msgid "In trash?" msgstr "W koszu?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Data i czas kosza" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Niepełny dokument jest dokumentem z wpisem w bazie danych bez przesłanego pliku. Może się to zdarzyć podczas przerwania przesyłania pliku do systemu lub zawieszenia przesyłania poprzez API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Czy niepełny?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Niepełny dokument, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Wersja dokumentu" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Włączone" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Numer strony" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Strona dokumentu" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Strony dokumentu" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Strona %(page_num)d z %(total_pages)d stron dokumentu %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Data i godzina" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nazwa" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Obraz strony dokumentu w pamięci podręcznej" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Obrazy strony dokumentu w pamięci podręcznej" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Nazwa typu dokumentu." @@ -566,52 +571,48 @@ msgstr "Jednostka czasu dotycząca usunięcia dokumentu" msgid "Documents types" msgstr "Typy dokumentów" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Włączone" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Szybka etykieta" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Pieczęć czasu" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentarz" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Plik" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Typ MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kodowanie" @@ -655,7 +656,7 @@ msgstr "Usuwanie dokumentów" msgid "Trash documents" msgstr "Dokumenty w koszu" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Pobieranie dokumentów" @@ -747,115 +748,117 @@ msgstr "Sprawdź okresy umieszczania typów dokumentów w koszu" msgid "Delete document stubs" msgstr "Usuń niepełne dokumenty" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Usuń obrazy dokumentów z pamięci podręcznej" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Aktualizuj liczbę stron dokumentu" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Prześlij nową wersję dokumentu" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Wyszukaj duplikatów dokumentów." -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Ścieżka na dysku do zapamiętywania tymczasowych obrazów dokumentu. " -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Wyłącza pierwszy poziom pamięci podręcznej, która przechowuje strony dokumentu w wersjach o wysokiej rozdzielczości, nieprzekształcone." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Wyłącza drugi poziom pamięci podręcznej, która przechowuje strony dokumentu w wersjach od średniej do niskiej rozdzielczości, przekształcone (obrócone, powiększone, itp.)." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Kąt obrotu strony dokumentu przez użytkownika." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Maksymalna, procentowa (%) skala powiększenia strony dokumentu przez użytkownika." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Minimalna, procentowa (%) skala pomniejszenia strony dokumentu przez użytkownika." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Liczba punktów procentowych powiększenia lub pomniejszenia strony dokumentu przez użytkownika." @@ -907,27 +910,27 @@ msgstr "Listopad" msgid "December" msgstr "Grudzień" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Nowe dokumenty miesięcznie" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nowe wersje dokumentów miesięcznie" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nowe strony dokumentów miesięcznie" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Liczba dokumentów w każdym miesiącu" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Liczba wersji dokumentów w każdym miesiącu" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Liczba stron dokumentów w każdym miesiącu" @@ -951,12 +954,12 @@ msgstr "Brak stron do wyświetlenia" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Nieznany język : \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -964,28 +967,44 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Strony dokumentu są niedostępne" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Strony dokumentu: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Ten dokument nie zawiera więcej stron" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Jesteś już na pierwszej stronie tego dokumentu" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Obraz dokumentu: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1085,37 +1104,37 @@ msgstr "Błąd podczas przywracania wersji dokumentu: %s" msgid "Preview of document version: %s" msgstr "Podgląd wersji dokumentu: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Dokumenty nie są dostępne" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Żądanie zmiany typu dokumentu wykonano na %(count)d dokumencie" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Żądanie zmiany typu dokumentu wykonano na %(count)d dokumentach" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Zmień" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Zmień typ wybranego dokumentu" @@ -1123,59 +1142,46 @@ msgstr[1] "Zmień typ wybranych dokumentów" msgstr[2] "Zmień typ wybranych dokumentów" msgstr[3] "Zmień typ wybranych dokumentów" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Zmień typ dokumentu: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Typ dokumentu \"%s\" zmieniono pomyślnie." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Pobierz" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Jedynie dokładne kopie tego dokumentu będą wyświetlane na liście." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Brak duplikatów tego dokumentu." - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplikaty dokumentu: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Edytuj właściwości dokumentu: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Podgląd dokumentu: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Właściwości dokumentu: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d dokument dodano do kolejki przeliczenia liczby stron" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d dokumentów dodano do kolejki przeliczenia liczby stron" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Przeliczyć liczbę stron wybranego dokumentu?" @@ -1183,29 +1189,29 @@ msgstr[1] "Przeliczyć liczbę stron wybranego dokumentu?" msgstr[2] "Przeliczyć liczbę stron wybranego dokumentu?" msgstr[3] "Przeliczyć liczbę stron wybranych dokumentów?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Przeliczyć liczbę stron dokumentu: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Dokument \"%(document)s\" jest pusty. Załaduj ostatnią wersję dokumentu przed wyliczaniem ilości stron." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Żądanie usunięcia przekształcenia wykonano dla %(count)d dokumentu" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Żądanie usunięcia przekształcenia wykonano dla %(count)d dokumentów" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Usunąć wszystkie przekształcenia strony dla wybranego dokumentu?" @@ -1213,64 +1219,92 @@ msgstr[1] "Usunąć wszystkie przekształcenia strony dla wybranego dokumentu?" msgstr[2] "Usunąć wszystkie przekształcenia strony dla wybranego dokumentu?" msgstr[3] "Usunąć wszystkie przekształcenia strony dla wybranego dokumentu?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Usunąć wszystkie przekształcenia strony dla dokumentu: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Błąd podczas usuwania przekształceń strony dla dokumentu: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Sklonowano transformacje pomyślnie." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Wykonaj" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Sklonuj transformacje strony dla dokumentu: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Wydruk: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Jedynie dokładne kopie tego dokumentu będą wyświetlane na liście." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Brak duplikatów tego dokumentu." + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplikaty dokumentu: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Wyszukać zdublowane dokumenty?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Skanowanie zduplikowanych dokumentów dodano pomyślnie do kolejki wykonania." #: views/favorite_document_views.py:33 #, python-format @@ -1332,22 +1366,6 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Wyczyścić pamięć podręczną obrazów dokumentów?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Czyszczenie pamięci podręcznej dokumentów dodano pomyślnie do kolejki wykonania." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Wyszukać zdublowane dokumenty?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Skanowanie zduplikowanych dokumentów dodano pomyślnie do kolejki wykonania." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/pt/LC_MESSAGES/django.mo index f78998c974..94158bb515 100644 Binary files a/mayan/apps/documents/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/pt/LC_MESSAGES/django.po b/mayan/apps/documents/locale/pt/LC_MESSAGES/django.po index 56215fbf77..ae36e11bc5 100644 --- a/mayan/apps/documents/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/pt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -17,51 +17,52 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documentos" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "" @@ -77,7 +78,8 @@ msgstr "" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "" @@ -106,23 +108,27 @@ msgstr "" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -185,7 +191,7 @@ msgstr "Nenhum" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Tamanho do ficheiro" @@ -197,12 +203,12 @@ msgstr "Existe no armazenamento" msgid "File path in storage" msgstr "Caminho do ficheiro no armazenamento" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Soma de verificação" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Intervalo de páginas" @@ -225,196 +231,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Eliminar" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "" - -#: links.py:245 -msgid "Details" -msgstr "Detalhes" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Limpar as representações gráficas usadas para acelerar a exibição e transformações interativas de documentos." - -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" +#: links/document_links.py:96 +msgid "Print" msgstr "" -#: links.py:287 -msgid "First page" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:292 -msgid "Last page" -msgstr "" - -#: links.py:300 -msgid "Previous page" -msgstr "" - -#: links.py:306 -msgid "Next page" -msgstr "" - -#: links.py:318 -msgid "Rotate left" -msgstr "" - -#: links.py:323 -msgid "Rotate right" -msgstr "" - -#: links.py:327 -msgid "Page image" -msgstr "Imagem da página" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "" - -#: links.py:344 -msgid "Zoom out" -msgstr "" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Eliminar" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Editar" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detalhes" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Imagem da página" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "Padrão" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "" @@ -428,7 +446,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -464,69 +482,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Página %(page_num)d de %(total_pages)d de %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nome do ficheiro" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -563,52 +568,48 @@ msgstr "" msgid "Documents types" msgstr "" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Comentário" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Ficheiro" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Tipo MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -652,7 +653,7 @@ msgstr "Excluir documentos" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Descarregar documentos" @@ -744,115 +745,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Valor em graus para rodar uma página de documento por interação do utilizador." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Percentagem (%) máxima para o utilizador aumentar o zoom de uma página de documento de forma interativa." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Percentagem (%) mínima para o utilizador diminuir o zoom de uma página de documento de forma interativa." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Percentagem de zoom in/out por interação do utilizador." @@ -904,27 +907,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -948,12 +951,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -961,28 +964,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Não há mais páginas neste documento" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Já está na primeira página deste documento" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1082,185 +1097,200 @@ msgstr "Erro ao reverter versão do documento; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Descarregar" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" msgstr[1] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Erro ao excluir as transformações de página para o documento: %(document)s; %(error)s ." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Submeter" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1319,22 +1349,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.mo index 51c5e3e966..6b1784907c 100644 Binary files a/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.po index ed327b96c1..1c5af14ac1 100644 --- a/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/pt_BR/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -20,51 +20,52 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documento" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Criar tipo de documento" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "A cada documento carregado deve ser atribuído um tipo de documento, é a forma básica pela qual o Mayan EDMS categoriza os documentos." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Comentário de versões" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Codificação de versões" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Tipo MIME de versões" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Registro de data e hora das versões" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatura" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicados" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tipo" @@ -80,7 +81,8 @@ msgstr "Total de documentos" msgid "Documents in trash" msgstr "Documentos na lixeira" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipos de documentos" @@ -109,23 +111,27 @@ msgstr "Nova versão carregada" msgid "Document properties edited" msgstr "Propriedades do documento editadas" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Tipo de documento alterado" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Tipo de documento criado" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Tipo de documento editado" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Versão de documento revertida" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Documento visualizado" @@ -188,7 +194,7 @@ msgstr "Nenhum" msgid "File encoding" msgstr "Codificação de arquivo" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Tamanho do arquivo" @@ -200,12 +206,12 @@ msgstr "Existe no armazenamento" msgid "File path in storage" msgstr "Caminho do arquivo no armazenamento" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Verificação" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Intervalo de páginas" @@ -228,196 +234,208 @@ msgid "" "document version correctly." msgstr "Toma e move a extensão do arquivo para o final do seu nome, permitindo aos sistemas operacionais que utilizam extensões de arquivo abrir a versão baixada do documento corretamente." -#: links.py:66 -msgid "Preview" -msgstr "Visualizar" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Propriedades" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versão" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Remover transformações" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Transformações de clones" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Excluir" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Favoritos" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Adicionar aos favoritos" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Remover dos favoritos" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Mover para a lixeira" - -#: links.py:137 -msgid "Edit properties" -msgstr "Editar propriedades" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Mudar o tipo" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Download avançado" -#: links.py:155 -msgid "Print" -msgstr "Imprimir" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Editar propriedades" -#: links.py:160 -msgid "Quick download" -msgstr "Download rápido" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Recalcular a contagem de páginas" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Restaurar" - -#: links.py:226 -msgid "Download version" -msgstr "Baixar a versão" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Documento" - -#: links.py:245 -msgid "Details" -msgstr "Detalhes" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Todos os Documentos" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Acessado recentemente" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Adicionado recentemente" -#: links.py:264 -msgid "Trash can" -msgstr "Lixeira" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Visualizar" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Desmarque as representações gráficas utilizadas para acelerar a exibição e transformações interativas resultados dos documentos." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Propriedades" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Apagar o cache de imagens de documentos" +#: links/document_links.py:96 +msgid "Print" +msgstr "Imprimir" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Esvaziar a lixeira" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Download rápido" -#: links.py:287 -msgid "First page" -msgstr "Primeira página" - -#: links.py:292 -msgid "Last page" -msgstr "Última pagina" - -#: links.py:300 -msgid "Previous page" -msgstr "Página anterior" - -#: links.py:306 -msgid "Next page" -msgstr "Próxima pagina" - -#: links.py:318 -msgid "Rotate left" -msgstr "Girar para a esquerda" - -#: links.py:323 -msgid "Rotate right" -msgstr "Girar para a direita" - -#: links.py:327 -msgid "Page image" -msgstr "Imagem da página" - -#: links.py:332 -msgid "Reset view" -msgstr "Redefinir visão" - -#: links.py:338 -msgid "Zoom in" -msgstr "Mais zoom" - -#: links.py:344 -msgid "Zoom out" -msgstr "Menos zoom" - -#: links.py:353 -msgid "Revert" -msgstr "Reverter" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Criar Tipo de documento" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Excluir" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Editar" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Adicionar etiqueta rápida ao tipo de documento" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Etiquetas rápidas" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versão" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Baixar a versão" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Documento" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detalhes" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Reverter" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Primeira página" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Última pagina" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Página anterior" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Próxima pagina" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Girar para a esquerda" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Girar para a direita" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Imagem da página" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Redefinir visão" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Mais zoom" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Menos zoom" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Recalcular a contagem de páginas" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Documentos duplicados" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Busca por documentos duplicados" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Favoritos" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Adicionar aos favoritos" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Remover dos favoritos" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Mover para a lixeira" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Lixeira" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Restaurar" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Esvaziar a lixeira" + +#: literals.py:32 msgid "Default" msgstr "Padrão" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Todas as páginas" @@ -431,7 +449,7 @@ msgstr "" msgid "The name of the document." msgstr "O nome do documento." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -467,69 +485,56 @@ msgstr "Se o documento está ou não na lixeira." msgid "In trash?" msgstr "Na lixeira?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Data e hora do servidor quando o documento foi movido para a lixeira." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Data e hora de envio à lixeira" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Um rascunho de documento é um documento com uma entrada no banco de dados, mas nenhum arquivo carregado. Isso pode ser um envio interrompido ou um envio diferido por meio da API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "É um rascunho?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Documento rascunho, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Versão do Documento" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Habilitado" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Página número" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Página do documento" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Páginas do documento" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pagina %(page_num)d de %(total_pages)d em %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Data e hora" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nome do arquivo" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Imagem do documento em cache" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Imagens em cache da página do documento" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "O nome do tipo de documento." @@ -566,52 +571,48 @@ msgstr "Unidade de tempo de eliminação" msgid "Documents types" msgstr "Tipos de Documentos" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Habilitado" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Rótulo rápido" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Data e hora do servidor quando a versão do documento foi processada." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Registro de data e hora" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Um texto curto opcional descrevendo a versão do documento" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Comentário" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Arquivo" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "O arquivo MIME type da versão do documento. MIME types são uma forma de descrever o formato de um arquivo, neste caso o formato do documento. Alguns exemplos: \"text/plain\" ou \"image/jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME type" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Codificação" @@ -655,7 +656,7 @@ msgstr "Excluir documentos" msgid "Trash documents" msgstr "Mover documentos para a lixeira" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Baixar documentos" @@ -747,115 +748,117 @@ msgstr "Verificar períodos na lixeira para tipo de documento" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Atualizar contagem de páginas do documento" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Carregar nova versão do documento" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Número máximo de documentos recém-criados a serem mostrados." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Valor em graus para girar uma página do documento por interação do usuário." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Valor máximo em porcentagem (%) para permitir ao usuário aumentar o zoom em uma página do documento de forma interativa." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Valor mínimo em porcentagem (%) para permitir ao usuário diminuir o zoom em uma página do documento de forma interativa." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Quantidade em porcentagem de zoom em uma página ou documento por interação do usuário." @@ -907,27 +910,27 @@ msgstr "Novembro" msgid "December" msgstr "Dezembro" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Novos documentos por mês" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Novas versões de documentos por mês" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Novas páginas de documentos por mês" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total de documentos por mês" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total de versões de documentos por mês" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Total de páginas de documentos por mês" @@ -951,12 +954,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -964,28 +967,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Páginas por documento: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Não há mais páginas neste documento" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Você já está na primeira página deste documento" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Imagem de: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1085,185 +1100,200 @@ msgstr "Erro ao reverter versão do documento; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Pedido de alteração de tipo de documento executado em %(count)d documento" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Pedido de alteração de tipo de documento executado em %(count)d documentos" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Mudança" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Alterar o tipo de documentos selecionados" msgstr[1] "Alterar o tipo de documentos selecionados" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Alterar o tipo do documento: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Tipo de documento para \"%s\" alterado com sucesso." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Baixar" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Editar propriedades de documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Pré-visualização do documento:%s " -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Pré-visualização do documento:%s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d documento em fila para recálculo de contagem de página" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d documentos em fila para recálculo de contagem de página" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Recalcular a contagem de páginas do documento selecionado?" msgstr[1] "Recalcular a contagem de páginas dos documentos selecionados?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Recalcular a contagem de páginas do documento: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Solicitação de transparência de transformação processada para %(count)d documento" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Solicitação de transparência de transformação processada para %(count)d documentos" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Limpar todas as transformações de página para o documento selecionado?" msgstr[1] "Limpar todas as transformações de página para o documento selecionado?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Limpar todas as transformações de página para o documento: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Erro ao excluir as transformações de página para o documento: %(document)s; %(error)s ." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformações clonadas com sucesso." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Submeter" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Transformações de página de clone para o documento: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Imprimir: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Não há documentos duplicados" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1322,22 +1352,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Apagar do cache a imagem do documento?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Cache do documento apagado com sucesso." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.mo index 94346f4425..3af4244e10 100644 Binary files a/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.po index 450d3e4ae7..c86258d057 100644 --- a/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-29 12:28+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 13:19+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -19,51 +19,52 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Documente" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Creați un tip de document" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Fiecare document încărcat trebuie să fie atribuit unui tip de document, acesta este modul de bază în care Mayan EDMS categorizează documente." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "Comentarii la versiuni" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "Codificare versiuni" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "Tip MIME pt. versiuni" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "Marcă temporală versiuni" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatură" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagini" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Dubluri" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tip" @@ -79,7 +80,8 @@ msgstr "Total documente" msgid "Documents in trash" msgstr "Documentele din coșul de gunoi" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Tipuri de documente" @@ -108,23 +110,27 @@ msgstr "Noua versiune încărcată" msgid "Document properties edited" msgstr "Proprietățile documentului au fost editate" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "Document trimis la coș" + +#: events.py:26 msgid "Document type changed" msgstr "Tipul de document a fost modificat" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "Tipul de document a fost creat" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "Tipul de document a fost editat" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Versiunea documentului a restabilită" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Document vizualizat" @@ -187,7 +193,7 @@ msgstr "Nici unul" msgid "File encoding" msgstr "Codarea fișierelor" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Marime fişier" @@ -199,12 +205,12 @@ msgstr "Există în arhivă" msgid "File path in storage" msgstr "Cale fisier in arhiva" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Suma de control" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Gamă de pagini" @@ -227,196 +233,208 @@ msgid "" "document version correctly." msgstr "Ia extensia de fișier și o mută până la capătul fișierului, permițând sistemelor de operare care se bazează pe extensii de fișiere să deschidă corect versiunea documentului descărcat." -#: links.py:66 -msgid "Preview" -msgstr "Previzualizare" +#: handlers.py:33 +msgid "Document images" +msgstr "Imaginile documentului" -#: links.py:72 -msgid "Properties" -msgstr "Proprietăți" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Versiuni" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Șterge transformări" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Clonare transformări" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Șterge" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "Preferate" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "Adaugă la favorite" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "Eliminați de la favorite" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Aruncă la gunoi" - -#: links.py:137 -msgid "Edit properties" -msgstr "Editați proprietățile" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Modificați tipul" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "Descărcați avansate" -#: links.py:155 -msgid "Print" -msgstr "Imprimare" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Editați proprietățile" -#: links.py:160 -msgid "Quick download" -msgstr "Descărcați rapid" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Renumărarea paginilor" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Restabilire" - -#: links.py:226 -msgid "Download version" -msgstr "Descărcare versiune" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Document" - -#: links.py:245 -msgid "Details" -msgstr "Detalii" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Toate documentele" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "Accesate recent" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "Adaugate recent" -#: links.py:264 -msgid "Trash can" -msgstr "Coș de gunoi" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Previzualizare" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Goliți reprezentările grafice folosite pentru a accelera afișarea documentelor și rezultatele interactive de transformari." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Proprietăți" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Ștergeți memoria cache a imaginilor documentelor" +#: links/document_links.py:96 +msgid "Print" +msgstr "Imprimare" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Golire coș de gunoi" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Descărcați rapid" -#: links.py:287 -msgid "First page" -msgstr "Prima pagină" - -#: links.py:292 -msgid "Last page" -msgstr "Ultima pagină" - -#: links.py:300 -msgid "Previous page" -msgstr "Pagina precedentă" - -#: links.py:306 -msgid "Next page" -msgstr "Pagina următoare" - -#: links.py:318 -msgid "Rotate left" -msgstr "Rotire la stanga" - -#: links.py:323 -msgid "Rotate right" -msgstr "Rotire la dreapta" - -#: links.py:327 -msgid "Page image" -msgstr "Imaginea paginii" - -#: links.py:332 -msgid "Reset view" -msgstr "Vedere inițială" - -#: links.py:338 -msgid "Zoom in" -msgstr "Mărește" - -#: links.py:344 -msgid "Zoom out" -msgstr "Micșorează" - -#: links.py:353 -msgid "Revert" -msgstr "Revenire" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Creați tipul de document" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Șterge" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "Politicile de ștergere " -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Editează" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Adăugați etichetă rapidă la tipul de document" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Etichete rapide" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Versiuni" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Descărcare versiune" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Document" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Detalii" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Revenire" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "Dezactivați pagina" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "Dezactivați paginile" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "Activați pagina" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "Activați paginile" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Prima pagină" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Ultima pagină" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Pagina precedentă" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Pagina următoare" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Rotire la stanga" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Rotire la dreapta" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Imaginea paginii" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Vedere inițială" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Mărește" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Micșorează" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Renumărarea paginilor" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "Documente duplicate" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Căutare documente duplicat" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "Preferate" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Adaugă la favorite" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Eliminați de la favorite" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Aruncă la gunoi" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Coș de gunoi" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Restabilire" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Golire coș de gunoi" + +#: literals.py:32 msgid "Default" msgstr "Iniţial" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Toate paginile" @@ -430,7 +448,7 @@ msgstr "UUID al unui document, identificator unic universal. Un identificator un msgid "The name of the document." msgstr "Numele documentului." -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -466,69 +484,56 @@ msgstr "Dacă acest document este sau nu în coșul de gunoi." msgid "In trash?" msgstr "În gunoi?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "Data și ora serverului când documentul a fost mutat în coșul de gunoi." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Data și ora în gunoi" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Un stub document este un document cu o intrare în baza de date, dar nu se încarcat niciun fișier. Aceasta ar putea fi o încărcare întreruptă sau o încărcare amânată prin API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Este stub?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Stub document, id: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Versiune document" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Activat" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Numărul paginii" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Pagina documentului" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Pagini document" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Pag %(page_num)d din %(total_pages)d din %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Data și ora" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Nume fişier" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Imaginea din cache a paginii documentului" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Imagini din cache a paginilor documentului" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "Numele tipului de document." @@ -565,52 +570,48 @@ msgstr "Unitate de timp pt. ștergere" msgid "Documents types" msgstr "Tipuri de documente" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Activat" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Etichetă rapidă" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "Data și ora serverului la care a fost procesată versiunea documentului." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Marcaj temporal" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "Un text scurt opțional care descrie versiunea documentului." -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Comentariu" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Fișier" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "Mimetype pentru versiunea documentuli. Tipurile MIME sunt o modalitate standard de a descrie formatul unui fișier, în acest caz formatul de fișier al documentului. Câteva exemple: \"text / plain\" sau \"image / jpeg\"." -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "Tip MIME" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "Codarea fișierului de versiune a documentului. binar 7-bit, binar 8-bit, text, base64, etc." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Encodare" @@ -654,7 +655,7 @@ msgstr "Ștergeți documente" msgid "Trash documents" msgstr "Docimente la Coș de gunoi" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Descărcați documente" @@ -746,115 +747,117 @@ msgstr "Verificați perioadele de păstrare la gunoi pentru tipul de document" msgid "Delete document stubs" msgstr "Ștergeți stub-uri de document" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Goliți cache imagini" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Actualizați numărul de pagini al documentului" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Încărcați o nouă versiune de document" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "Scanați după documente duplicate" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "Pragul la care DOCUMENT_CACHE_STORAGE_BACKEND va începe să șterge cele mai vechi fișiere din memoria cache a imaginilor documentelor. Specificați dimensiunea în octeți." + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "Calea către subclasa de stocare pe care să o utilizați la stocarea fișierelor de imagini memorate în memoria cache." -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "Argumentele care trec la DOCUMENT_CACHE_STORAGE_BACKEND." -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Dezactivează primul nivel de memorie cache care stochează versiuni de rezoluție și versiuni non-transformate ale paginilor documentelor." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Dezactivează cel de-al doilea nivel de memorie cache care stochează paginile documentelor cu rezoluție medie, mică, transformată (rotită, mărite, etc.)." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "Numărul maxim de documente preferate de reținut pentru fiecare utilizator." -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "Detectează orientarea fiecărei pagini a documentului și creează o transformare de rotație corespunzătoare pentru a o afișa vertical. Aceasta este o caracteristică experimentală și este dezactivată în mod implicit." -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "Dimensiunea blocurilor de utilizat la calcularea sumelor de control ale fișierului documentului. O valoare de 0 dezactivează calculul blocului și întregul fișier va fi încărcat în memorie." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "Limba standard a documentelor (în format ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "Lista limbilor de documente acceptate. În format ISO639-3." -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "Timp în secunde în care browserul ar trebui să cacheze imaginile documentului furnizat. Valoarea implicită de 31559626 secunde corespunde unui an." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "Numărul maxim de documente recent accesate (create, editate, vizualizate) pe care să le rețineți pentru fiecare utilizator." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "Numărul maxim de documente create recent pentru a fi afișate." -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Ce rotaţie pentru pagină (în grade) este folosită în interacțiunea cu utilizatorul." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "Calea către subclasa de stocare care trebuie utilizată la stocarea fișierelor de documente." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "Argumentele care trec la DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "Înălțimea în pixeli a imaginii miniatură a documentelor." -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Suma maximă în procente (%), permisă utilizatorilor pentru mărirea interactiv a unei pagini ." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Suma minimă în procente (%), permisă utilizatorului pentru micșorarea interactivă a unei pagini ." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Suma în procente folosită pentru a mării sau micşora un document interactiv cu utilizatorul." @@ -906,27 +909,27 @@ msgstr "noiembrie" msgid "December" msgstr "decembrie" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Documente noi pe lună" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Versiuni noi de documente pe lună" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Pagini noi de documente pe lună" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total documente în fiecare lună" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total versiuni de documente pentru fiecare lună" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Numărul total de pagini de documente din fiecare lună" @@ -950,12 +953,12 @@ msgstr "Nu există pagini de afișat" msgid "Document image" msgstr "Imaginea documentului" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "Limbă necunoscută \"%s\"" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -963,28 +966,42 @@ msgid "" "again." msgstr "Acest lucru ar putea însemna că documentul are un format care nu este acceptat, că este corupt sau că procesul de încărcare a fost întrerupt. Utilizați acțiunea de recalculare a paginii de document pentru a încerca să introduceți din nou numărul paginilor." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "Nu sunt disponibile pagini în document" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Pagini pentru document: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Nu mai sunt pagini în acest document." -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Sunteți deja la prima pagină a acestui document" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Imaginea: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "Dezactivați pagina documentului selectat?" +msgstr[1] "Dezactivați paginile de document selectate?" +msgstr[2] "Dezactivați paginile de document selectate?" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "Activați pagina documentului selectat?" +msgstr[1] "Activați paginile de document selectate?" +msgstr[2] "Activați paginile de document selectate?" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1084,189 +1101,204 @@ msgstr "Eroare la revenirea la versiunea documentului; %s" msgid "Preview of document version: %s" msgstr "Previzualizarea versiunii de document: %s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "Eroare la preluarea listei de documente: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "Acest lucru ar putea însemna că nu au fost încărcate documente sau că nu vi s-a acordat permisiunea de vizualizare pentru niciun document sau tip de document." -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "Nu există documente disponibile" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Solicitarea de modificare a tipului de document efectuată pe %(count)d documente" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Solicitarea de modificare a tipului de document efectuată pe %(count)d documente" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Modificare" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Modificați tipul documentului selectat" msgstr[1] "Modificați tipul documentelor selectate" msgstr[2] "Modificați tipul documentelor selectate" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Modificați tipul documentului: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Tipul de document pentru \"%s\" a fost modificat cu succes." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Descărcare" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "Numai exemplarele exacte ale acestui document vor fi afișate în această listă." - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "Nu există duplicate pentru acest document" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Duplicate pentru document: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Editați proprietățile documentului: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Previzualizarea documentului: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Proprietățile documentului: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d documente sunt în coada pentru recalcularea numărului de pagini" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "Documentele %(count)d s-au plasat în așteptare pentru recalcularea numărului de pagini" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Recalculați numărul de pagini al documentului selectat?" msgstr[1] "Recalculați numărul de pagini al documentelor selectate?" msgstr[2] "Recalculați numărul de pagini al documentelor selectate?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Recalculați numărul de pagini al documentului: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "Documentul \"%(document)s\" este gol. Încărcați cel puțin o versiune de document înainte de a încerca să detectați numărul de pagini." -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Transformarea cererii clare prelucrate pentru documentul %(count)d" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Transformarea cererii clare prelucrate pentru documentele %(count)d" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Ștergeți toate transformările paginii pentru documentul selectat?" msgstr[1] "Ștergeți toate transformările paginii pentru documentul selectat?" msgstr[2] "Ștergeți toate transformările paginii pentru documentul selectat?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Ștergeți toate transformările paginii pentru document: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Eroare la ștergerea transformări : %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "Eroare la clonarea transformărilor de pagini pentru document: %(document)s; %(error)s." + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Transformările clonate cu succes." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Trimiteţi" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Clonarea transformărilor paginii pentru documentul: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Tipărește: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Această vizualizare va afișa cele mai recente documente vizualizate sau manipulate în vreun fel de acest cont de utilizator." + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "Nu există niciun document accesat recent " + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Această vizualizare va afișa cele mai recente documente încărcate în sistem." + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "Nu există niciun document adăugat recent " + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Numai exemplarele exacte ale acestui document vor fi afișate în această listă." + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Nu există duplicate pentru acest document" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Duplicate pentru document: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "Duplicatele sunt documente care sunt compuse din exact același fișier, până la ultimul octet. Fișierele care au același text sau OCR dar nu sunt identice sau au fost salvate utilizând un alt format de fișier nu vor apărea ca duplicate." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "Nu există documente duplicate" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "Această vizualizare va afișa cele mai recente documente vizualizate sau manipulate în vreun fel de acest cont de utilizator." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Căutați documente duplicate?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "Nu există niciun document accesat recent " - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "Această vizualizare va afișa cele mai recente documente încărcate în sistem." - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "Nu există niciun document adăugat recent " +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Căutarea documentelor duplicat a fost trimisă în coada de așteptare." #: views/favorite_document_views.py:33 #, python-format @@ -1326,22 +1358,6 @@ msgstr[0] "Eliminați documentul selectat din preferințe" msgstr[1] "Eliminați documentele selectate din preferințe" msgstr[2] "Eliminați documentele selectate din preferințe" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Eliminați memoria cache a imaginilor?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Ștergerea cache-ului de documente a fost pusă în coada de așteptare cu succes." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Căutați documente duplicate?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Căutarea documentelor duplicat a fost trimisă în coada de așteptare." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/ru/LC_MESSAGES/django.mo index 9c4ab6069f..220f4eabaf 100644 Binary files a/mayan/apps/documents/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/ru/LC_MESSAGES/django.po b/mayan/apps/documents/locale/ru/LC_MESSAGES/django.po index c264697d86..82aa70c356 100644 --- a/mayan/apps/documents/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/ru/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "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" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Документы" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Создать тип документа" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Каждому загруженому документу должен быть присвоен тип документа, - это основной способ, которым Mayan EDMS распределяет документы по категориям." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Миниатюра" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Страницы" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Тип" @@ -78,7 +79,8 @@ msgstr "" msgid "Documents in trash" msgstr "Документы в корзине" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Типы документов" @@ -107,23 +109,27 @@ msgstr "Новая версия была загружена" msgid "Document properties edited" msgstr "Свойства документа были изменены" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Тип документа был изменен" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Версия документа была восстановлена" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Документ просмотрен" @@ -186,7 +192,7 @@ msgstr "Ни один" msgid "File encoding" msgstr "Кодировка файла" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Размер" @@ -198,12 +204,12 @@ msgstr "Существует в хранилище" msgid "File path in storage" msgstr "Путь к файлу в хранилище" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Контрольная сумма" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Диапазон страниц" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" -msgstr "Предварительный просмотр" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Свойства" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Версии" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Очистить преобразования" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Удалить" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Переместить в корзину" - -#: links.py:137 -msgid "Edit properties" -msgstr "Редактировать свойства" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Изменить тип" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Печать" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Редактировать свойства" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Пересчитать количество страниц" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Восстановить" - -#: links.py:226 -msgid "Download version" -msgstr "Скачать версию" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Документ" - -#: links.py:245 -msgid "Details" -msgstr "Детали" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Все документы" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Предварительный просмотр" + +#: links/document_links.py:90 +msgid "Properties" +msgstr "Свойства" + +#: links/document_links.py:96 +msgid "Print" +msgstr "Печать" + +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Очистить графику для ускорения отображения документов и интерактивных преобразований." - -#: links.py:274 -msgid "Clear document image cache" -msgstr "Очистить кэш изображений документа" - -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Очистить корзину" - -#: links.py:287 -msgid "First page" -msgstr "Первая страница" - -#: links.py:292 -msgid "Last page" -msgstr "Последняя страница" - -#: links.py:300 -msgid "Previous page" -msgstr "Предыдущая страница" - -#: links.py:306 -msgid "Next page" -msgstr "Следующая страница" - -#: links.py:318 -msgid "Rotate left" -msgstr "Повернуть влево" - -#: links.py:323 -msgid "Rotate right" -msgstr "Повернуть вправо" - -#: links.py:327 -msgid "Page image" -msgstr "Изображение страницы" - -#: links.py:332 -msgid "Reset view" -msgstr "Вернуть вид" - -#: links.py:338 -msgid "Zoom in" -msgstr "Увеличить" - -#: links.py:344 -msgid "Zoom out" -msgstr "Уменьшить" - -#: links.py:353 -msgid "Revert" -msgstr "Возврат" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Создать тип документа" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Удалить" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Редактировать" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Добавить быструю метку к документу" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Быстрые метки" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Версии" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Скачать версию" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Документ" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Детали" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Возврат" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "Первая страница" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Последняя страница" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Предыдущая страница" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Следующая страница" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Повернуть влево" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Повернуть вправо" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Изображение страницы" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Вернуть вид" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Увеличить" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Уменьшить" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Пересчитать количество страниц" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Переместить в корзину" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Восстановить" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Очистить корзину" + +#: literals.py:32 msgid "Default" msgstr "Умолчание" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Все страницы" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "" msgid "In trash?" msgstr "В корзине?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Время и дата удаления" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Заглушка документа - это запись в базе данных без самого документа. Документ может оказатсья заглушкой, если его загрузка оборвалась, или выполняется его отложенная загрузка через API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Является заглушкой?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Заглушка документа, ид: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Версия документа" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Доступно" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Номер страницы" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Страница документа" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Страницы документа" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Страница %(page_num)d из %(total_pages)d %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Дата и время" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Имя файла" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -564,52 +569,48 @@ msgstr "Единица измерения периода удаления" msgid "Documents types" msgstr "Типы документов" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Доступно" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Быстрая метка" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "временная метка" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Комментарий" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Файл" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME type" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Кодировка" @@ -653,7 +654,7 @@ msgstr "Удаление документов" msgid "Trash documents" msgstr "Переместить документы в корзину" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Загрузка документов" @@ -745,115 +746,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Градус поворота страницы документа в интерактивном режиме." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Максимальный процент увеличения страницы документа пользователем." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Процент уменьшения масштаба страницы документа в интерактивном режиме." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Процент увеличения страницы документа пользователем." @@ -905,27 +908,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Новых документов в месяц" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Новых версий документов в месяц" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Новых страниц документов в месяц" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Всего документов в месяц" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Новых версий документов в месяц" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Всего страниц документов в месяц" @@ -949,12 +952,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,44 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Страницы документа: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr " Нет более страниц в этом документе" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Вы уже на первой странице этого документа" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Изображение для: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,37 +1102,37 @@ msgstr "Ошибка получения версии документа %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" @@ -1121,59 +1140,46 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Тип документа для \"%s\" успешно изменён." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Скачать" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Правка свойств документа: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Предпросмотр документа: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Свойства документа: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Пересчитать количество страниц для выбранного документа?" @@ -1181,29 +1187,29 @@ msgstr[1] "Пересчитать количество страниц для в msgstr[2] "Пересчитать количество страниц для выбранных документов?" msgstr[3] "Пересчитать количество страниц для выбранных документов?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" @@ -1211,63 +1217,91 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Ошибка при удалении страницы для преобразования документов: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Подтвердить" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Печать: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1330,22 +1364,6 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Очистить кэш изображений документа?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Очистка кэша документов успешно помещена в очередь." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.mo index ce629c6e1e..a5e746b930 100644 Binary files a/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.po index 7e70c41b3f..eaf5bd9ca5 100644 --- a/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -17,51 +17,52 @@ msgstr "" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Dokumenti" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Strani" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "" @@ -77,7 +78,8 @@ msgstr "" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "" @@ -106,23 +108,27 @@ msgstr "" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -185,7 +191,7 @@ msgstr "Brez" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Velikost datoteke" @@ -197,12 +203,12 @@ msgstr "Obstaja v shrambi" msgid "File path in storage" msgstr "Pot datoteke v shrambi" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Nadzorna vsota" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Obseg strani" @@ -225,196 +231,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Izbriši" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Dokument" - -#: links.py:245 -msgid "Details" -msgstr "Podrobnosti" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Počistite grafične predstavitve, ki se uporabljajo za pospešitev prikaza dokumentov in rezultatov interaktivnih transformacij." - -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" +#: links/document_links.py:96 +msgid "Print" msgstr "" -#: links.py:287 -msgid "First page" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:292 -msgid "Last page" -msgstr "" - -#: links.py:300 -msgid "Previous page" -msgstr "" - -#: links.py:306 -msgid "Next page" -msgstr "" - -#: links.py:318 -msgid "Rotate left" -msgstr "" - -#: links.py:323 -msgid "Rotate right" -msgstr "" - -#: links.py:327 -msgid "Page image" -msgstr "Slika strani" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "" - -#: links.py:344 -msgid "Zoom out" -msgstr "" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Izbriši" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Dokument" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Podrobnosti" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Slika strani" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "" @@ -428,7 +446,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -464,69 +482,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Stran %(page_num)d od %(total_pages)d dokumenta %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Ime datoteke" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -563,52 +568,48 @@ msgstr "" msgid "Documents types" msgstr "" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Komentar" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME tip" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -652,7 +653,7 @@ msgstr "Izbiši dokumente" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Prenesi dokumente" @@ -744,115 +745,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Število v stopinjah za rotiranje strani dokumenta ob uporabniški interakciji." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Največji znesek v procentih (%), ki je dovoljen uporabniku za približevanje strani v dokumentu." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Naamanjši znesek v procentih (%), ki je dovoljen uporabniku za približevanje strani v dokumentu." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Znesek v procentih za približane oziroma oddaljene strani na dokument v uporabniškem vmesniku." @@ -904,27 +907,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -948,12 +951,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -961,28 +964,44 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Ni več strani v tem dokumentu" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Ste že na prvi strani dokumenta" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1082,37 +1101,37 @@ msgstr "Napaka v povrnitvi dokumenta verzija: %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" @@ -1120,59 +1139,46 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "Prenos" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" @@ -1180,29 +1186,29 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" @@ -1210,63 +1216,91 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Napaka v izbrisu preoblikovanj strani za dokument: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Pošlji" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1329,22 +1363,6 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.mo index 37336a8a12..bdb209ccba 100644 Binary files a/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po index d870c63419..906a6228a8 100644 --- a/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" @@ -19,51 +19,52 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Belgeler" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "Belge türü oluşturma" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "Yüklenen her belgeye bir belge türü atanmalıdır; bu, Mayan EDMS'in belgeleri sınıflandırmasının temel şeklidir." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Küçük ikon" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Sayfalar" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Yinele" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "Tür" @@ -79,7 +80,8 @@ msgstr "Toplam belge" msgid "Documents in trash" msgstr "Çöp kutusu içindeki belgeler" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "Doküman türleri" @@ -108,23 +110,27 @@ msgstr "Yeni sürüm yüklendi" msgid "Document properties edited" msgstr "Düzenlenen belge özellikleri" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "Doküman türü değişti" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "Doküman sürümü geri alındı" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "Görüntülenen doküman" @@ -187,7 +193,7 @@ msgstr "Yok" msgid "File encoding" msgstr "Dosya şifreleme" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Dosya büyüklüğü" @@ -199,12 +205,12 @@ msgstr "Depoda varolan varlıklar" msgid "File path in storage" msgstr "Depoda dosya yolu" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "Sağlama" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Sayfa aralığı" @@ -227,196 +233,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" -msgstr "Önizleme" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "Özellikler" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "Sürümler" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "Dönüşümleri temizle" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "Klon dönüşümü" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "Sil" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "Çöp kutusuna taşıyın" - -#: links.py:137 -msgid "Edit properties" -msgstr "Özellikleri düzenle" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "Türünü değiştir" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" -msgstr "Yazdır" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Özellikleri düzenle" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "Sayfa sayısını yeniden hesapla" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "Geri yükle" - -#: links.py:226 -msgid "Download version" -msgstr "Sürümü indir" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "Belge" - -#: links.py:245 -msgid "Details" -msgstr "Ayrıntılar" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "Bütün belgeler" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Çöp Kutusu" +#: links/document_links.py:84 +msgid "Preview" +msgstr "Önizleme" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "Belgelerin ekranını ve etkileşimli dönüşüm sonuçlarını hızlandırmak için kullanılan grafik gösterimlerini temizleyin." +#: links/document_links.py:90 +msgid "Properties" +msgstr "Özellikler" -#: links.py:274 -msgid "Clear document image cache" -msgstr "Belge görüntü ön belleğini temizle" +#: links/document_links.py:96 +msgid "Print" +msgstr "Yazdır" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Çöp kutusunu boşalt" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "" -#: links.py:287 -msgid "First page" -msgstr "İlk sayfa" - -#: links.py:292 -msgid "Last page" -msgstr "Son Sayfa" - -#: links.py:300 -msgid "Previous page" -msgstr "Önceki sayfa" - -#: links.py:306 -msgid "Next page" -msgstr "Sonraki Sayfa" - -#: links.py:318 -msgid "Rotate left" -msgstr "Sola döndür" - -#: links.py:323 -msgid "Rotate right" -msgstr "Sağa döndür" - -#: links.py:327 -msgid "Page image" -msgstr "Sayfa görüntüsü" - -#: links.py:332 -msgid "Reset view" -msgstr "Görünümü sıfırla" - -#: links.py:338 -msgid "Zoom in" -msgstr "Yakınlaştır" - -#: links.py:344 -msgid "Zoom out" -msgstr "Uzaklaştır" - -#: links.py:353 -msgid "Revert" -msgstr "Tersine çevir" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "Belge türü oluştur" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "Sil" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Düzenleme" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "Belge türüne hızlı etiket ekleme" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "Hızlı etiketler" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "Sürümler" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "Sürümü indir" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "Belge" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Ayrıntılar" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "Tersine çevir" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "İlk sayfa" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "Son Sayfa" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "Önceki sayfa" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "Sonraki Sayfa" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "Sola döndür" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "Sağa döndür" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "Sayfa görüntüsü" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "Görünümü sıfırla" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "Yakınlaştır" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "Uzaklaştır" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "Sayfa sayısını yeniden hesapla" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "Yinelenmiş doküman taraması" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "Çöp kutusuna taşıyın" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "Çöp Kutusu" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "Geri yükle" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "Çöp kutusunu boşalt" + +#: literals.py:32 msgid "Default" msgstr "Varsayılan" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "Tüm sayfalar" @@ -430,7 +448,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -466,69 +484,56 @@ msgstr "" msgid "In trash?" msgstr "Çöp kutusunda?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "Çöp kutusunun tarihi ve saati" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "Bir doküman koçanı, veritabanında bir girişi bulunan, ancak hiçbir dosya yüklenmemiş bir dokümandır. Bu, API aracılığıyla kesilen bir yükleme veya ertelenmiş bir yükleme olabilir." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "Koçan mı?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "Belge koçanı, kimliği: %d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "Doküman sürümü" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "Etkin" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "Sayfa numarası" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "Belge sayfası" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "Doküman sayfaları" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Sayfa %(page_num)d dışarı-in %(total_pages)d of %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "Tarih saat" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Dosya adı" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "Belge sayfası ön belleğe alınan resim" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "Belge sayfası ön belleğe alınan resimler" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -565,52 +570,48 @@ msgstr "Zaman birimini sil" msgid "Documents types" msgstr "Belge türleri" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "Etkin" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "Hızlı etiket" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "Zaman Damgası" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Yorum Yap" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "Dosya" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME türü" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "Kodlama" @@ -654,7 +655,7 @@ msgstr "Belge sil" msgid "Trash documents" msgstr "Çöp kutusu belgeleri" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Belgeleri indir" @@ -746,115 +747,117 @@ msgstr "Belge türü çöp tenekesi periyotlarını kontrol etme" msgid "Delete document stubs" msgstr "Belge taslaklarını sil" -#: queues.py:66 -msgid "Clear image cache" -msgstr "Görüntü ön belleğini temizle" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "Doküman sayfa sayısını güncelle" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "Yeni belge sürümü yükle" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "Belgelerin sayfalarının dönüştürülmemiş, yüksek çözünürlüklü sürümlerini depolayan ilk önbellek katmanını devre dışı bırakır." -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "Orta sayfadan düşük çözünürlüğe, belgenin sayfalarının dönüştürülmüş (döndürülmüş, yakınlaştırılmış vb.) Sürümlerini depolayan ikinci önbellek katmanını devre dışı bırakır." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Kullanıcı etkileşimi başına bir doküman sayfasını döndürmek için gereken derece miktarı." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Kullanıcının bir belge sayfasını etkileşimli olarak yakınlaştırmasını sağlamak için yüzde olarak maksimum miktarı (%)." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Kullanıcıya bir belge sayfasını etkileşimli olarak uzaklaştırmak için yüzde olarak minimum tutar (%)." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Kullanıcı etkileşimi başına belge sayfasında yakınlaştırma veya uzaklaştırma yüzdesi." @@ -906,27 +909,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "Aylık yeni belgeler" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "Aylık yeni belge sürümleri" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "Aylık yeni belge sayfaları" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Her ayın toplam belgeleri" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Her ayki toplam belge versiyonu" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Her ayki toplam belge sayfası" @@ -950,12 +953,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -963,28 +966,40 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "Doküman için Sayfalar: %s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "Bu belgede başka sayfa yok" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "Zaten bu belgenin ilk sayfasındasın" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "Görüntüsü: %s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" +msgstr[1] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1084,186 +1099,201 @@ msgstr "Belge sürümünü geri yüklerken hata oluştu; %s" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "%(count)d belge üzerinde gerçekleştirilen Belge türü değişikliği isteği" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "%(count)d Belgeleri üzerinde yapılan Belge türü değişikliği talebi" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "Değişiklik" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "Seçili belgenin türünü değiştirme" msgstr[1] "Seçilen belgelerin türünü değiştirme" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "Belgenin türünü değiştirin: %s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "\"%s\" için Belge türü başarıyla değişti." -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "İndir" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "Belge için yineler: %s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "Belge özelliklerini düzenle: %s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "Belgenin önizlemesi: %s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "Belge için özellikler: %s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d Belgesi, sayfa sayısı yeniden hesaplaması için kuyruğa alındı" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d Belgeler, sayfa sayısı yeniden hesaplaması için kuyruğa alındı" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "Seçilen belgenin sayfa sayısını yeniden hesapla mı?" msgstr[1] "Seçilen belgelerin sayfa sayısını tekrar hesaplamak istiyor musunuz?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Belge sayfa sayısını tekrar hesaplayın: %s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "%(count)d Belgesi için temizleme dönüşümü isteği işlendi" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "%(count)d Belgeleri için temizleme dönüşümü isteği işlendi" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "Seçilen belgenin tüm sayfa dönüşümlerini silinsin mi?" msgstr[1] "Seçilen belgenin tüm sayfa dönüşümlerini silinsin mi?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "Belgenin tüm sayfa dönüşümlerini temizle: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "Belge için sayfa dönüşümleri silinirken hata oluştu: %(document)s; %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "Dönüşümler başarıyla kopyalandı." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "Gönder" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "Belge için sayfa dönüşümlerini kopyalayın: %s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "Yazdırma: %s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "Belge için yineler: %s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "Yinelenen belgeleri tara?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "Çoğaltılan doküman taraması başarıyla sıraya girdi." #: views/favorite_document_views.py:33 #, python-format @@ -1321,22 +1351,6 @@ msgid_plural "Remove the selected documents from favorites" msgstr[0] "" msgstr[1] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "Belge görüntü önbelleğini temizle?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "Belge önbellek temizleme başarıyla sıraya alındı." - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "Yinelenen belgeleri tara?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "Çoğaltılan doküman taraması başarıyla sıraya girdi." - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.mo index 287acf9fe6..48e897c962 100644 Binary files a/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.po index d40998e367..ca0c646ada 100644 --- a/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/vi_VN/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -17,51 +17,52 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "Tài liệu" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Trang" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "" @@ -77,7 +78,8 @@ msgstr "" msgid "Documents in trash" msgstr "" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "" @@ -106,23 +108,27 @@ msgstr "" msgid "Document properties edited" msgstr "" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "" @@ -185,7 +191,7 @@ msgstr "None" msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "Kích thước file" @@ -197,12 +203,12 @@ msgstr "" msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "Dãy trang" @@ -225,196 +231,208 @@ msgid "" "document version correctly." msgstr "" -#: links.py:66 -msgid "Preview" +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "" - -#: links.py:137 -msgid "Edit properties" -msgstr "" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "" -#: links.py:155 -msgid "Print" +#: links/document_links.py:49 +msgid "Edit properties" msgstr "" -#: links.py:160 -msgid "Quick download" -msgstr "" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "" - -#: links.py:226 -msgid "Download version" -msgstr "" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "" - -#: links.py:245 -msgid "Details" -msgstr "Chi tiết" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "" -#: links.py:264 -msgid "Trash can" +#: links/document_links.py:84 +msgid "Preview" msgstr "" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." +#: links/document_links.py:90 +msgid "Properties" msgstr "" -#: links.py:274 -msgid "Clear document image cache" +#: links/document_links.py:96 +msgid "Print" msgstr "" -#: links.py:278 permissions.py:51 -msgid "Empty trash" +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:287 -msgid "First page" -msgstr "" - -#: links.py:292 -msgid "Last page" -msgstr "" - -#: links.py:300 -msgid "Previous page" -msgstr "" - -#: links.py:306 -msgid "Next page" -msgstr "" - -#: links.py:318 -msgid "Rotate left" -msgstr "" - -#: links.py:323 -msgid "Rotate right" -msgstr "" - -#: links.py:327 -msgid "Page image" -msgstr "" - -#: links.py:332 -msgid "Reset view" -msgstr "" - -#: links.py:338 -msgid "Zoom in" -msgstr "" - -#: links.py:344 -msgid "Zoom out" -msgstr "" - -#: links.py:353 -msgid "Revert" -msgstr "" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "Sửa" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "Chi tiết" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "" + +#: literals.py:32 msgid "Default" msgstr "Mặc định" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "" @@ -428,7 +446,7 @@ msgstr "" msgid "The name of the document." msgstr "" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -464,69 +482,56 @@ msgstr "" msgid "In trash?" msgstr "" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "Trang %(page_num)d ngoài phạm vi của %(total_pages)d của %(document)s" -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "Tên file" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "" @@ -563,52 +568,48 @@ msgstr "" msgid "Documents types" msgstr "" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "Chú thích" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "File" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME type" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "" @@ -652,7 +653,7 @@ msgstr "Xóa tài liệu" msgid "Trash documents" msgstr "" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "Tải xuống tài liệu" @@ -744,115 +745,117 @@ msgstr "" msgid "Delete document stubs" msgstr "" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "Gái trị góc quay trang tài liệu mỗi lần tác động." -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "Số phần trăm lớn nhất (%) cho phép người dùng phóng to một trang tài liệu." -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "Số phần trăm nhỏ nhất (%) cho phép người dùng thu nhỏ trang tài liệu." -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "Số phần trăm phóng to hoặc thu nhỏ một trang tài liệu mỗi tác động của người dùng." @@ -904,27 +907,27 @@ msgstr "" msgid "December" msgstr "" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "" @@ -948,12 +951,12 @@ msgstr "" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -961,28 +964,38 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1082,182 +1095,197 @@ msgstr "" msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" msgstr "" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "" - -#: views/document_views.py:736 -msgid "There are no recently added document" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." msgstr "" #: views/favorite_document_views.py:33 @@ -1314,22 +1342,6 @@ msgid "Remove the selected document from favorites" msgid_plural "Remove the selected documents from favorites" msgstr[0] "" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/documents/locale/zh/LC_MESSAGES/django.mo index 398cf2428a..e070630f64 100644 Binary files a/mayan/apps/documents/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/documents/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/documents/locale/zh/LC_MESSAGES/django.po b/mayan/apps/documents/locale/zh/LC_MESSAGES/django.po index a20fd1b7a7..7bb0d61dfd 100644 --- a/mayan/apps/documents/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/zh/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" @@ -18,51 +18,52 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:109 apps.py:288 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:238 +#: apps.py:129 apps.py:325 events.py:7 menus.py:10 +#: models/document_models.py:93 permissions.py:7 queues.py:26 settings.py:18 +#: statistics.py:236 msgid "Documents" msgstr "文档" -#: apps.py:130 +#: apps.py:150 msgid "Create a document type" msgstr "创建文档类型" -#: apps.py:132 +#: apps.py:152 msgid "" "Every uploaded document must be assigned a document type, it is the basic " "way Mayan EDMS categorizes documents." msgstr "必须为每个上传的文档分配文档类型,这是Mayan EDMS对文档进行分类的基本方式。" -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" msgstr "版本评论" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" msgstr "版本编码" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" msgstr "版本mime类型" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" msgstr "版本时间戳" -#: apps.py:233 apps.py:262 apps.py:272 apps.py:308 apps.py:326 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "缩略图" -#: apps.py:241 apps.py:331 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:182 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "页面" -#: apps.py:250 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "重复" -#: apps.py:276 +#: apps.py:313 msgid "Type" msgstr "类型" @@ -78,7 +79,8 @@ msgstr "文档总数" msgid "Documents in trash" msgstr "垃圾箱中的文档" -#: dashboard_widgets.py:85 links.py:406 links.py:411 permissions.py:55 +#: dashboard_widgets.py:85 links/document_type_links.py:66 +#: links/document_type_links.py:71 permissions.py:55 #: views/document_type_views.py:78 msgid "Document types" msgstr "文档类型" @@ -107,23 +109,27 @@ msgstr "新版本已上传" msgid "Document properties edited" msgstr "文档属性已编辑" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "" + +#: events.py:26 msgid "Document type changed" msgstr "文档类型已更改" -#: events.py:27 +#: events.py:30 msgid "Document type created" msgstr "文档类型已创建" -#: events.py:31 +#: events.py:34 msgid "Document type edited" msgstr "文档类型已编辑" -#: events.py:34 +#: events.py:37 msgid "Document version reverted" msgstr "文档版本已恢复" -#: events.py:37 +#: events.py:40 msgid "Document viewed" msgstr "文档已查看" @@ -186,7 +192,7 @@ msgstr "没有" msgid "File encoding" msgstr "文件编码" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:171 msgid "File size" msgstr "文件大小" @@ -198,12 +204,12 @@ msgstr "存储中存在" msgid "File path in storage" msgstr "存储中的文件路径" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:181 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" msgstr "校验" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:198 literals.py:43 msgid "Page range" msgstr "页面范围" @@ -226,196 +232,208 @@ msgid "" "document version correctly." msgstr "获取文件扩展名并将其移动到文件名的末尾,允许依赖文件扩展名的操作系统正确打开下载的文档版本。" -#: links.py:66 -msgid "Preview" -msgstr "预览" +#: handlers.py:33 +msgid "Document images" +msgstr "" -#: links.py:72 -msgid "Properties" -msgstr "属性" - -#: links.py:78 links.py:238 -msgid "Versions" -msgstr "版本" - -#: links.py:92 links.py:179 +#: links/document_links.py:23 links/document_links.py:67 msgid "Clear transformations" msgstr "清除转换" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" msgstr "克隆转换" -#: links.py:106 links.py:189 links.py:365 links.py:389 -msgid "Delete" -msgstr "删除" - -#: links.py:112 views/favorite_document_views.py:37 -msgid "Favorites" -msgstr "收藏夹" - -#: links.py:118 links.py:193 -msgid "Add to favorites" -msgstr "添加到收藏夹" - -#: links.py:124 links.py:198 -msgid "Remove from favorites" -msgstr "从收藏夹中删除" - -#: links.py:130 links.py:184 -msgid "Move to trash" -msgstr "移到垃圾箱" - -#: links.py:137 -msgid "Edit properties" -msgstr "编辑属性" - -#: links.py:142 links.py:203 +#: links/document_links.py:36 links/document_links.py:71 msgid "Change type" msgstr "改变类型" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" msgstr "高级下载" -#: links.py:155 -msgid "Print" -msgstr "打印" +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "编辑属性" -#: links.py:160 -msgid "Quick download" -msgstr "快速下载" - -#: links.py:167 links.py:214 -msgid "Recalculate page count" -msgstr "重新计算页数" - -#: links.py:173 links.py:219 -msgid "Restore" -msgstr "恢复" - -#: links.py:226 -msgid "Download version" -msgstr "下载版本" - -#: links.py:232 links.py:312 models/document_models.py:93 -#: models/document_version_models.py:74 models/misc_models.py:35 -#: models/misc_models.py:65 models/misc_models.py:94 -msgid "Document" -msgstr "文档" - -#: links.py:245 -msgid "Details" -msgstr "细节" - -#: links.py:251 views/document_views.py:95 +#: links/document_links.py:53 views/document_views.py:96 msgid "All documents" msgstr "所有文档" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:651 msgid "Recently accessed" msgstr "最近访问" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:677 msgid "Recently added" msgstr "最近添加" -#: links.py:264 -msgid "Trash can" -msgstr "垃圾箱" +#: links/document_links.py:84 +msgid "Preview" +msgstr "预览" -#: links.py:271 -msgid "" -"Clear the graphics representations used to speed up the documents' display " -"and interactive transformations results." -msgstr "清除用于加速文档显示和交互式转换结果的图形表示。" +#: links/document_links.py:90 +msgid "Properties" +msgstr "属性" -#: links.py:274 -msgid "Clear document image cache" -msgstr "清除文档图像缓存" +#: links/document_links.py:96 +msgid "Print" +msgstr "打印" -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "清空垃圾箱" +#: links/document_links.py:101 +msgid "Quick download" +msgstr "快速下载" -#: links.py:287 -msgid "First page" -msgstr "首页" - -#: links.py:292 -msgid "Last page" -msgstr "末页" - -#: links.py:300 -msgid "Previous page" -msgstr "上一页" - -#: links.py:306 -msgid "Next page" -msgstr "下一页" - -#: links.py:318 -msgid "Rotate left" -msgstr "向左旋转" - -#: links.py:323 -msgid "Rotate right" -msgstr "向右旋转" - -#: links.py:327 -msgid "Page image" -msgstr "页面图像" - -#: links.py:332 -msgid "Reset view" -msgstr "重置视图" - -#: links.py:338 -msgid "Zoom in" -msgstr "放大" - -#: links.py:344 -msgid "Zoom out" -msgstr "缩小" - -#: links.py:353 -msgid "Revert" -msgstr "还原" - -#: links.py:360 views/document_type_views.py:90 +#: links/document_type_links.py:20 views/document_type_views.py:90 msgid "Create document type" msgstr "创建文档类型" -#: links.py:371 +#: links/document_type_links.py:25 links/document_type_links.py:49 +#: links/trashed_document_links.py:17 links/trashed_document_links.py:43 +msgid "Delete" +msgstr "删除" + +#: links/document_type_links.py:31 msgid "Deletion policies" msgstr "" -#: links.py:375 links.py:396 +#: links/document_type_links.py:35 links/document_type_links.py:56 msgid "Edit" msgstr "编辑" -#: links.py:382 +#: links/document_type_links.py:42 msgid "Add quick label to document type" msgstr "为文档类型添加快速标签" -#: links.py:402 models/document_type_models.py:157 +#: links/document_type_links.py:62 models/document_type_models.py:157 msgid "Quick labels" msgstr "快速标签" -#: links.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: links/document_version_links.py:28 links/document_version_links.py:45 +msgid "Versions" +msgstr "版本" + +#: links/document_version_links.py:33 +msgid "Download version" +msgstr "下载版本" + +#: links/document_version_links.py:39 links/document_version_page_links.py:98 +#: models/document_models.py:92 models/document_version_models.py:67 +#: models/misc_models.py:35 models/misc_models.py:65 models/misc_models.py:94 +msgid "Document" +msgstr "文档" + +#: links/document_version_links.py:52 +msgid "Details" +msgstr "细节" + +#: links/document_version_links.py:58 +msgid "Revert" +msgstr "还原" + +#: links/document_version_page_links.py:49 +msgid "Disable page" +msgstr "" + +#: links/document_version_page_links.py:54 +msgid "Disable pages" +msgstr "" + +#: links/document_version_page_links.py:61 +msgid "Enable page" +msgstr "" + +#: links/document_version_page_links.py:66 +msgid "Enable pages" +msgstr "" + +#: links/document_version_page_links.py:73 +msgid "First page" +msgstr "首页" + +#: links/document_version_page_links.py:78 +msgid "Last page" +msgstr "末页" + +#: links/document_version_page_links.py:86 +msgid "Previous page" +msgstr "上一页" + +#: links/document_version_page_links.py:92 +msgid "Next page" +msgstr "下一页" + +#: links/document_version_page_links.py:104 +msgid "Rotate left" +msgstr "向左旋转" + +#: links/document_version_page_links.py:109 +msgid "Rotate right" +msgstr "向右旋转" + +#: links/document_version_page_links.py:114 +msgid "Page image" +msgstr "页面图像" + +#: links/document_version_page_links.py:119 +msgid "Reset view" +msgstr "重置视图" + +#: links/document_version_page_links.py:125 +msgid "Zoom in" +msgstr "放大" + +#: links/document_version_page_links.py:131 +msgid "Zoom out" +msgstr "缩小" + +#: links/document_version_page_links.py:142 +#: links/document_version_page_links.py:149 +msgid "Recalculate page count" +msgstr "重新计算页数" + +#: links/duplicated_document_links.py:18 models/misc_models.py:38 +#: models/misc_models.py:48 views/duplicated_document_views.py:78 msgid "Duplicated documents" msgstr "重复的文件" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" msgstr "重复的文件扫描" -#: literals.py:31 +#: links/favorite_links.py:12 views/favorite_document_views.py:37 +msgid "Favorites" +msgstr "收藏夹" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "添加到收藏夹" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "从收藏夹中删除" + +#: links/trashed_document_links.py:23 links/trashed_document_links.py:38 +msgid "Move to trash" +msgstr "移到垃圾箱" + +#: links/trashed_document_links.py:28 +msgid "Trash can" +msgstr "垃圾箱" + +#: links/trashed_document_links.py:33 links/trashed_document_links.py:48 +msgid "Restore" +msgstr "恢复" + +#: links/trashed_document_links.py:51 permissions.py:51 +msgid "Empty trash" +msgstr "清空垃圾箱" + +#: literals.py:32 msgid "Default" msgstr "默认" -#: literals.py:40 +#: literals.py:43 msgid "All pages" msgstr "所有页面" @@ -429,7 +447,7 @@ msgstr "" msgid "The name of the document." msgstr "文档的名称。" -#: models/document_models.py:49 models/document_page_models.py:259 +#: models/document_models.py:49 models/document_page_models.py:256 #: models/document_type_models.py:32 models/document_type_models.py:149 #: search.py:40 search.py:66 msgid "Label" @@ -465,69 +483,56 @@ msgstr "这份文件是否在垃圾桶里。" msgid "In trash?" msgstr "在垃圾箱中?" -#: models/document_models.py:75 +#: models/document_models.py:74 msgid "The server date and time when the document was moved to the trash." msgstr "文档移动到垃圾箱的服务器日期和时间。" -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" msgstr "被移至垃圾箱的日期和时间" -#: models/document_models.py:81 +#: models/document_models.py:80 msgid "" "A document stub is a document with an entry on the database but no file " "uploaded. This could be an interrupted upload or a deferred upload via the " "API." msgstr "文档存根是一个在数据库上有条目但没有上传文件的文档。这可能是因为通过API中断上传或延迟上传。" -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" msgstr "是存根吗?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" msgstr "文档存根,id:%d" -#: models/document_page_models.py:42 models/document_version_models.py:116 -#: models/document_version_models.py:117 +#: models/document_page_models.py:42 models/document_version_models.py:109 +#: models/document_version_models.py:110 msgid "Document version" msgstr "文档版本" -#: models/document_page_models.py:46 +#: models/document_page_models.py:44 models/document_type_models.py:151 +msgid "Enabled" +msgstr "启用" + +#: models/document_page_models.py:47 msgid "Page number" msgstr "页码" -#: models/document_page_models.py:53 models/document_page_models.py:283 -#: models/document_page_models.py:316 +#: models/document_page_models.py:55 models/document_page_models.py:281 msgid "Document page" msgstr "文档页面" -#: models/document_page_models.py:54 models/document_page_models.py:317 +#: models/document_page_models.py:56 models/document_page_models.py:282 msgid "Document pages" msgstr "文档页面" -#: models/document_page_models.py:253 +#: models/document_page_models.py:250 #, python-format msgid "Page %(page_num)d out of %(total_pages)d of %(document)s" msgstr "页面%(page_num)d超出了%(document)s的总页数%(total_pages)d " -#: models/document_page_models.py:286 -msgid "Date time" -msgstr "日期时间" - -#: models/document_page_models.py:288 -msgid "Filename" -msgstr "文件名" - -#: models/document_page_models.py:296 -msgid "Document page cached image" -msgstr "文档页面缓存图像" - -#: models/document_page_models.py:297 -msgid "Document page cached images" -msgstr "文档页面缓存图像" - #: models/document_type_models.py:31 msgid "The name of the document type." msgstr "文档类型的名称。" @@ -564,52 +569,48 @@ msgstr "删除时间的单位" msgid "Documents types" msgstr "文档类型" -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "启用" - #: models/document_type_models.py:156 msgid "Quick label" msgstr "快速标签" -#: models/document_version_models.py:78 +#: models/document_version_models.py:71 msgid "The server date and time when the document version was processed." msgstr "处理文档版本的服务器日期和时间。" -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" msgstr "时间戳" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." msgstr "描述文档版本的可选短文本。" -#: models/document_version_models.py:84 +#: models/document_version_models.py:77 msgid "Comment" msgstr "评论" -#: models/document_version_models.py:90 +#: models/document_version_models.py:83 msgid "File" msgstr "文件" -#: models/document_version_models.py:94 +#: models/document_version_models.py:87 msgid "" "The document version's file mimetype. MIME types are a standard way to " "describe the format of a file, in this case the file format of the document." " Some examples: \"text/plain\" or \"image/jpeg\". " msgstr "文档版本的文件mime类型。 MIME类型是描述文件格式的标准方式,在本例中是文档的文件格式。例如:“text / plain”或“image / jpeg”。" -#: models/document_version_models.py:98 search.py:38 search.py:63 +#: models/document_version_models.py:91 search.py:38 search.py:63 msgid "MIME type" msgstr "MIME类型" -#: models/document_version_models.py:102 +#: models/document_version_models.py:95 msgid "" "The document version file encoding. binary 7-bit, binary 8-bit, text, " "base64, etc." msgstr "文档版本文件编码。二进制7位,二进制8位,文本,base64等。" -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" msgstr "编码" @@ -653,7 +654,7 @@ msgstr "删除文档" msgid "Trash documents" msgstr "将文档移至垃圾箱" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:223 msgid "Download documents" msgstr "下载文档" @@ -745,115 +746,117 @@ msgstr "检查文档类型移至垃圾箱时间" msgid "Delete document stubs" msgstr "删除文档存根" -#: queues.py:66 -msgid "Clear image cache" -msgstr "清除图像缓存" - -#: queues.py:75 +#: queues.py:71 msgid "Update document page count" msgstr "更新文档页数" -#: queues.py:79 +#: queues.py:75 msgid "Upload new document version" msgstr "上传新文档版本" -#: queues.py:83 +#: queues.py:79 msgid "Scan document duplicates" msgstr "" -#: settings.py:19 +#: settings.py:26 +msgid "" +"The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start " +"deleting the oldest document image cache files. Specify the size in bytes." +msgstr "" + +#: settings.py:34 msgid "" "Path to the Storage subclass to use when storing the cached document image " "files." msgstr "存储缓存文档图像文件时要使用的存储子类的路径。" -#: settings.py:28 +#: settings.py:42 msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." msgstr "传递给DOCUMENT_CACHE_STORAGE_BACKEND的参数。" -#: settings.py:34 +#: settings.py:48 msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." msgstr "禁用存储文档页面的高分辨率,非转换版本的第一缓存层。" -#: settings.py:41 +#: settings.py:55 msgid "" "Disables the second cache tier which stores medium to low resolution, " "transformed (rotated, zoomed, etc) versions of documents' pages." msgstr "禁用存储文档页面的中低分辨率,转换(旋转,缩放等)版本的第二缓存层。" -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." msgstr "每个用户要记住的收藏文档最大数量。" -#: settings.py:61 +#: settings.py:75 msgid "" "Detect the orientation of each of the document's pages and create a " "corresponding rotation transformation to display it rightside up. This is an" " experimental feature and it is disabled by default." msgstr "检测每个文档页面的方向并创建相应的旋转变换以将其正面显示。这是一项实验性功能,默认情况下处于禁用状态。" -#: settings.py:70 +#: settings.py:84 msgid "" "Size of blocks to use when calculating the document file's checksum. A value" " of 0 disables the block calculation and the entire file will be loaded into" " memory." msgstr "" -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." msgstr "默认文档语言(ISO639-3格式)。" -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." msgstr "支持的文档语言列表。采用ISO639-3格式。" -#: settings.py:86 +#: settings.py:100 msgid "" "Time in seconds that the browser should cache the supplied document images. " "The default of 31559626 seconds corresponde to 1 year." msgstr "浏览器应缓存提供的文档图像的时间,以秒为单位。默认值31559626秒对应1年。" -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." msgstr "每个用户要记住的最近访问(创建,编辑,查看)文档的最大数量。" -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." msgstr "要显示的最近创建的文档的最大数量。" -#: settings.py:118 +#: settings.py:132 msgid "Amount in degrees to rotate a document page per user interaction." msgstr "每个用户交互旋转文档页面的度数。" -#: settings.py:124 +#: settings.py:138 msgid "Path to the Storage subclass to use when storing document files." msgstr "存储文档文件时要使用的存储子类的路径。" -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." msgstr "传递给DOCUMENT_STORAGE_BACKEND的参数。" -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." msgstr "文档缩略图图像的高度,以像素为单位。" -#: settings.py:147 +#: settings.py:160 msgid "" "Maximum amount in percent (%) to allow user to zoom in a document page " "interactively." msgstr "允许用户以交互方式放大文档页面的最大百分比(%)。" -#: settings.py:154 +#: settings.py:167 msgid "" "Minimum amount in percent (%) to allow user to zoom out a document page " "interactively." msgstr "允许用户以交互方式缩小文档页面的最小百分比(%)。" -#: settings.py:161 +#: settings.py:174 msgid "Amount in percent zoom in or out a document page per user interaction." msgstr "每个用户交互放大或缩小文档页面的百分比数量。" @@ -905,27 +908,27 @@ msgstr "十一月" msgid "December" msgstr "十二月" -#: statistics.py:242 +#: statistics.py:240 msgid "New documents per month" msgstr "每月新文档数" -#: statistics.py:249 +#: statistics.py:247 msgid "New document versions per month" msgstr "每月新文档版本数" -#: statistics.py:256 +#: statistics.py:254 msgid "New document pages per month" msgstr "每月新文档页数" -#: statistics.py:263 +#: statistics.py:261 msgid "Total documents at each month" msgstr "每月文档总数" -#: statistics.py:270 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "每月文档版本总数" -#: statistics.py:277 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "每月总文档页数" @@ -949,12 +952,12 @@ msgstr "没有要显示的页面" msgid "Document image" msgstr "" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" msgstr "" -#: views/document_page_views.py:54 +#: views/document_page_views.py:57 msgid "" "This could mean that the document is of a format that is not supported, that" " it is corrupted or that the upload process was interrupted. Use the " @@ -962,28 +965,38 @@ msgid "" "again." msgstr "" -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" msgstr "" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" msgstr "文件页数:%s" -#: views/document_page_views.py:138 +#: views/document_page_views.py:142 msgid "There are no more pages in this document" msgstr "本文档中没有其他页面" -#: views/document_page_views.py:156 +#: views/document_page_views.py:160 msgid "You are already at the first page of this document" msgstr "您已经在本文档的首页" -#: views/document_page_views.py:177 +#: views/document_page_views.py:180 #, python-format msgid "Image of: %s" msgstr "图片:%s" +#: views/document_page_views.py:280 +msgid "Disable the selected document page?" +msgid_plural "Disable the selected document pages?" +msgstr[0] "" + +#: views/document_page_views.py:310 +msgid "Enable the selected document page?" +msgid_plural "Enable the selected document pages?" +msgstr[0] "" + #: views/document_type_views.py:52 #, python-format msgid "Documents of type: %s" @@ -1083,183 +1096,198 @@ msgstr "恢复文档版本时出错; %s" msgid "Preview of document version: %s" msgstr "文档版本预览:%s" -#: views/document_views.py:69 +#: views/document_views.py:70 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "检索文档列表时出错:%(exception)s。" -#: views/document_views.py:90 +#: views/document_views.py:91 msgid "" "This could mean that no documents have been uploaded or that your user " "account has not been granted the view permission for any document or " "document type." msgstr "这可能意味着没有上传任何文档,或者您的用户帐户未被授予任何文档或文档类型的查看权限。" -#: views/document_views.py:94 +#: views/document_views.py:95 msgid "No documents available" msgstr "没有可用的文件" -#: views/document_views.py:107 +#: views/document_views.py:108 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "在%(count)d文档上执行文档类型更改请求" -#: views/document_views.py:110 +#: views/document_views.py:111 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "在%(count)d文档上执行文档类型更改请求" -#: views/document_views.py:117 +#: views/document_views.py:118 msgid "Change" msgstr "更改" -#: views/document_views.py:119 +#: views/document_views.py:120 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" msgstr[0] "更改所选文档的类型" -#: views/document_views.py:130 +#: views/document_views.py:131 #, python-format msgid "Change the type of the document: %s" msgstr "更改文档类型:%s" -#: views/document_views.py:151 +#: views/document_views.py:152 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "“%s”的文档类型已成功更改。" -#: views/document_views.py:220 +#: views/document_views.py:221 msgid "Download" msgstr "下载" -#: views/document_views.py:343 -msgid "Only exact copies of this document will be shown in the this list." -msgstr "此列表中仅显示此文档的精确副本。" - -#: views/document_views.py:347 -msgid "There are no duplicates for this document" -msgstr "此文档没有重复项" - -#: views/document_views.py:350 -#, python-format -msgid "Duplicates for document: %s" -msgstr "文件重复:%s" - -#: views/document_views.py:379 +#: views/document_views.py:338 #, python-format msgid "Edit properties of document: %s" msgstr "编辑文档属性:%s" -#: views/document_views.py:415 +#: views/document_views.py:374 #, python-format msgid "Preview of document: %s" msgstr "文件预览:%s" -#: views/document_views.py:433 +#: views/document_views.py:392 #, python-format msgid "Properties for document: %s" msgstr "文档属性:%s" -#: views/document_views.py:441 +#: views/document_views.py:400 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d文档排队等待页数重新计算" -#: views/document_views.py:444 +#: views/document_views.py:403 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d文档排队等待页数重新计算" -#: views/document_views.py:452 +#: views/document_views.py:411 msgid "Recalculate the page count of the selected document?" msgid_plural "Recalculate the page count of the selected documents?" msgstr[0] "重新计算所选文档的页数?" -#: views/document_views.py:463 +#: views/document_views.py:422 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "重新计算文档的页数:%s?" -#: views/document_views.py:479 +#: views/document_views.py:438 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." msgstr "文档“%(document)s”为空。在尝试检测页数之前请至少上传一个文档版本。" -#: views/document_views.py:492 +#: views/document_views.py:451 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "已为%(count)d文档处理转换清除请求" -#: views/document_views.py:495 +#: views/document_views.py:454 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "已为%(count)d文档处理转换清除请求" -#: views/document_views.py:503 +#: views/document_views.py:462 msgid "Clear all the page transformations for the selected document?" msgid_plural "Clear all the page transformations for the selected document?" msgstr[0] "清除所选文档的所有页面转换?" -#: views/document_views.py:514 +#: views/document_views.py:473 #, python-format msgid "Clear all the page transformations for the document: %s?" msgstr "清除文档所有页面转换:%s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:488 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "删除文档页面转换:%(document)s时出错:%(error)s。" -#: views/document_views.py:565 +#: views/document_views.py:520 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:528 msgid "Transformations cloned successfully." msgstr "转换克隆成功。" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:544 views/document_views.py:617 msgid "Submit" msgstr "提交" -#: views/document_views.py:582 +#: views/document_views.py:546 #, python-format msgid "Clone page transformations for document: %s" msgstr "克隆文档页面转换:%s" -#: views/document_views.py:656 +#: views/document_views.py:620 #, python-format msgid "Print: %s" msgstr "打印:%s" -#: views/document_views.py:681 +#: views/document_views.py:645 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "此视图将列出此用户帐户以任何方式查看或操作的最新文档。" + +#: views/document_views.py:649 +msgid "There are no recently accessed document" +msgstr "最近没有访问过的文档" + +#: views/document_views.py:671 +msgid "This view will list the latest documents uploaded in the system." +msgstr "此视图将列出系统中最新上传的文档。" + +#: views/document_views.py:675 +msgid "There are no recently added document" +msgstr "最近没有添加的文档" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "此列表中仅显示此文档的精确副本。" + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "此文档没有重复项" + +#: views/duplicated_document_views.py:44 +#, python-format +msgid "Duplicates for document: %s" +msgstr "文件重复:%s" + +#: views/duplicated_document_views.py:69 msgid "" "Duplicates are documents that are composed of the exact same file, down to " "the last byte. Files that have the same text or OCR but are not identical or" " were saved using a different file format will not appear as duplicates." msgstr "重复项是由完全相同的文件组成的文档,直到最后一个字节。具有相同文本或OCR但不一致或使用不同文件格式保存的文件不会显示为重复项。" -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" msgstr "没有重复的文档" -#: views/document_views.py:706 -msgid "" -"This view will list the latest documents viewed or manipulated in any way by" -" this user account." -msgstr "此视图将列出此用户帐户以任何方式查看或操作的最新文档。" +#: views/duplicated_document_views.py:86 +msgid "Scan for duplicated documents?" +msgstr "扫描重复的文件?" -#: views/document_views.py:710 -msgid "There are no recently accessed document" -msgstr "最近没有访问过的文档" - -#: views/document_views.py:732 -msgid "This view will list the latest documents uploaded in the system." -msgstr "此视图将列出系统中最新上传的文档。" - -#: views/document_views.py:736 -msgid "There are no recently added document" -msgstr "最近没有添加的文档" +#: views/duplicated_document_views.py:93 +msgid "Duplicated document scan queued successfully." +msgstr "重复文档扫描成功排队。" #: views/favorite_document_views.py:33 #, python-format @@ -1315,22 +1343,6 @@ msgid "Remove the selected document from favorites" msgid_plural "Remove the selected documents from favorites" msgstr[0] "从收藏夹中删除所选文档" -#: views/misc_views.py:19 -msgid "Clear the document image cache?" -msgstr "清除文档图像缓存?" - -#: views/misc_views.py:26 -msgid "Document cache clearing queued successfully." -msgstr "文档缓存清除成功排队。" - -#: views/misc_views.py:32 -msgid "Scan for duplicated documents?" -msgstr "扫描重复的文件?" - -#: views/misc_views.py:39 -msgid "Duplicated document scan queued successfully." -msgstr "重复文档扫描成功排队。" - #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." diff --git a/mayan/apps/documents/managers.py b/mayan/apps/documents/managers.py index e42fca6f00..8235fbb37f 100644 --- a/mayan/apps/documents/managers.py +++ b/mayan/apps/documents/managers.py @@ -22,28 +22,9 @@ class DocumentManager(models.Manager): def get_queryset(self): return TrashCanQuerySet( - self.model, using=self._db + model=self.model, using=self._db ).filter(in_trash=False).filter(is_stub=False) - def invalidate_cache(self): - for document in self.model.objects.all(): - document.invalidate_cache() - - -class DocumentPageCachedImage(models.Manager): - def get_by_natural_key(self, filename, document_page_natural_key): - DocumentPage = apps.get_model( - app_label='documents', model_name='DocumentPage' - ) - try: - document_page = DocumentPage.objects.get_by_natural_key( - *document_page_natural_key - ) - except DocumentPage.DoesNotExist: - raise self.model.DoesNotExist - - return self.get(document_page__pk=document_page.pk, filename=filename) - class DocumentPageManager(models.Manager): def get_by_natural_key(self, page_number, document_version_natural_key): @@ -57,6 +38,11 @@ class DocumentPageManager(models.Manager): return self.get(document_version__pk=document_version.pk, page_number=page_number) + def get_queryset(self): + return models.QuerySet( + model=self.model, using=self._db + ).filter(enabled=True) + class DocumentTypeManager(models.Manager): def check_delete_periods(self): diff --git a/mayan/apps/documents/migrations/0029_auto_20160122_0755.py b/mayan/apps/documents/migrations/0029_auto_20160122_0755.py index a2d8dd2826..520bc5d4f3 100644 --- a/mayan/apps/documents/migrations/0029_auto_20160122_0755.py +++ b/mayan/apps/documents/migrations/0029_auto_20160122_0755.py @@ -14,6 +14,7893 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='document', name='language', - field=models.CharField(default=b'eng', max_length=8, verbose_name='Language', blank=True, choices=[[b'aaa', b'Ghotuo'], [b'aab', b'Alumu-Tesu'], [b'aac', b'Ari'], [b'aad', b'Amal'], [b'aae', 'Albanian, Arb\xebresh\xeb'], [b'aaf', b'Aranadan'], [b'aag', b'Ambrak'], [b'aah', b"Arapesh, Abu'"], [b'aai', b'Arifama-Miniafia'], [b'aak', b'Ankave'], [b'aal', b'Afade'], [b'aam', b'Aramanik'], [b'aan', 'Anamb\xe9'], [b'aao', b'Arabic, Algerian Saharan'], [b'aap', 'Ar\xe1ra, Par\xe1'], [b'aaq', b'Abnaki, Eastern'], [b'aar', b'Afar'], [b'aas', 'Aas\xe1x'], [b'aat', b'Albanian, Arvanitika'], [b'aau', b'Abau'], [b'aaw', b'Solong'], [b'aax', b'Mandobo Atas'], [b'aaz', b'Amarasi'], [b'aba', 'Ab\xe9'], [b'abb', b'Bankon'], [b'abc', b'Ayta, Ambala'], [b'abd', b'Manide'], [b'abe', b'Abnaki, Western'], [b'abf', b'Abai Sungai'], [b'abg', b'Abaga'], [b'abh', b'Arabic, Tajiki'], [b'abi', b'Abidji'], [b'abj', b'Aka-Bea'], [b'abk', b'Abkhazian'], [b'abl', b'Lampung Nyo'], [b'abm', b'Abanyom'], [b'abn', b'Abua'], [b'abo', b'Abon'], [b'abp', b'Ayta, Abellen'], [b'abq', b'Abaza'], [b'abr', b'Abron'], [b'abs', b'Malay, Ambonese'], [b'abt', b'Ambulas'], [b'abu', b'Abure'], [b'abv', b'Arabic, Baharna'], [b'abw', b'Pal'], [b'abx', b'Inabaknon'], [b'aby', b'Aneme Wake'], [b'abz', b'Abui'], [b'aca', b'Achagua'], [b'acb', '\xc1nc\xe1'], [b'acd', b'Gikyode'], [b'ace', b'Achinese'], [b'acf', b'Creole French, Saint Lucian'], [b'ach', b'Acoli'], [b'aci', b'Aka-Cari'], [b'ack', b'Aka-Kora'], [b'acl', b'Akar-Bale'], [b'acm', b'Arabic, Mesopotamian'], [b'acn', b'Achang'], [b'acp', b'Acipa, Eastern'], [b'acq', b"Arabic, Ta'izzi-Adeni"], [b'acr', b'Achi'], [b'acs', 'Acro\xe1'], [b'act', b'Achterhoeks'], [b'acu', b'Achuar-Shiwiar'], [b'acv', b'Achumawi'], [b'acw', b'Arabic, Hijazi'], [b'acx', b'Arabic, Omani'], [b'acy', b'Arabic, Cypriot'], [b'acz', b'Acheron'], [b'ada', b'Adangme'], [b'adb', b'Adabe'], [b'add', b'Dzodinka'], [b'ade', b'Adele'], [b'adf', b'Arabic, Dhofari'], [b'adg', b'Andegerebinha'], [b'adh', b'Adhola'], [b'adi', b'Adi'], [b'adj', b'Adioukrou'], [b'adl', b'Galo'], [b'adn', b'Adang'], [b'ado', b'Abu'], [b'adp', b'Adap'], [b'adq', b'Adangbe'], [b'adr', b'Adonara'], [b'ads', b'Adamorobe Sign Language'], [b'adt', b'Adnyamathanha'], [b'adu', b'Aduge'], [b'adw', b'Amundava'], [b'adx', b'Tibetan, Amdo'], [b'ady', b'Adyghe'], [b'adz', b'Adzera'], [b'aea', b'Areba'], [b'aeb', b'Arabic, Tunisian'], [b'aec', b'Arabic, Saidi'], [b'aed', b'Argentine Sign Language'], [b'aee', b'Pashayi, Northeast'], [b'aek', b'Haeke'], [b'ael', b'Ambele'], [b'aem', b'Arem'], [b'aen', b'Armenian Sign Language'], [b'aeq', b'Aer'], [b'aer', b'Arrernte, Eastern'], [b'aes', b'Alsea'], [b'aeu', b'Akeu'], [b'aew', b'Ambakich'], [b'aey', b'Amele'], [b'aez', b'Aeka'], [b'afb', b'Arabic, Gulf'], [b'afd', b'Andai'], [b'afe', b'Putukwam'], [b'afg', b'Afghan Sign Language'], [b'afh', b'Afrihili'], [b'afi', b'Akrukay'], [b'afk', b'Nanubae'], [b'afn', b'Defaka'], [b'afo', b'Eloyi'], [b'afp', b'Tapei'], [b'afr', b'Afrikaans'], [b'afs', b'Creole, Afro-Seminole'], [b'aft', b'Afitti'], [b'afu', b'Awutu'], [b'afz', b'Obokuitai'], [b'aga', b'Aguano'], [b'agb', b'Legbo'], [b'agc', b'Agatu'], [b'agd', b'Agarabi'], [b'age', b'Angal'], [b'agf', b'Arguni'], [b'agg', b'Angor'], [b'agh', b'Ngelima'], [b'agi', b'Agariya'], [b'agj', b'Argobba'], [b'agk', b'Agta, Isarog'], [b'agl', b'Fembe'], [b'agm', b'Angaataha'], [b'agn', b'Agutaynen'], [b'ago', b'Tainae'], [b'agq', b'Aghem'], [b'agr', b'Aguaruna'], [b'ags', b'Esimbi'], [b'agt', b'Agta, Central Cagayan'], [b'agu', b'Aguacateco'], [b'agv', b'Dumagat, Remontado'], [b'agw', b'Kahua'], [b'agx', b'Aghul'], [b'agy', b'Alta, Southern'], [b'agz', b'Agta, Mt. Iriga'], [b'aha', b'Ahanta'], [b'ahb', b'Axamb'], [b'ahg', b'Qimant'], [b'ahh', b'Aghu'], [b'ahi', b'Aizi, Tiagbamrin'], [b'ahk', b'Akha'], [b'ahl', b'Igo'], [b'ahm', b'Aizi, Mobumrin'], [b'ahn', '\xc0h\xe0n'], [b'aho', b'Ahom'], [b'ahp', b'Aizi, Aproumu'], [b'ahr', b'Ahirani'], [b'ahs', b'Ashe'], [b'aht', b'Ahtena'], [b'aia', b'Arosi'], [b'aib', b'Ainu (China)'], [b'aic', b'Ainbai'], [b'aid', b'Alngith'], [b'aie', b'Amara'], [b'aif', b'Agi'], [b'aig', b'Creole English, Antigua and Barbuda'], [b'aih', b'Ai-Cham'], [b'aii', b'Neo-Aramaic, Assyrian'], [b'aij', b'Lishanid Noshan'], [b'aik', b'Ake'], [b'ail', b'Aimele'], [b'aim', b'Aimol'], [b'ain', b'Ainu (Japan)'], [b'aio', b'Aiton'], [b'aip', b'Burumakok'], [b'aiq', b'Aimaq'], [b'air', b'Airoran'], [b'ais', b'Amis, Nataoran'], [b'ait', b'Arikem'], [b'aiw', b'Aari'], [b'aix', b'Aighon'], [b'aiy', b'Ali'], [b'aja', b'Aja (Sudan)'], [b'ajg', b'Aja (Benin)'], [b'aji', 'Aji\xeb'], [b'ajn', b'Andajin'], [b'ajp', b'Arabic, South Levantine'], [b'ajt', b'Arabic, Judeo-Tunisian'], [b'aju', b'Arabic, Judeo-Moroccan'], [b'ajw', b'Ajawa'], [b'ajz', b'Karbi, Amri'], [b'aka', b'Akan'], [b'akb', b'Batak Angkola'], [b'akc', b'Mpur'], [b'akd', b'Ukpet-Ehom'], [b'ake', b'Akawaio'], [b'akf', b'Akpa'], [b'akg', b'Anakalangu'], [b'akh', b'Angal Heneng'], [b'aki', b'Aiome'], [b'akj', b'Aka-Jeru'], [b'akk', b'Akkadian'], [b'akl', b'Aklanon'], [b'akm', b'Aka-Bo'], [b'ako', b'Akurio'], [b'akp', b'Siwu'], [b'akq', b'Ak'], [b'akr', b'Araki'], [b'aks', b'Akaselem'], [b'akt', b'Akolet'], [b'aku', b'Akum'], [b'akv', b'Akhvakh'], [b'akw', b'Akwa'], [b'akx', b'Aka-Kede'], [b'aky', b'Aka-Kol'], [b'akz', b'Alabama'], [b'ala', b'Alago'], [b'alc', b'Qawasqar'], [b'ald', b'Alladian'], [b'ale', b'Aleut'], [b'alf', b'Alege'], [b'alh', b'Alawa'], [b'ali', b'Amaimon'], [b'alj', b'Alangan'], [b'alk', b'Alak'], [b'all', b'Allar'], [b'alm', b'Amblong'], [b'aln', b'Albanian, Gheg'], [b'alo', b'Larike-Wakasihu'], [b'alp', b'Alune'], [b'alq', b'Algonquin'], [b'alr', b'Alutor'], [b'als', b'Albanian, Tosk'], [b'alt', b'Altai, Southern'], [b'alu', b"'Are'are"], [b'alw', 'Alaba-K\u2019abeena'], [b'alx', b'Amol'], [b'aly', b'Alyawarr'], [b'alz', b'Alur'], [b'ama', 'Amanay\xe9'], [b'amb', b'Ambo'], [b'amc', b'Amahuaca'], [b'ame', b"Yanesha'"], [b'amf', b'Hamer-Banna'], [b'amg', b'Amurdak'], [b'amh', b'Amharic'], [b'ami', b'Amis'], [b'amj', b'Amdang'], [b'amk', b'Ambai'], [b'aml', b'War-Jaintia'], [b'amm', b'Ama (Papua New Guinea)'], [b'amn', b'Amanab'], [b'amo', b'Amo'], [b'amp', b'Alamblak'], [b'amq', b'Amahai'], [b'amr', b'Amarakaeri'], [b'ams', b'Amami-Oshima, Southern'], [b'amt', b'Amto'], [b'amu', b'Amuzgo, Guerrero'], [b'amv', b'Ambelau'], [b'amw', b'Neo-Aramaic, Western'], [b'amx', b'Anmatyerre'], [b'amy', b'Ami'], [b'amz', b'Atampaya'], [b'ana', b'Andaqui'], [b'anb', b'Andoa'], [b'anc', b'Ngas'], [b'and', b'Ansus'], [b'ane', 'X\xe2r\xe2c\xf9\xf9'], [b'anf', b'Animere'], [b'ang', b'English, Old (ca. 450-1100)'], [b'anh', b'Nend'], [b'ani', b'Andi'], [b'anj', b'Anor'], [b'ank', b'Goemai'], [b'anl', b'Chin, Anu-Hkongso'], [b'anm', b'Anal'], [b'ann', b'Obolo'], [b'ano', b'Andoque'], [b'anp', b'Angika'], [b'anq', b'Jarawa (India)'], [b'anr', b'Andh'], [b'ans', b'Anserma'], [b'ant', b'Antakarinya'], [b'anu', b'Anuak'], [b'anv', b'Denya'], [b'anw', b'Anaang'], [b'anx', b'Andra-Hus'], [b'any', b'Anyin'], [b'anz', b'Anem'], [b'aoa', b'Angolar'], [b'aob', b'Abom'], [b'aoc', b'Pemon'], [b'aod', b'Andarum'], [b'aoe', b'Angal Enen'], [b'aof', b'Bragat'], [b'aog', b'Angoram'], [b'aoh', b'Arma'], [b'aoi', b'Anindilyakwa'], [b'aoj', b'Mufian'], [b'aok', 'Arh\xf6'], [b'aol', b'Alor'], [b'aom', '\xd6mie'], [b'aon', b'Arapesh, Bumbita'], [b'aor', b'Aore'], [b'aos', b'Taikat'], [b'aot', b"A'tong"], [b'aou', b"A'ou"], [b'aox', b'Atorada'], [b'aoz', b'Uab Meto'], [b'apb', b"Sa'a"], [b'apc', b'Arabic, North Levantine'], [b'apd', b'Arabic, Sudanese'], [b'ape', b'Bukiyip'], [b'apf', b'Agta, Pahanan'], [b'apg', b'Ampanang'], [b'aph', b'Athpariya'], [b'api', 'Apiak\xe1'], [b'apj', b'Apache, Jicarilla'], [b'apk', b'Apache, Kiowa'], [b'apl', b'Apache, Lipan'], [b'apm', b'Apache, Mescalero-Chiricahua'], [b'apn', 'Apinay\xe9'], [b'apo', b'Ambul'], [b'app', b'Apma'], [b'apq', b'A-Pucikwar'], [b'apr', b'Arop-Lokep'], [b'aps', b'Arop-Sissano'], [b'apt', b'Apatani'], [b'apu', 'Apurin\xe3'], [b'apv', b'Alapmunte'], [b'apw', b'Apache, Western'], [b'apx', b'Aputai'], [b'apy', 'Apala\xed'], [b'apz', b'Safeyoka'], [b'aqc', b'Archi'], [b'aqd', b'Dogon, Ampari'], [b'aqg', b'Arigidi'], [b'aqm', b'Atohwaim'], [b'aqn', b'Alta, Northern'], [b'aqp', b'Atakapa'], [b'aqr', 'Arh\xe2'], [b'aqz', b'Akuntsu'], [b'ara', b'Arabic'], [b'arb', b'Arabic, Standard'], [b'arc', b'Aramaic, Official (700-300 BCE)'], [b'ard', b'Arabana'], [b'are', b'Arrarnta, Western'], [b'arg', b'Aragonese'], [b'arh', b'Arhuaco'], [b'ari', b'Arikara'], [b'arj', b'Arapaso'], [b'ark', 'Arikap\xfa'], [b'arl', b'Arabela'], [b'arn', b'Mapudungun'], [b'aro', b'Araona'], [b'arp', b'Arapaho'], [b'arq', b'Arabic, Algerian'], [b'arr', b'Karo (Brazil)'], [b'ars', b'Arabic, Najdi'], [b'aru', 'Aru\xe1 (Amazonas State)'], [b'arv', b'Arbore'], [b'arw', b'Arawak'], [b'arx', 'Aru\xe1 (Rodonia State)'], [b'ary', b'Arabic, Moroccan'], [b'arz', b'Arabic, Egyptian'], [b'asa', b'Asu (Tanzania)'], [b'asb', b'Assiniboine'], [b'asc', b'Asmat, Casuarina Coast'], [b'asd', b'Asas'], [b'ase', b'American Sign Language'], [b'asf', b'Australian Sign Language'], [b'asg', b'Cishingini'], [b'ash', b'Abishira'], [b'asi', b'Buruwai'], [b'asj', b'Sari'], [b'ask', b'Ashkun'], [b'asl', b'Asilulu'], [b'asm', b'Assamese'], [b'asn', 'Asurin\xed, Xing\xfa'], [b'aso', b'Dano'], [b'asp', b'Algerian Sign Language'], [b'asq', b'Austrian Sign Language'], [b'asr', b'Asuri'], [b'ass', b'Ipulo'], [b'ast', b'Asturian'], [b'asu', b'Asurini, Tocantins'], [b'asv', b'Asoa'], [b'asw', b'Australian Aborigines Sign Language'], [b'asx', b'Muratayak'], [b'asy', b'Asmat, Yaosakor'], [b'asz', b'As'], [b'ata', b'Pele-Ata'], [b'atb', b'Zaiwa'], [b'atc', b'Atsahuaca'], [b'atd', b'Manobo, Ata'], [b'ate', b'Atemble'], [b'atg', b'Ivbie North-Okpela-Arhe'], [b'ati', 'Atti\xe9'], [b'atj', b'Atikamekw'], [b'atk', b'Ati'], [b'atl', b'Agta, Mt. Iraya'], [b'atm', b'Ata'], [b'atn', b'Ashtiani'], [b'ato', b'Atong'], [b'atp', b'Atta, Pudtol'], [b'atq', b'Aralle-Tabulahan'], [b'atr', b'Waimiri-Atroari'], [b'ats', b'Gros Ventre'], [b'att', b'Atta, Pamplona'], [b'atu', b'Reel'], [b'atv', b'Altai, Northern'], [b'atw', b'Atsugewi'], [b'atx', b'Arutani'], [b'aty', b'Aneityum'], [b'atz', b'Arta'], [b'aua', b'Asumboa'], [b'aub', b'Alugu'], [b'auc', b'Waorani'], [b'aud', b'Anuta'], [b'aue', b"=/Kx'au//'ein"], [b'aug', b'Aguna'], [b'auh', b'Aushi'], [b'aui', b'Anuki'], [b'auj', b'Awjilah'], [b'auk', b'Heyo'], [b'aul', b'Aulua'], [b'aum', b'Asu (Nigeria)'], [b'aun', b'One, Molmo'], [b'auo', b'Auyokawa'], [b'aup', b'Makayam'], [b'auq', b'Anus'], [b'aur', b'Aruek'], [b'aut', b'Austral'], [b'auu', b'Auye'], [b'auw', b'Awyi'], [b'aux', 'Aur\xe1'], [b'auy', b'Awiyaana'], [b'auz', b'Arabic, Uzbeki'], [b'ava', b'Avaric'], [b'avb', b'Avau'], [b'avd', b'Alviri-Vidari'], [b'ave', b'Avestan'], [b'avi', b'Avikam'], [b'avk', b'Kotava'], [b'avl', b'Arabic, Eastern Egyptian Bedawi'], [b'avm', b'Angkamuthi'], [b'avn', b'Avatime'], [b'avo', b'Agavotaguerra'], [b'avs', b'Aushiri'], [b'avt', b'Au'], [b'avu', b'Avokaya'], [b'avv', 'Av\xe1-Canoeiro'], [b'awa', b'Awadhi'], [b'awb', b'Awa (Papua New Guinea)'], [b'awc', b'Cicipu'], [b'awe', 'Awet\xed'], [b'awg', b'Anguthimri'], [b'awh', b'Awbono'], [b'awi', b'Aekyom'], [b'awk', b'Awabakal'], [b'awm', b'Arawum'], [b'awn', b'Awngi'], [b'awo', b'Awak'], [b'awr', b'Awera'], [b'aws', b'Awyu, South'], [b'awt', 'Arawet\xe9'], [b'awu', b'Awyu, Central'], [b'awv', b'Awyu, Jair'], [b'aww', b'Awun'], [b'awx', b'Awara'], [b'awy', b'Awyu, Edera'], [b'axb', b'Abipon'], [b'axe', b'Ayerrerenge'], [b'axg', 'Ar\xe1ra, Mato Grosso'], [b'axk', b'Yaka (Central African Republic)'], [b'axl', b'Aranda, Lower Southern'], [b'axm', b'Armenian, Middle'], [b'axx', 'X\xe2r\xe2gur\xe8'], [b'aya', b'Awar'], [b'ayb', b'Gbe, Ayizo'], [b'ayc', b'Aymara, Southern'], [b'ayd', b'Ayabadhu'], [b'aye', b'Ayere'], [b'ayg', b'Ginyanga'], [b'ayh', b'Arabic, Hadrami'], [b'ayi', b'Leyigha'], [b'ayk', b'Akuku'], [b'ayl', b'Arabic, Libyan'], [b'aym', b'Aymara'], [b'ayn', b'Arabic, Sanaani'], [b'ayo', b'Ayoreo'], [b'ayp', b'Arabic, North Mesopotamian'], [b'ayq', b'Ayi (Papua New Guinea)'], [b'ayr', b'Aymara, Central'], [b'ays', b'Ayta, Sorsogon'], [b'ayt', b'Ayta, Magbukun'], [b'ayu', b'Ayu'], [b'ayy', b'Ayta, Tayabas'], [b'ayz', b'Mai Brat'], [b'aza', b'Azha'], [b'azb', b'Azerbaijani, South'], [b'azd', b'Nahuatl, Eastern Durango'], [b'aze', b'Azerbaijani'], [b'azg', b'Amuzgo, San Pedro Amuzgos'], [b'azj', b'Azerbaijani, North'], [b'azm', b'Amuzgo, Ipalapa'], [b'azn', b'Nahuatl, Western Durango'], [b'azo', b'Awing'], [b'azt', b'Atta, Faire'], [b'azz', b'Nahuatl, Highland Puebla'], [b'baa', b'Babatana'], [b'bab', 'Bainouk-Gunyu\xf1o'], [b'bac', b'Badui'], [b'bae', 'Bar\xe9'], [b'baf', b'Nubaca'], [b'bag', b'Tuki'], [b'bah', b'Creole English, Bahamas'], [b'baj', b'Barakai'], [b'bak', b'Bashkir'], [b'bal', b'Baluchi'], [b'bam', b'Bambara'], [b'ban', b'Balinese'], [b'bao', b'Waimaha'], [b'bap', b'Bantawa'], [b'bar', b'Bavarian'], [b'bas', b'Basa (Cameroon)'], [b'bau', b'Bada (Nigeria)'], [b'bav', b'Vengo'], [b'baw', b'Bambili-Bambui'], [b'bax', b'Bamun'], [b'bay', b'Batuley'], [b'bba', b'Baatonum'], [b'bbb', b'Barai'], [b'bbc', b'Batak Toba'], [b'bbd', b'Bau'], [b'bbe', b'Bangba'], [b'bbf', b'Baibai'], [b'bbg', b'Barama'], [b'bbh', b'Bugan'], [b'bbi', b'Barombi'], [b'bbj', "Ghom\xe1l\xe1'"], [b'bbk', b'Babanki'], [b'bbl', b'Bats'], [b'bbm', b'Babango'], [b'bbn', b'Uneapa'], [b'bbo', 'Bobo Madar\xe9, Northern'], [b'bbp', b'Banda, West Central'], [b'bbq', b'Bamali'], [b'bbr', b'Girawa'], [b'bbs', b'Bakpinka'], [b'bbt', b'Mburku'], [b'bbu', b'Kulung (Nigeria)'], [b'bbv', b'Karnai'], [b'bbw', b'Baba'], [b'bbx', b'Bubia'], [b'bby', b'Befang'], [b'bbz', b'Creole Arabic, Babalia'], [b'bca', b'Bai, Central'], [b'bcb', b'Bainouk-Samik'], [b'bcc', b'Balochi, Southern'], [b'bcd', b'Babar, North'], [b'bce', b'Bamenyam'], [b'bcf', b'Bamu'], [b'bcg', b'Baga Binari'], [b'bch', b'Bariai'], [b'bci', 'Baoul\xe9'], [b'bcj', b'Bardi'], [b'bck', b'Bunaba'], [b'bcl', b'Bikol, Central'], [b'bcm', b'Bannoni'], [b'bcn', b'Bali (Nigeria)'], [b'bco', b'Kaluli'], [b'bcp', b'Bali (Democratic Republic of Congo)'], [b'bcq', b'Bench'], [b'bcr', b'Babine'], [b'bcs', b'Kohumono'], [b'bct', b'Bendi'], [b'bcu', b'Awad Bing'], [b'bcv', b'Shoo-Minda-Nye'], [b'bcw', b'Bana'], [b'bcy', b'Bacama'], [b'bcz', b'Bainouk-Gunyaamolo'], [b'bda', b'Bayot'], [b'bdb', b'Basap'], [b'bdc', 'Ember\xe1-Baud\xf3'], [b'bdd', b'Bunama'], [b'bde', b'Bade'], [b'bdf', b'Biage'], [b'bdg', b'Bonggi'], [b'bdh', b'Baka (Sudan)'], [b'bdi', b'Burun'], [b'bdj', b'Bai'], [b'bdk', b'Budukh'], [b'bdl', b'Bajau, Indonesian'], [b'bdm', b'Buduma'], [b'bdn', b'Baldemu'], [b'bdo', b'Morom'], [b'bdp', b'Bende'], [b'bdq', b'Bahnar'], [b'bdr', b'Bajau, West Coast'], [b'bds', b'Burunge'], [b'bdt', b'Bokoto'], [b'bdu', b'Oroko'], [b'bdv', b'Bodo Parja'], [b'bdw', b'Baham'], [b'bdx', b'Budong-Budong'], [b'bdy', b'Bandjalang'], [b'bdz', b'Badeshi'], [b'bea', b'Beaver'], [b'beb', b'Bebele'], [b'bec', b'Iceve-Maci'], [b'bed', b'Bedoanas'], [b'bee', b'Byangsi'], [b'bef', b'Benabena'], [b'beg', b'Belait'], [b'beh', b'Biali'], [b'bei', b"Bekati'"], [b'bej', b'Beja'], [b'bek', b'Bebeli'], [b'bel', b'Belarusian'], [b'bem', b'Bemba (Zambia)'], [b'ben', b'Bengali'], [b'beo', b'Beami'], [b'bep', b'Besoa'], [b'beq', b'Beembe'], [b'bes', b'Besme'], [b'bet', 'B\xe9te, Guiberoua'], [b'beu', b'Blagar'], [b'bev', 'B\xe9t\xe9, Daloa'], [b'bew', b'Betawi'], [b'bex', b'Jur Modo'], [b'bey', b'Beli (Papua New Guinea)'], [b'bez', b'Bena (Tanzania)'], [b'bfa', b'Bari'], [b'bfb', b'Bareli, Pauri'], [b'bfc', b'Bai, Northern'], [b'bfd', b'Bafut'], [b'bfe', b'Betaf'], [b'bff', b'Bofi'], [b'bfg', b'Kayan, Busang'], [b'bfh', b'Blafe'], [b'bfi', b'British Sign Language'], [b'bfj', b'Bafanji'], [b'bfk', b'Ban Khor Sign Language'], [b'bfl', 'Banda-Nd\xe9l\xe9'], [b'bfm', b'Mmen'], [b'bfn', b'Bunak'], [b'bfo', b'Birifor, Malba'], [b'bfp', b'Beba'], [b'bfq', b'Badaga'], [b'bfr', b'Bazigar'], [b'bfs', b'Bai, Southern'], [b'bft', b'Balti'], [b'bfu', b'Gahri'], [b'bfw', b'Bondo'], [b'bfx', b'Bantayanon'], [b'bfy', b'Bagheli'], [b'bfz', b'Pahari, Mahasu'], [b'bga', b'Gwamhi-Wuri'], [b'bgb', b'Bobongko'], [b'bgc', b'Haryanvi'], [b'bgd', b'Bareli, Rathwi'], [b'bge', b'Bauria'], [b'bgf', b'Bangandu'], [b'bgg', b'Bugun'], [b'bgi', b'Giangan'], [b'bgj', b'Bangolan'], [b'bgk', b'Bit'], [b'bgl', b'Bo (Laos)'], [b'bgm', b'Baga Mboteni'], [b'bgn', b'Balochi, Western'], [b'bgo', b'Baga Koga'], [b'bgp', b'Balochi, Eastern'], [b'bgq', b'Bagri'], [b'bgr', b'Chin, Bawm'], [b'bgs', b'Tagabawa'], [b'bgt', b'Bughotu'], [b'bgu', b'Mbongno'], [b'bgv', b'Warkay-Bipim'], [b'bgw', b'Bhatri'], [b'bgx', b'Turkish, Balkan Gagauz'], [b'bgy', b'Benggoi'], [b'bgz', b'Banggai'], [b'bha', b'Bharia'], [b'bhb', b'Bhili'], [b'bhc', b'Biga'], [b'bhd', b'Bhadrawahi'], [b'bhe', b'Bhaya'], [b'bhf', b'Odiai'], [b'bhg', b'Binandere'], [b'bhh', b'Bukharic'], [b'bhi', b'Bhilali'], [b'bhj', b'Bahing'], [b'bhl', b'Bimin'], [b'bhm', b'Bathari'], [b'bhn', b'Neo-Aramaic, Bohtan'], [b'bho', b'Bhojpuri'], [b'bhp', b'Bima'], [b'bhq', b'Tukang Besi South'], [b'bhr', b'Malagasy, Bara'], [b'bhs', b'Buwal'], [b'bht', b'Bhattiyali'], [b'bhu', b'Bhunjia'], [b'bhv', b'Bahau'], [b'bhw', b'Biak'], [b'bhx', b'Bhalay'], [b'bhy', b'Bhele'], [b'bhz', b'Bada (Indonesia)'], [b'bia', b'Badimaya'], [b'bib', b'Bissa'], [b'bic', b'Bikaru'], [b'bid', b'Bidiyo'], [b'bie', b'Bepour'], [b'bif', b'Biafada'], [b'big', b'Biangai'], [b'bij', b'Vaghat-Ya-Bijim-Legeri'], [b'bik', b'Bikol'], [b'bil', b'Bile'], [b'bim', b'Bimoba'], [b'bin', b'Bini'], [b'bio', b'Nai'], [b'bip', b'Bila'], [b'biq', b'Bipi'], [b'bir', b'Bisorio'], [b'bis', b'Bislama'], [b'bit', b'Berinomo'], [b'biu', b'Biete'], [b'biv', b'Birifor, Southern'], [b'biw', b'Kol (Cameroon)'], [b'bix', b'Bijori'], [b'biy', b'Birhor'], [b'biz', b'Baloi'], [b'bja', b'Budza'], [b'bjb', b'Banggarla'], [b'bjc', b'Bariji'], [b'bje', b'Mien, Biao-Jiao'], [b'bjf', b'Neo-Aramaic, Barzani Jewish'], [b'bjg', b'Bidyogo'], [b'bjh', b'Bahinemo'], [b'bji', b'Burji'], [b'bjj', b'Kanauji'], [b'bjk', b'Barok'], [b'bjl', b'Bulu (Papua New Guinea)'], [b'bjm', b'Bajelani'], [b'bjn', b'Banjar'], [b'bjo', b'Banda, Mid-Southern'], [b'bjp', b'Fanamaket'], [b'bjr', b'Binumarien'], [b'bjs', b'Bajan'], [b'bjt', b'Balanta-Ganja'], [b'bju', b'Busuu'], [b'bjv', b'Bedjond'], [b'bjw', 'Bakw\xe9'], [b'bjx', b'Itneg, Banao'], [b'bjy', b'Bayali'], [b'bjz', b'Baruga'], [b'bka', b'Kyak'], [b'bkc', b'Baka (Cameroon)'], [b'bkd', b'Binukid'], [b'bkf', b'Beeke'], [b'bkg', b'Buraka'], [b'bkh', b'Bakoko'], [b'bki', b'Baki'], [b'bkj', b'Pande'], [b'bkk', b'Brokskat'], [b'bkl', b'Berik'], [b'bkm', b'Kom (Cameroon)'], [b'bkn', b'Bukitan'], [b'bko', b"Kwa'"], [b'bkp', b'Boko (Democratic Republic of Congo)'], [b'bkq', 'Bakair\xed'], [b'bkr', b'Bakumpai'], [b'bks', b'Sorsoganon, Northern'], [b'bkt', b'Boloki'], [b'bku', b'Buhid'], [b'bkv', b'Bekwarra'], [b'bkw', b'Bekwel'], [b'bkx', b'Baikeno'], [b'bky', b'Bokyi'], [b'bkz', b'Bungku'], [b'bla', b'Siksika'], [b'blb', b'Bilua'], [b'blc', b'Bella Coola'], [b'bld', b'Bolango'], [b'ble', b'Balanta-Kentohe'], [b'blf', b'Buol'], [b'blg', b'Balau'], [b'blh', b'Kuwaa'], [b'bli', b'Bolia'], [b'blj', b'Bolongan'], [b'blk', b"Karen, Pa'o"], [b'bll', b'Biloxi'], [b'blm', b'Beli (Sudan)'], [b'bln', b'Bikol, Southern Catanduanes'], [b'blo', b'Anii'], [b'blp', b'Blablanga'], [b'blq', b'Baluan-Pam'], [b'blr', b'Blang'], [b'bls', b'Balaesang'], [b'blt', b'Tai Dam'], [b'blv', b'Bolo'], [b'blw', b'Balangao'], [b'blx', b'Ayta, Mag-Indi'], [b'bly', b'Notre'], [b'blz', b'Balantak'], [b'bma', b'Lame'], [b'bmb', b'Bembe'], [b'bmc', b'Biem'], [b'bmd', b'Manduri, Baga'], [b'bme', b'Limassa'], [b'bmf', b'Bom'], [b'bmg', b'Bamwe'], [b'bmh', b'Kein'], [b'bmi', b'Bagirmi'], [b'bmj', b'Bote-Majhi'], [b'bmk', b'Ghayavi'], [b'bml', b'Bomboli'], [b'bmm', b'Malagasy, Northern Betsimisaraka'], [b'bmn', b'Bina (Papua New Guinea)'], [b'bmo', b'Bambalang'], [b'bmp', b'Bulgebi'], [b'bmq', b'Bomu'], [b'bmr', b'Muinane'], [b'bms', b'Kanuri, Bilma'], [b'bmt', b'Biao Mon'], [b'bmu', b'Somba-Siawari'], [b'bmv', b'Bum'], [b'bmw', b'Bomwali'], [b'bmx', b'Baimak'], [b'bmy', b'Bemba (Democratic Republic of Congo)'], [b'bmz', b'Baramu'], [b'bna', b'Bonerate'], [b'bnb', b'Bookan'], [b'bnc', b'Bontok'], [b'bnd', b'Banda (Indonesia)'], [b'bne', b'Bintauna'], [b'bnf', b'Masiwang'], [b'bng', b'Benga'], [b'bni', b'Bangi'], [b'bnj', b'Tawbuid, Eastern'], [b'bnk', b'Bierebo'], [b'bnl', b'Boon'], [b'bnm', b'Batanga'], [b'bnn', b'Bunun'], [b'bno', b'Bantoanon'], [b'bnp', b'Bola'], [b'bnq', b'Bantik'], [b'bnr', b'Butmas-Tur'], [b'bns', b'Bundeli'], [b'bnu', b'Bentong'], [b'bnv', b'Bonerif'], [b'bnw', b'Bisis'], [b'bnx', b'Bangubangu'], [b'bny', b'Bintulu'], [b'bnz', b'Beezen'], [b'boa', b'Bora'], [b'bob', b'Aweer'], [b'bod', b'Tibetan'], [b'boe', b'Mundabli'], [b'bof', b'Bolon'], [b'bog', b'Bamako Sign Language'], [b'boh', b'Boma'], [b'boi', 'Barbare\xf1o'], [b'boj', b'Anjam'], [b'bok', b'Bonjo'], [b'bol', b'Bole'], [b'bom', b'Berom'], [b'bon', b'Bine'], [b'boo', 'Bozo, Tiemac\xe8w\xe8'], [b'bop', b'Bonkiman'], [b'boq', b'Bogaya'], [b'bor', 'Bor\xf4ro'], [b'bos', b'Bosnian'], [b'bot', b'Bongo'], [b'bou', b'Bondei'], [b'bov', b'Tuwuli'], [b'bow', b'Rema'], [b'box', b'Buamu'], [b'boy', b'Bodo (Central African Republic)'], [b'boz', 'Bozo, Ti\xe9yaxo'], [b'bpa', b'Daakaka'], [b'bpb', b'Barbacoas'], [b'bpd', b'Banda-Banda'], [b'bpg', b'Bonggo'], [b'bph', b'Botlikh'], [b'bpi', b'Bagupi'], [b'bpj', b'Binji'], [b'bpk', b'Orowe'], [b'bpl', b'Broome Pearling Lugger Pidgin'], [b'bpm', b'Biyom'], [b'bpn', b'Dzao Min'], [b'bpo', b'Anasi'], [b'bpp', b'Kaure'], [b'bpq', b'Malay, Banda'], [b'bpr', b'Blaan, Koronadal'], [b'bps', b'Blaan, Sarangani'], [b'bpt', b'Barrow Point'], [b'bpu', b'Bongu'], [b'bpv', b'Marind, Bian'], [b'bpw', b'Bo (Papua New Guinea)'], [b'bpx', b'Bareli, Palya'], [b'bpy', b'Bishnupriya'], [b'bpz', b'Bilba'], [b'bqa', b'Tchumbuli'], [b'bqb', b'Bagusa'], [b'bqc', b'Boko (Benin)'], [b'bqd', b'Bung'], [b'bqf', b'Baga Kaloum'], [b'bqg', b'Bago-Kusuntu'], [b'bqh', b'Baima'], [b'bqi', b'Bakhtiari'], [b'bqj', b'Bandial'], [b'bqk', 'Banda-Mbr\xe8s'], [b'bql', b'Bilakura'], [b'bqm', b'Wumboko'], [b'bqn', b'Bulgarian Sign Language'], [b'bqo', b'Balo'], [b'bqp', b'Busa'], [b'bqq', b'Biritai'], [b'bqr', b'Burusu'], [b'bqs', b'Bosngun'], [b'bqt', b'Bamukumbit'], [b'bqu', b'Boguru'], [b'bqv', b'Koro Wachi'], [b'bqw', b'Buru (Nigeria)'], [b'bqx', b'Baangi'], [b'bqy', b'Bengkala Sign Language'], [b'bqz', b'Bakaka'], [b'bra', b'Braj'], [b'brb', b'Lave'], [b'brc', b'Creole Dutch, Berbice'], [b'brd', b'Baraamu'], [b'bre', b'Breton'], [b'brf', b'Bera'], [b'brg', b'Baure'], [b'brh', b'Brahui'], [b'bri', b'Mokpwe'], [b'brj', b'Bieria'], [b'brk', b'Birked'], [b'brl', b'Birwa'], [b'brm', b'Barambu'], [b'brn', b'Boruca'], [b'bro', b'Brokkat'], [b'brp', b'Barapasi'], [b'brq', b'Breri'], [b'brr', b'Birao'], [b'brs', b'Baras'], [b'brt', b'Bitare'], [b'bru', b'Bru, Eastern'], [b'brv', b'Bru, Western'], [b'brw', b'Bellari'], [b'brx', b'Bodo (India)'], [b'bry', b'Burui'], [b'brz', b'Bilbil'], [b'bsa', b'Abinomn'], [b'bsb', b'Bisaya, Brunei'], [b'bsc', b'Bassari'], [b'bse', b'Wushi'], [b'bsf', b'Bauchi'], [b'bsg', b'Bashkardi'], [b'bsh', b'Kati'], [b'bsi', b'Bassossi'], [b'bsj', b'Bangwinji'], [b'bsk', b'Burushaski'], [b'bsl', b'Basa-Gumna'], [b'bsm', b'Busami'], [b'bsn', b'Barasana-Eduria'], [b'bso', b'Buso'], [b'bsp', b'Baga Sitemu'], [b'bsq', b'Bassa'], [b'bsr', b'Bassa-Kontagora'], [b'bss', b'Akoose'], [b'bst', b'Basketo'], [b'bsu', b'Bahonsuai'], [b'bsv', 'Baga Soban\xe9'], [b'bsw', b'Baiso'], [b'bsx', b'Yangkam'], [b'bsy', b'Bisaya, Sabah'], [b'bta', b'Bata'], [b'btc', b'Bati (Cameroon)'], [b'btd', b'Batak Dairi'], [b'bte', b'Gamo-Ningi'], [b'btf', b'Birgit'], [b'btg', 'B\xe9t\xe9, Gagnoa'], [b'bth', b'Bidayuh, Biatah'], [b'bti', b'Burate'], [b'btj', b'Malay, Bacanese'], [b'btl', b'Bhatola'], [b'btm', b'Batak Mandailing'], [b'btn', b'Ratagnon'], [b'bto', b'Bikol, Rinconada'], [b'btp', b'Budibud'], [b'btq', b'Batek'], [b'btr', b'Baetora'], [b'bts', b'Batak Simalungun'], [b'btt', b'Bete-Bendi'], [b'btu', b'Batu'], [b'btv', b'Bateri'], [b'btw', b'Butuanon'], [b'btx', b'Batak Karo'], [b'bty', b'Bobot'], [b'btz', b'Batak Alas-Kluet'], [b'bua', b'Buriat'], [b'bub', b'Bua'], [b'buc', b'Bushi'], [b'bud', b'Ntcham'], [b'bue', b'Beothuk'], [b'buf', b'Bushoong'], [b'bug', b'Buginese'], [b'buh', b'Bunu, Younuo'], [b'bui', b'Bongili'], [b'buj', b'Basa-Gurmana'], [b'buk', b'Bugawac'], [b'bul', b'Bulgarian'], [b'bum', b'Bulu (Cameroon)'], [b'bun', b'Sherbro'], [b'buo', b'Terei'], [b'bup', b'Busoa'], [b'buq', b'Brem'], [b'bus', b'Bokobaru'], [b'but', b'Bungain'], [b'buu', b'Budu'], [b'buv', b'Bun'], [b'buw', b'Bubi'], [b'bux', b'Boghom'], [b'buy', b'Bullom So'], [b'buz', b'Bukwen'], [b'bva', b'Barein'], [b'bvb', b'Bube'], [b'bvc', b'Baelelea'], [b'bvd', b'Baeggu'], [b'bve', b'Malay, Berau'], [b'bvf', b'Boor'], [b'bvg', b'Bonkeng'], [b'bvh', b'Bure'], [b'bvi', b'Belanda Viri'], [b'bvj', b'Baan'], [b'bvk', b'Bukat'], [b'bvl', b'Bolivian Sign Language'], [b'bvm', b'Bamunka'], [b'bvn', b'Buna'], [b'bvo', b'Bolgo'], [b'bvp', b'Bumang'], [b'bvq', b'Birri'], [b'bvr', b'Burarra'], [b'bvt', b'Bati (Indonesia)'], [b'bvu', b'Malay, Bukit'], [b'bvv', b'Baniva'], [b'bvw', b'Boga'], [b'bvx', b'Dibole'], [b'bvy', b'Baybayanon'], [b'bvz', b'Bauzi'], [b'bwa', b'Bwatoo'], [b'bwb', b'Namosi-Naitasiri-Serua'], [b'bwc', b'Bwile'], [b'bwd', b'Bwaidoka'], [b'bwe', b'Karen, Bwe'], [b'bwf', b'Boselewa'], [b'bwg', b'Barwe'], [b'bwh', b'Bishuo'], [b'bwi', b'Baniwa'], [b'bwj', 'Bwamu, L\xe1\xe1 L\xe1\xe1'], [b'bwk', b'Bauwaki'], [b'bwl', b'Bwela'], [b'bwm', b'Biwat'], [b'bwn', b'Bunu, Wunai'], [b'bwo', b'Boro (Ethiopia)'], [b'bwp', b'Mandobo Bawah'], [b'bwq', 'Bobo Madar\xe9, Southern'], [b'bwr', b'Bura-Pabir'], [b'bws', b'Bomboma'], [b'bwt', b'Bafaw-Balong'], [b'bwu', b'Buli (Ghana)'], [b'bww', b'Bwa'], [b'bwx', b'Bunu, Bu-Nao'], [b'bwy', b'Bwamu, Cwi'], [b'bwz', b'Bwisi'], [b'bxa', b'Tairaha'], [b'bxb', b'Bor, Belanda'], [b'bxc', b'Molengue'], [b'bxd', b'Pela'], [b'bxe', b'Birale'], [b'bxf', b'Bilur'], [b'bxg', b'Bangala'], [b'bxh', b'Buhutu'], [b'bxi', b'Pirlatapa'], [b'bxj', b'Bayungu'], [b'bxk', b'Bukusu'], [b'bxl', b'Jalkunan'], [b'bxm', b'Buriat, Mongolia'], [b'bxn', b'Burduna'], [b'bxo', b'Barikanchi'], [b'bxp', b'Bebil'], [b'bxq', b'Beele'], [b'bxr', b'Buriat, Russia'], [b'bxs', b'Busam'], [b'bxu', b'Buriat, China'], [b'bxv', b'Berakou'], [b'bxw', b'Bankagooma'], [b'bxx', b'Borna (Democratic Republic of Congo)'], [b'bxz', b'Binahari'], [b'bya', b'Batak'], [b'byb', b'Bikya'], [b'byc', b'Ubaghara'], [b'byd', b"Benyadu'"], [b'bye', b'Pouye'], [b'byf', b'Bete'], [b'byg', b'Baygo'], [b'byh', b'Bhujel'], [b'byi', b'Buyu'], [b'byj', b'Bina (Nigeria)'], [b'byk', b'Biao'], [b'byl', b'Bayono'], [b'bym', b'Bidyara'], [b'byn', b'Bilin'], [b'byo', b'Biyo'], [b'byp', b'Bumaji'], [b'byq', b'Basay'], [b'byr', b'Baruya'], [b'bys', b'Burak'], [b'byt', b'Berti'], [b'byv', b'Medumba'], [b'byw', b'Belhariya'], [b'byx', b'Qaqet'], [b'byy', b'Buya'], [b'byz', b'Banaro'], [b'bza', b'Bandi'], [b'bzb', b'Andio'], [b'bzc', b'Malagasy, Southern Betsimisaraka'], [b'bzd', b'Bribri'], [b'bze', b'Bozo, Jenaama'], [b'bzf', b'Boikin'], [b'bzg', b'Babuza'], [b'bzh', b'Buang, Mapos'], [b'bzi', b'Bisu'], [b'bzj', b'Kriol English, Belize'], [b'bzk', b'Creole English, Nicaragua'], [b'bzl', b'Boano (Sulawesi)'], [b'bzm', b'Bolondo'], [b'bzn', b'Boano (Maluku)'], [b'bzo', b'Bozaba'], [b'bzp', b'Kemberano'], [b'bzq', b'Buli (Indonesia)'], [b'bzr', b'Biri'], [b'bzs', b'Brazilian Sign Language'], [b'bzt', b'Brithenig'], [b'bzu', b'Burmeso'], [b'bzv', b'Naami'], [b'bzw', b'Basa (Nigeria)'], [b'bzx', 'Bozo, K\u025bl\u025bngaxo'], [b'bzy', b'Obanliku'], [b'bzz', b'Evant'], [b'caa', 'Chort\xed'], [b'cab', b'Garifuna'], [b'cac', b'Chuj'], [b'cad', b'Caddo'], [b'cae', b'Lehar'], [b'caf', b'Carrier, Southern'], [b'cag', 'Nivacl\xe9'], [b'cah', b'Cahuarano'], [b'caj', 'Chan\xe9'], [b'cak', b'Kaqchikel'], [b'cal', b'Carolinian'], [b'cam', 'Cemuh\xee'], [b'can', b'Chambri'], [b'cao', 'Ch\xe1cobo'], [b'cap', b'Chipaya'], [b'caq', b'Nicobarese, Car'], [b'car', b'Carib, Galibi'], [b'cas', 'Tsiman\xe9'], [b'cat', b'Catalan'], [b'cav', 'Cavine\xf1a'], [b'caw', b'Callawalla'], [b'cax', b'Chiquitano'], [b'cay', b'Cayuga'], [b'caz', b'Canichana'], [b'cbb', 'Cabiyar\xed'], [b'cbc', b'Carapana'], [b'cbd', b'Carijona'], [b'cbe', b'Chipiajes'], [b'cbg', b'Chimila'], [b'cbh', b'Cagua'], [b'cbi', b'Chachi'], [b'cbj', b'Ede Cabe'], [b'cbk', b'Chavacano'], [b'cbl', b'Chin, Bualkhaw'], [b'cbn', b'Nyahkur'], [b'cbo', b'Izora'], [b'cbr', b'Cashibo-Cacataibo'], [b'cbs', b'Cashinahua'], [b'cbt', b'Chayahuita'], [b'cbu', b'Candoshi-Shapra'], [b'cbv', b'Cacua'], [b'cbw', b'Kinabalian'], [b'cby', b'Carabayo'], [b'cca', b'Cauca'], [b'ccc', b'Chamicuro'], [b'ccd', b'Creole, Cafundo'], [b'cce', b'Chopi'], [b'ccg', b'Daka, Samba'], [b'cch', b'Atsam'], [b'ccj', b'Kasanga'], [b'ccl', b'Cutchi-Swahili'], [b'ccm', b'Creole Malay, Malaccan'], [b'cco', b'Chinantec, Comaltepec'], [b'ccp', b'Chakma'], [b'ccr', b'Cacaopera'], [b'cda', b'Choni'], [b'cde', b'Chenchu'], [b'cdf', b'Chiru'], [b'cdg', b'Chamari'], [b'cdh', b'Chambeali'], [b'cdi', b'Chodri'], [b'cdj', b'Churahi'], [b'cdm', b'Chepang'], [b'cdn', b'Chaudangsi'], [b'cdo', b'Chinese, Min Dong'], [b'cdr', b'Cinda-Regi-Tiyal'], [b'cds', b'Chadian Sign Language'], [b'cdy', b'Chadong'], [b'cdz', b'Koda'], [b'cea', b'Chehalis, Lower'], [b'ceb', b'Cebuano'], [b'ceg', b'Chamacoco'], [b'cek', b'Chin, Eastern Khumi'], [b'cen', b'Cen'], [b'ces', b'Czech'], [b'cet', 'Cent\xfa\xfam'], [b'cfa', b'Dijim-Bwilim'], [b'cfd', b'Cara'], [b'cfg', b'Como Karim'], [b'cfm', b'Chin, Falam'], [b'cga', b'Changriwa'], [b'cgc', b'Kagayanen'], [b'cgg', b'Chiga'], [b'cgk', b'Chocangacakha'], [b'cha', b'Chamorro'], [b'chb', b'Chibcha'], [b'chc', b'Catawba'], [b'chd', b'Chontal, Highland Oaxaca'], [b'che', b'Chechen'], [b'chf', b'Chontal, Tabasco'], [b'chg', b'Chagatai'], [b'chh', b'Chinook'], [b'chj', 'Chinantec, Ojitl\xe1n'], [b'chk', b'Chuukese'], [b'chl', b'Cahuilla'], [b'chm', b'Mari (Russia)'], [b'chn', b'Chinook jargon'], [b'cho', b'Choctaw'], [b'chp', b'Chipewyan'], [b'chq', b'Chinantec, Quiotepec'], [b'chr', b'Cherokee'], [b'cht', 'Chol\xf3n'], [b'chu', b'Slavic, Church'], [b'chv', b'Chuvash'], [b'chw', b'Chuwabu'], [b'chx', b'Chantyal'], [b'chy', b'Cheyenne'], [b'chz', 'Chinantec, Ozumac\xedn'], [b'cia', b'Cia-Cia'], [b'cib', b'Gbe, Ci'], [b'cic', b'Chickasaw'], [b'cid', b'Chimariko'], [b'cie', b'Cineni'], [b'cih', b'Chinali'], [b'cik', b'Kinnauri, Chitkuli'], [b'cim', b'Cimbrian'], [b'cin', b'Cinta Larga'], [b'cip', b'Chiapanec'], [b'cir', b'Tiri'], [b'ciw', b'Chippewa'], [b'ciy', b'Chaima'], [b'cja', b'Cham, Western'], [b'cje', b'Chru'], [b'cjh', b'Chehalis, Upper'], [b'cji', b'Chamalal'], [b'cjk', b'Chokwe'], [b'cjm', b'Cham, Eastern'], [b'cjn', b'Chenapian'], [b'cjo', 'Ash\xe9ninka Pajonal'], [b'cjp', 'Cab\xe9car'], [b'cjs', b'Shor'], [b'cjv', b'Chuave'], [b'cjy', b'Chinese, Jinyu'], [b'ckb', b'Kurdish, Central'], [b'ckh', b'Chak'], [b'ckl', b'Cibak'], [b'ckn', b'Chin, Kaang'], [b'cko', b'Anufo'], [b'ckq', b'Kajakse'], [b'ckr', b'Kairak'], [b'cks', b'Tayo'], [b'ckt', b'Chukot'], [b'cku', b'Koasati'], [b'ckv', b'Kavalan'], [b'ckx', b'Caka'], [b'cky', b'Cakfem-Mushere'], [b'ckz', 'Cakchiquel-Quich\xe9 Mixed Language'], [b'cla', b'Ron'], [b'clc', b'Chilcotin'], [b'cld', b'Neo-Aramaic, Chaldean'], [b'cle', b'Chinantec, Lealao'], [b'clh', b'Chilisso'], [b'cli', b'Chakali'], [b'clj', b'Chin, Laitu'], [b'clk', b'Idu-Mishmi'], [b'cll', b'Chala'], [b'clm', b'Clallam'], [b'clo', b'Chontal, Lowland Oaxaca'], [b'clt', b'Chin, Lautu'], [b'clu', b'Caluyanun'], [b'clw', b'Chulym'], [b'cly', b'Chatino, Eastern Highland'], [b'cma', b'Maa'], [b'cme', b'Cerma'], [b'cmg', b'Mongolian, Classical'], [b'cmi', 'Ember\xe1-Cham\xed'], [b'cml', b'Campalagian'], [b'cmm', b'Michigamea'], [b'cmn', b'Chinese, Mandarin'], [b'cmo', b'Mnong, Central'], [b'cmr', b'Chin, Mro-Khimi'], [b'cms', b'Messapic'], [b'cmt', b'Camtho'], [b'cna', b'Changthang'], [b'cnb', b'Chin, Chinbon'], [b'cnc', 'C\xf4\xf4ng'], [b'cng', b'Qiang, Northern'], [b'cnh', b'Chin, Haka'], [b'cni', 'Ash\xe1ninka'], [b'cnk', b'Chin, Khumi'], [b'cnl', b'Chinantec, Lalana'], [b'cno', b'Con'], [b'cns', b'Asmat, Central'], [b'cnt', b'Chinantec, Tepetotutla'], [b'cnu', b'Chenoua'], [b'cnw', b'Chin, Ngawn'], [b'cnx', b'Cornish, Middle'], [b'coa', b'Malay, Cocos Islands'], [b'cob', b'Chicomuceltec'], [b'coc', b'Cocopa'], [b'cod', b'Cocama-Cocamilla'], [b'coe', b'Koreguaje'], [b'cof', b'Colorado'], [b'cog', b'Chong'], [b'coh', b'Chonyi-Dzihana-Kauma'], [b'coj', b'Cochimi'], [b'cok', b'Cora, Santa Teresa'], [b'col', b'Columbia-Wenatchi'], [b'com', b'Comanche'], [b'con', 'Cof\xe1n'], [b'coo', b'Comox'], [b'cop', b'Coptic'], [b'coq', b'Coquille'], [b'cor', b'Cornish'], [b'cos', b'Corsican'], [b'cot', b'Caquinte'], [b'cou', b'Wamey'], [b'cov', b'Cao Miao'], [b'cow', b'Cowlitz'], [b'cox', b'Nanti'], [b'coy', b'Coyaima'], [b'coz', b'Chochotec'], [b'cpa', b'Chinantec, Palantla'], [b'cpb', 'Ash\xe9ninka, Ucayali-Yur\xfaa'], [b'cpc', 'Ajy\xedninka Apurucayali'], [b'cpg', b'Greek, Cappadocian'], [b'cpi', b'Pidgin English, Chinese'], [b'cpn', b'Cherepon'], [b'cpo', b'Kpeego'], [b'cps', b'Capiznon'], [b'cpu', 'Ash\xe9ninka, Pichis'], [b'cpx', b'Chinese, Pu-Xian'], [b'cpy', 'Ash\xe9ninka, South Ucayali'], [b'cqd', b'Miao, Chuanqiandian Cluster'], [b'cqu', b'Quechua, Chilean'], [b'cra', b'Chara'], [b'crb', b'Carib, Island'], [b'crc', b'Lonwolwol'], [b'crd', b"Coeur d'Alene"], [b'cre', b'Cree'], [b'crf', b'Caramanta'], [b'crg', b'Michif'], [b'crh', b'Tatar, Crimean'], [b'cri', 'S\xe3otomense'], [b'crj', b'Cree, Southern East'], [b'crk', b'Cree, Plains'], [b'crl', b'Cree, Northern East'], [b'crm', b'Cree, Moose'], [b'crn', b'Cora, El Nayar'], [b'cro', b'Crow'], [b'crq', b"Chorote, Iyo'wujwa"], [b'crr', b'Algonquian, Carolina'], [b'crs', b'Creole French, Seselwa'], [b'crt', b"Chorote, Iyojwa'ja"], [b'crv', b'Chaura'], [b'crw', b'Chrau'], [b'crx', b'Carrier'], [b'cry', b'Cori'], [b'crz', 'Cruze\xf1o'], [b'csa', b'Chinantec, Chiltepec'], [b'csb', b'Kashubian'], [b'csc', b'Catalan Sign Language'], [b'csd', b'Chiangmai Sign Language'], [b'cse', b'Czech Sign Language'], [b'csf', b'Cuba Sign Language'], [b'csg', b'Chilean Sign Language'], [b'csh', b'Chin, Asho'], [b'csi', b'Miwok, Coast'], [b'csj', b'Chin, Songlai'], [b'csk', b'Jola-Kasa'], [b'csl', b'Chinese Sign Language'], [b'csm', b'Miwok, Central Sierra'], [b'csn', b'Colombian Sign Language'], [b'cso', b'Chinantec, Sochiapam'], [b'csq', b'Croatia Sign Language'], [b'csr', b'Costa Rican Sign Language'], [b'css', b'Ohlone, Southern'], [b'cst', b'Ohlone, Northern'], [b'csv', b'Chin, Sumtu'], [b'csw', b'Cree, Swampy'], [b'csy', b'Chin, Siyin'], [b'csz', b'Coos'], [b'cta', b'Chatino, Tataltepec'], [b'ctc', b'Chetco'], [b'ctd', b'Chin, Tedim'], [b'cte', b'Chinantec, Tepinapa'], [b'ctg', b'Chittagonian'], [b'cth', b'Chin, Thaiphum'], [b'ctl', b'Chinantec, Tlacoatzintepec'], [b'ctm', b'Chitimacha'], [b'ctn', b'Chhintange'], [b'cto', 'Ember\xe1-Cat\xedo'], [b'ctp', b'Chatino, Western Highland'], [b'cts', b'Bikol, Northern Catanduanes'], [b'ctt', b'Chetti, Wayanad'], [b'ctu', b'Chol'], [b'ctz', b'Chatino, Zacatepec'], [b'cua', b'Cua'], [b'cub', b'Cubeo'], [b'cuc', b'Chinantec, Usila'], [b'cug', b'Cung'], [b'cuh', b'Chuka'], [b'cui', b'Cuiba'], [b'cuj', b'Mashco Piro'], [b'cuk', b'Kuna, San Blas'], [b'cul', b'Culina'], [b'cum', b'Cumeral'], [b'cuo', b'Cumanagoto'], [b'cup', 'Cupe\xf1o'], [b'cuq', b'Cun'], [b'cur', b'Chhulung'], [b'cut', b'Cuicatec, Teutila'], [b'cuu', b'Tai Ya'], [b'cuv', b'Cuvok'], [b'cuw', b'Chukwa'], [b'cux', b'Cuicatec, Tepeuxila'], [b'cvg', b'Chug'], [b'cvn', b'Chinantec, Valle Nacional'], [b'cwa', b'Kabwa'], [b'cwb', b'Maindo'], [b'cwd', b'Cree, Woods'], [b'cwe', b'Kwere'], [b'cwg', b'Chewong'], [b'cwt', b'Kuwaataay'], [b'cya', b'Chatino, Nopala'], [b'cyb', b'Cayubaba'], [b'cym', b'Welsh'], [b'cyo', b'Cuyonon'], [b'czh', b'Chinese, Huizhou'], [b'czk', b'Knaanic'], [b'czn', b'Chatino, Zenzontepec'], [b'czo', b'Chinese, Min Zhong'], [b'czt', b'Chin, Zotung'], [b'daa', 'Dangal\xe9at'], [b'dac', b'Dambi'], [b'dad', b'Marik'], [b'dae', b'Duupa'], [b'dag', b'Dagbani'], [b'dah', b'Gwahatike'], [b'dai', b'Day'], [b'daj', b'Daju, Dar Fur'], [b'dak', b'Dakota'], [b'dal', b'Dahalo'], [b'dam', b'Damakawa'], [b'dan', b'Danish'], [b'dao', b'Chin, Daai'], [b'daq', b'Maria, Dandami'], [b'dar', b'Dargwa'], [b'das', b'Daho-Doo'], [b'dau', b'Daju, Dar Sila'], [b'dav', b'Taita'], [b'daw', b'Davawenyo'], [b'dax', b'Dayi'], [b'daz', b'Dao'], [b'dba', b'Bangime'], [b'dbb', b'Deno'], [b'dbd', b'Dadiya'], [b'dbe', b'Dabe'], [b'dbf', b'Edopi'], [b'dbg', b'Dogon, Dogul Dom'], [b'dbi', b'Doka'], [b'dbj', b"Ida'an"], [b'dbl', b'Dyirbal'], [b'dbm', b'Duguri'], [b'dbn', b'Duriankere'], [b'dbo', b'Dulbu'], [b'dbp', b'Duwai'], [b'dbq', b'Daba'], [b'dbr', b'Dabarre'], [b'dbt', b'Dogon, Ben Tey'], [b'dbu', b'Dogon, Bondum Dom'], [b'dbv', b'Dungu'], [b'dbw', b'Dogon, Bankan Tey'], [b'dby', b'Dibiyaso'], [b'dcc', b'Deccan'], [b'dcr', b'Negerhollands'], [b'dda', b'Dadi Dadi'], [b'ddd', b'Dongotono'], [b'dde', b'Doondo'], [b'ddg', b'Fataluku'], [b'ddi', b'Goodenough, West'], [b'ddj', b'Jaru'], [b'ddn', b'Dendi (Benin)'], [b'ddo', b'Dido'], [b'ddr', b'Dhudhuroa'], [b'dds', b'Dogon, Donno So'], [b'ddw', b'Dawera-Daweloor'], [b'dec', b'Dagik'], [b'ded', b'Dedua'], [b'dee', b'Dewoin'], [b'def', b'Dezfuli'], [b'deg', b'Degema'], [b'deh', b'Dehwari'], [b'dei', b'Demisa'], [b'dek', b'Dek'], [b'del', b'Delaware'], [b'dem', b'Dem'], [b'den', b'Slave (Athapascan)'], [b'dep', b'Delaware, Pidgin'], [b'deq', b'Dendi (Central African Republic)'], [b'der', b'Deori'], [b'des', b'Desano'], [b'deu', b'German'], [b'dev', b'Domung'], [b'dez', b'Dengese'], [b'dga', b'Dagaare, Southern'], [b'dgb', b'Dogon, Bunoge'], [b'dgc', b'Agta, Casiguran Dumagat'], [b'dgd', b'Dagaari Dioula'], [b'dge', b'Degenan'], [b'dgg', b'Doga'], [b'dgh', b'Dghwede'], [b'dgi', b'Dagara, Northern'], [b'dgk', b'Dagba'], [b'dgl', b'Andaandi'], [b'dgn', b'Dagoman'], [b'dgo', b'Dogri (individual language)'], [b'dgr', b'Dogrib'], [b'dgs', b'Dogoso'], [b'dgt', b"Ndra'ngith"], [b'dgu', b'Degaru'], [b'dgw', b'Daungwurrung'], [b'dgx', b'Doghoro'], [b'dgz', b'Daga'], [b'dhd', b'Dhundari'], [b'dhg', b'Djangu'], [b'dhi', b'Dhimal'], [b'dhl', b'Dhalandji'], [b'dhm', b'Zemba'], [b'dhn', b'Dhanki'], [b'dho', b'Dhodia'], [b'dhr', b'Dhargari'], [b'dhs', b'Dhaiso'], [b'dhu', b'Dhurga'], [b'dhv', b'Dehu'], [b'dhw', b'Dhanwar (Nepal)'], [b'dhx', b'Dhungaloo'], [b'dia', b'Dia'], [b'dib', b'Dinka, South Central'], [b'dic', b'Dida, Lakota'], [b'did', b'Didinga'], [b'dif', b'Dieri'], [b'dig', b'Digo'], [b'dih', b'Kumiai'], [b'dii', b'Dimbong'], [b'dij', b'Dai'], [b'dik', b'Dinka, Southwestern'], [b'dil', b'Dilling'], [b'dim', b'Dime'], [b'din', b'Dinka'], [b'dio', b'Dibo'], [b'dip', b'Dinka, Northeastern'], [b'diq', b'Dimli (individual language)'], [b'dir', b'Dirim'], [b'dis', b'Dimasa'], [b'dit', b'Dirari'], [b'diu', b'Diriku'], [b'div', b'Dhivehi'], [b'diw', b'Dinka, Northwestern'], [b'dix', b'Dixon Reef'], [b'diy', b'Diuwe'], [b'diz', b'Ding'], [b'dja', b'Djadjawurrung'], [b'djb', b'Djinba'], [b'djc', b'Daju, Dar Daju'], [b'djd', b'Djamindjung'], [b'dje', b'Zarma'], [b'djf', b'Djangun'], [b'dji', b'Djinang'], [b'djj', b'Djeebbana'], [b'djk', b'Eastern Maroon Creole'], [b'djm', b'Dogon, Jamsay'], [b'djn', b'Djauan'], [b'djo', b'Jangkang'], [b'djr', b'Djambarrpuyngu'], [b'dju', b'Kapriman'], [b'djw', b'Djawi'], [b'dka', b'Dakpakha'], [b'dkk', b'Dakka'], [b'dkr', b'Kuijau'], [b'dks', b'Dinka, Southeastern'], [b'dkx', b'Mazagway'], [b'dlg', b'Dolgan'], [b'dlk', b'Dahalik'], [b'dlm', b'Dalmatian'], [b'dln', b'Darlong'], [b'dma', b'Duma'], [b'dmb', b'Dogon, Mombo'], [b'dmc', b'Gavak'], [b'dmd', b'Madhi Madhi'], [b'dme', b'Dugwor'], [b'dmg', b'Kinabatangan, Upper'], [b'dmk', b'Domaaki'], [b'dml', b'Dameli'], [b'dmm', b'Dama'], [b'dmo', b'Kemedzung'], [b'dmr', b'Damar, East'], [b'dms', b'Dampelas'], [b'dmu', b'Dubu'], [b'dmv', b'Dumpas'], [b'dmw', b'Mudburra'], [b'dmx', b'Dema'], [b'dmy', b'Demta'], [b'dna', b'Dani, Upper Grand Valley'], [b'dnd', b'Daonda'], [b'dne', b'Ndendeule'], [b'dng', b'Dungan'], [b'dni', b'Dani, Lower Grand Valley'], [b'dnj', b'Dan'], [b'dnk', b'Dengka'], [b'dnn', 'Dz\xf9\xf9ngoo'], [b'dnr', b'Danaru'], [b'dnt', b'Dani, Mid Grand Valley'], [b'dnu', b'Danau'], [b'dnv', b'Danu'], [b'dnw', b'Dani, Western'], [b'dny', 'Den\xed'], [b'doa', b'Dom'], [b'dob', b'Dobu'], [b'doc', b'Dong, Northern'], [b'doe', b'Doe'], [b'dof', b'Domu'], [b'doh', b'Dong'], [b'doi', b'Dogri (macrolanguage)'], [b'dok', b'Dondo'], [b'dol', b'Doso'], [b'don', b'Toura (Papua New Guinea)'], [b'doo', b'Dongo'], [b'dop', b'Lukpa'], [b'doq', b'Dominican Sign Language'], [b'dor', b"Dori'o"], [b'dos', 'Dogos\xe9'], [b'dot', b'Dass'], [b'dov', b'Dombe'], [b'dow', b'Doyayo'], [b'dox', b'Bussa'], [b'doy', b'Dompo'], [b'doz', b'Dorze'], [b'dpp', b'Papar'], [b'drb', b'Dair'], [b'drc', b'Minderico'], [b'drd', b'Darmiya'], [b'dre', b'Dolpo'], [b'drg', b'Rungus'], [b'dri', b"C'lela"], [b'drl', b'Paakantyi'], [b'drn', b'Damar, West'], [b'dro', b'Melanau, Daro-Matu'], [b'drq', b'Dura'], [b'drr', b'Dororo'], [b'drs', b'Gedeo'], [b'drt', b'Drents'], [b'dru', b'Rukai'], [b'dry', b'Darai'], [b'dsb', b'Sorbian, Lower'], [b'dse', b'Dutch Sign Language'], [b'dsh', b'Daasanach'], [b'dsi', b'Disa'], [b'dsl', b'Danish Sign Language'], [b'dsn', b'Dusner'], [b'dso', b'Desiya'], [b'dsq', b'Tadaksahak'], [b'dta', b'Daur'], [b'dtb', b'Kadazan, Labuk-Kinabatangan'], [b'dtd', b'Ditidaht'], [b'dth', b'Adithinngithigh'], [b'dti', b'Dogon, Ana Tinga'], [b'dtk', b'Dogon, Tene Kan'], [b'dtm', b'Dogon, Tomo Kan'], [b'dto', b'Dogon, Tommo So'], [b'dtp', b'Dusun, Central'], [b'dtr', b'Lotud'], [b'dts', b'Dogon, Toro So'], [b'dtt', b'Dogon, Toro Tegu'], [b'dtu', b'Dogon, Tebul Ure'], [b'dty', b'Dotyali'], [b'dua', b'Duala'], [b'dub', b'Dubli'], [b'duc', b'Duna'], [b'dud', b'Hun-Saare'], [b'due', b'Agta, Umiray Dumaget'], [b'duf', b'Dumbea'], [b'dug', b'Duruma'], [b'duh', b'Dungra Bhil'], [b'dui', b'Dumun'], [b'duj', b'Dhuwal'], [b'duk', b'Uyajitaya'], [b'dul', b'Agta, Alabat Island'], [b'dum', b'Dutch, Middle (ca. 1050-1350)'], [b'dun', b'Dusun Deyah'], [b'duo', b'Agta, Dupaninan'], [b'dup', b'Duano'], [b'duq', b'Dusun Malang'], [b'dur', b'Dii'], [b'dus', b'Dumi'], [b'duu', b'Drung'], [b'duv', b'Duvle'], [b'duw', b'Dusun Witu'], [b'dux', b'Duungooma'], [b'duy', b'Agta, Dicamay'], [b'duz', b'Duli'], [b'dva', b'Duau'], [b'dwa', b'Diri'], [b'dwr', b'Dawro'], [b'dws', b'Dutton World Speedwords'], [b'dww', b'Dawawa'], [b'dya', b'Dyan'], [b'dyb', b'Dyaberdyaber'], [b'dyd', b'Dyugun'], [b'dyg', b'Agta, Villa Viciosa'], [b'dyi', b'Senoufo, Djimini'], [b'dym', b'Dogon, Yanda Dom'], [b'dyn', b'Dyangadi'], [b'dyo', b'Jola-Fonyi'], [b'dyu', b'Dyula'], [b'dyy', b'Dyaabugay'], [b'dza', b'Tunzu'], [b'dzd', b'Daza'], [b'dze', b'Djiwarli'], [b'dzg', b'Dazaga'], [b'dzl', b'Dzalakha'], [b'dzn', b'Dzando'], [b'dzo', b'Dzongkha'], [b'eaa', b'Karenggapa'], [b'ebg', b'Ebughu'], [b'ebk', b'Bontok, Eastern'], [b'ebo', b'Teke-Ebo'], [b'ebr', 'Ebri\xe9'], [b'ebu', b'Embu'], [b'ecr', b'Eteocretan'], [b'ecs', b'Ecuadorian Sign Language'], [b'ecy', b'Eteocypriot'], [b'eee', b'E'], [b'efa', b'Efai'], [b'efe', b'Efe'], [b'efi', b'Efik'], [b'ega', b'Ega'], [b'egl', b'Emilian'], [b'ego', b'Eggon'], [b'egy', b'Egyptian (Ancient)'], [b'ehu', b'Ehueun'], [b'eip', b'Eipomek'], [b'eit', b'Eitiep'], [b'eiv', b'Askopan'], [b'eja', b'Ejamat'], [b'eka', b'Ekajuk'], [b'ekc', b'Karnic, Eastern'], [b'eke', b'Ekit'], [b'ekg', b'Ekari'], [b'eki', b'Eki'], [b'ekk', b'Estonian, Standard'], [b'ekl', b'Kol (Bangladesh)'], [b'ekm', b'Elip'], [b'eko', b'Koti'], [b'ekp', b'Ekpeye'], [b'ekr', b'Yace'], [b'eky', b'Kayah, Eastern'], [b'ele', b'Elepi'], [b'elh', b'El Hugeirat'], [b'eli', b'Nding'], [b'elk', b'Elkei'], [b'ell', b'Greek, Modern (1453-)'], [b'elm', b'Eleme'], [b'elo', b'El Molo'], [b'elu', b'Elu'], [b'elx', b'Elamite'], [b'ema', b'Emai-Iuleha-Ora'], [b'emb', b'Embaloh'], [b'eme', b'Emerillon'], [b'emg', b'Meohang, Eastern'], [b'emi', b'Mussau-Emira'], [b'emk', b'Maninkakan, Eastern'], [b'emm', b'Mamulique'], [b'emn', b'Eman'], [b'emo', b'Emok'], [b'emp', 'Ember\xe1, Northern'], [b'ems', b'Yupik, Pacific Gulf'], [b'emu', b'Muria, Eastern'], [b'emw', b'Emplawas'], [b'emx', b'Erromintxela'], [b'emy', b'Mayan, Epigraphic'], [b'ena', b'Apali'], [b'enb', b'Markweeta'], [b'enc', b'En'], [b'end', b'Ende'], [b'enf', b'Enets, Forest'], [b'eng', b'English'], [b'enh', b'Enets, Tundra'], [b'enm', b'English, Middle (1100-1500)'], [b'enn', b'Engenni'], [b'eno', b'Enggano'], [b'enq', b'Enga'], [b'enr', b'Emumu'], [b'enu', b'Enu'], [b'env', b'Enwan (Edu State)'], [b'enw', b'Enwan (Akwa Ibom State)'], [b'eot', "Beti (C\xf4te d'Ivoire)"], [b'epi', b'Epie'], [b'epo', b'Esperanto'], [b'era', b'Eravallan'], [b'erg', b'Sie'], [b'erh', b'Eruwa'], [b'eri', b'Ogea'], [b'erk', b'Efate, South'], [b'ero', b'Horpa'], [b'err', b'Erre'], [b'ers', b'Ersu'], [b'ert', b'Eritai'], [b'erw', b'Erokwanas'], [b'ese', b'Ese Ejja'], [b'esh', b'Eshtehardi'], [b'esi', b'Inupiatun, North Alaskan'], [b'esk', b'Inupiatun, Northwest Alaska'], [b'esl', b'Egypt Sign Language'], [b'esm', b'Esuma'], [b'esn', b'Salvadoran Sign Language'], [b'eso', b'Estonian Sign Language'], [b'esq', b'Esselen'], [b'ess', b'Yupik, Central Siberian'], [b'est', b'Estonian'], [b'esu', b'Yupik, Central'], [b'etb', b'Etebi'], [b'etc', b'Etchemin'], [b'eth', b'Ethiopian Sign Language'], [b'etn', b'Eton (Vanuatu)'], [b'eto', b'Eton (Cameroon)'], [b'etr', b'Edolo'], [b'ets', b'Yekhee'], [b'ett', b'Etruscan'], [b'etu', b'Ejagham'], [b'etx', b'Eten'], [b'etz', b'Semimi'], [b'eus', b'Basque'], [b'eve', b'Even'], [b'evh', b'Uvbie'], [b'evn', b'Evenki'], [b'ewe', b'Ewe'], [b'ewo', b'Ewondo'], [b'ext', b'Extremaduran'], [b'eya', b'Eyak'], [b'eyo', b'Keiyo'], [b'eza', b'Ezaa'], [b'eze', b'Uzekwe'], [b'faa', b'Fasu'], [b'fab', b"Fa d'Ambu"], [b'fad', b'Wagi'], [b'faf', b'Fagani'], [b'fag', b'Finongan'], [b'fah', b'Fali, Baissa'], [b'fai', b'Faiwol'], [b'faj', b'Faita'], [b'fak', b'Fang (Cameroon)'], [b'fal', b'Fali, South'], [b'fam', b'Fam'], [b'fan', b'Fang (Equatorial Guinea)'], [b'fao', b'Faroese'], [b'fap', b'Palor'], [b'far', b'Fataleka'], [b'fas', b'Persian'], [b'fat', b'Fanti'], [b'fau', b'Fayu'], [b'fax', b'Fala'], [b'fay', b'Fars, Southwestern'], [b'faz', b'Fars, Northwestern'], [b'fbl', b'Bikol, West Albay'], [b'fcs', b'Quebec Sign Language'], [b'fer', b'Feroge'], [b'ffi', b'Foia Foia'], [b'ffm', b'Fulfulde, Maasina'], [b'fgr', b'Fongoro'], [b'fia', b'Nobiin'], [b'fie', b'Fyer'], [b'fij', b'Fijian'], [b'fil', b'Filipino'], [b'fin', b'Finnish'], [b'fip', b'Fipa'], [b'fir', b'Firan'], [b'fit', b'Finnish, Tornedalen'], [b'fiw', b'Fiwaga'], [b'fkk', 'Kirya-Konz\u0259l'], [b'fkv', b'Finnish, Kven'], [b'fla', b"Kalispel-Pend d'Oreille"], [b'flh', b'Foau'], [b'fli', b'Fali'], [b'fll', b'Fali, North'], [b'fln', b'Flinders Island'], [b'flr', b'Fuliiru'], [b'fly', b'Tsotsitaal'], [b'fmp', b"Fe'fe'"], [b'fmu', b'Muria, Far Western'], [b'fng', b'Fanagalo'], [b'fni', b'Fania'], [b'fod', b'Foodo'], [b'foi', b'Foi'], [b'fom', b'Foma'], [b'fon', b'Fon'], [b'for', b'Fore'], [b'fos', b'Siraya'], [b'fpe', b'Creole English, Fernando Po'], [b'fqs', b'Fas'], [b'fra', b'French'], [b'frc', b'French, Cajun'], [b'frd', b'Fordata'], [b'frk', b'Frankish'], [b'frm', b'French, Middle (ca. 1400-1600)'], [b'fro', b'French, Old (842-ca. 1400)'], [b'frp', b'Arpitan'], [b'frq', b'Forak'], [b'frr', b'Frisian, Northern'], [b'frs', b'Frisian, Eastern'], [b'frt', b'Fortsenal'], [b'fry', b'Frisian, Western'], [b'fse', b'Finnish Sign Language'], [b'fsl', b'French Sign Language'], [b'fss', b'Finland-Swedish Sign Language'], [b'fub', b'Fulfulde, Adamawa'], [b'fuc', b'Pulaar'], [b'fud', b'Futuna, East'], [b'fue', b'Fulfulde, Borgu'], [b'fuf', b'Pular'], [b'fuh', b'Fulfulde, Western Niger'], [b'fui', b'Fulfulde, Bagirmi'], [b'fuj', b'Ko'], [b'ful', b'Fulah'], [b'fum', b'Fum'], [b'fun', 'Fulni\xf4'], [b'fuq', b'Fulfulde, Central-Eastern Niger'], [b'fur', b'Friulian'], [b'fut', b'Futuna-Aniwa'], [b'fuu', b'Furu'], [b'fuv', b'Fulfulde, Nigerian'], [b'fuy', b'Fuyug'], [b'fvr', b'Fur'], [b'fwa', 'Fw\xe2i'], [b'fwe', b'Fwe'], [b'gaa', b'Ga'], [b'gab', b'Gabri'], [b'gac', b'Great Andamanese, Mixed'], [b'gad', b'Gaddang'], [b'gae', b'Guarequena'], [b'gaf', b'Gende'], [b'gag', b'Gagauz'], [b'gah', b'Alekano'], [b'gai', b'Borei'], [b'gaj', b'Gadsup'], [b'gak', b'Gamkonora'], [b'gal', b'Galolen'], [b'gam', b'Kandawo'], [b'gan', b'Chinese, Gan'], [b'gao', b'Gants'], [b'gap', b'Gal'], [b'gaq', b"Gata'"], [b'gar', b'Galeya'], [b'gas', b'Garasia, Adiwasi'], [b'gat', b'Kenati'], [b'gau', b'Gadaba, Mudhili'], [b'gaw', b'Nobonob'], [b'gax', b'Oromo, Borana-Arsi-Guji'], [b'gay', b'Gayo'], [b'gaz', b'Oromo, West Central'], [b'gba', b'Gbaya (Central African Republic)'], [b'gbb', b'Kaytetye'], [b'gbd', b'Karadjeri'], [b'gbe', b'Niksek'], [b'gbf', b'Gaikundi'], [b'gbg', b'Gbanziri'], [b'gbh', b'Gbe, Defi'], [b'gbi', b'Galela'], [b'gbj', b'Gadaba, Bodo'], [b'gbk', b'Gaddi'], [b'gbl', b'Gamit'], [b'gbm', b'Garhwali'], [b'gbn', b"Mo'da"], [b'gbo', b'Grebo, Northern'], [b'gbp', b'Gbaya-Bossangoa'], [b'gbq', b'Gbaya-Bozoum'], [b'gbr', b'Gbagyi'], [b'gbs', b'Gbe, Gbesi'], [b'gbu', b'Gagadu'], [b'gbv', b'Gbanu'], [b'gbw', b'Gabi-Gabi'], [b'gbx', b'Gbe, Eastern Xwla'], [b'gby', b'Gbari'], [b'gbz', b'Dari, Zoroastrian'], [b'gcc', b'Mali'], [b'gcd', b'Ganggalida'], [b'gce', b'Galice'], [b'gcf', b'Creole French, Guadeloupean'], [b'gcl', b'Creole English, Grenadian'], [b'gcn', b'Gaina'], [b'gcr', b'Creole French, Guianese'], [b'gct', b'German, Colonia Tovar'], [b'gda', b'Lohar, Gade'], [b'gdb', b'Gadaba, Pottangi Ollar'], [b'gdc', b'Gugu Badhun'], [b'gdd', b'Gedaged'], [b'gde', b'Gude'], [b'gdf', b'Guduf-Gava'], [b'gdg', b"Ga'dang"], [b'gdh', b'Gadjerawang'], [b'gdi', b'Gundi'], [b'gdj', b'Gurdjar'], [b'gdk', b'Gadang'], [b'gdl', b'Dirasha'], [b'gdm', b'Laal'], [b'gdn', b'Umanakaina'], [b'gdo', b'Ghodoberi'], [b'gdq', b'Mehri'], [b'gdr', b'Wipi'], [b'gds', b'Ghandruk Sign Language'], [b'gdt', b'Kungardutyi'], [b'gdu', b'Gudu'], [b'gdx', b'Godwari'], [b'gea', b'Geruma'], [b'geb', b'Kire'], [b'gec', b'Grebo, Gboloo'], [b'ged', b'Gade'], [b'geg', b'Gengle'], [b'geh', b'German, Hutterite'], [b'gei', b'Gebe'], [b'gej', b'Gen'], [b'gek', b'Yiwom'], [b'gel', b"ut-Ma'in"], [b'geq', b'Geme'], [b'ges', b'Geser-Gorom'], [b'gew', b'Gera'], [b'gex', b'Garre'], [b'gey', b'Enya'], [b'gez', b'Geez'], [b'gfk', b'Patpatar'], [b'gft', b'Gafat'], [b'gfx', b'!Xung, Mangetti Dune'], [b'gga', b'Gao'], [b'ggb', b'Gbii'], [b'ggd', b'Gugadj'], [b'gge', b'Guragone'], [b'ggg', b'Gurgula'], [b'ggk', b'Kungarakany'], [b'ggl', b'Ganglau'], [b'ggm', b'Gugu Mini'], [b'ggn', b'Gurung, Eastern'], [b'ggo', b'Gondi, Southern'], [b'ggt', b'Gitua'], [b'ggu', b'Gagu'], [b'ggw', b'Gogodala'], [b'gha', 'Ghadam\xe8s'], [b'ghc', b'Gaelic, Hiberno-Scottish'], [b'ghe', b'Ghale, Southern'], [b'ghh', b'Ghale, Northern'], [b'ghk', b'Karen, Geko'], [b'ghl', b'Ghulfan'], [b'ghn', b'Ghanongga'], [b'gho', b'Ghomara'], [b'ghr', b'Ghera'], [b'ghs', b'Guhu-Samane'], [b'ght', b'Kuke'], [b'gia', b'Kitja'], [b'gib', b'Gibanawa'], [b'gic', b'Gail'], [b'gid', b'Gidar'], [b'gig', b'Goaria'], [b'gih', b'Githabul'], [b'gil', b'Gilbertese'], [b'gim', b'Gimi (Eastern Highlands)'], [b'gin', b'Hinukh'], [b'gip', b'Gimi (West New Britain)'], [b'giq', b'Gelao, Green'], [b'gir', b'Gelao, Red'], [b'gis', b'Giziga, North'], [b'git', b'Gitxsan'], [b'giu', b'Mulao'], [b'giw', b'Gelao, White'], [b'gix', b'Gilima'], [b'giy', b'Giyug'], [b'giz', b'Giziga, South'], [b'gji', b'Geji'], [b'gjk', b'Koli, Kachi'], [b'gjm', b'Gunditjmara'], [b'gjn', b'Gonja'], [b'gju', b'Gujari'], [b'gka', b'Guya'], [b'gke', b'Ndai'], [b'gkn', b'Gokana'], [b'gko', b'Kok-Nar'], [b'gkp', b'Kpelle, Guinea'], [b'gla', b'Gaelic, Scottish'], [b'glc', b'Bon Gula'], [b'gld', b'Nanai'], [b'gle', b'Irish'], [b'glg', b'Galician'], [b'glh', b'Pashayi, Northwest'], [b'gli', b'Guliguli'], [b'glj', b'Gula Iro'], [b'glk', b'Gilaki'], [b'gll', b'Garlali'], [b'glo', b'Galambu'], [b'glr', b'Glaro-Twabo'], [b'glu', b'Gula (Chad)'], [b'glv', b'Manx'], [b'glw', b'Glavda'], [b'gly', b'Gule'], [b'gma', b'Gambera'], [b'gmb', b"Gula'alaa"], [b'gmd', 'M\xe1ghd\xec'], [b'gmh', b'German, Middle High (ca. 1050-1500)'], [b'gml', b'German, Middle Low'], [b'gmm', b'Gbaya-Mbodomo'], [b'gmn', b'Gimnime'], [b'gmu', b'Gumalu'], [b'gmv', b'Gamo'], [b'gmx', b'Magoma'], [b'gmy', b'Greek, Mycenaean'], [b'gmz', b'Mgbolizhia'], [b'gna', b'Kaansa'], [b'gnb', b'Gangte'], [b'gnc', b'Guanche'], [b'gnd', b'Zulgo-Gemzek'], [b'gne', b'Ganang'], [b'gng', b'Ngangam'], [b'gnh', b'Lere'], [b'gni', b'Gooniyandi'], [b'gnk', b'//Gana'], [b'gnl', b'Gangulu'], [b'gnm', b'Ginuman'], [b'gnn', b'Gumatj'], [b'gno', b'Gondi, Northern'], [b'gnq', b'Gana'], [b'gnr', b'Gureng Gureng'], [b'gnt', b'Guntai'], [b'gnu', b'Gnau'], [b'gnw', 'Guaran\xed, Western Bolivian'], [b'gnz', b'Ganzi'], [b'goa', b'Guro'], [b'gob', b'Playero'], [b'goc', b'Gorakor'], [b'god', 'Godi\xe9'], [b'goe', b'Gongduk'], [b'gof', b'Gofa'], [b'gog', b'Gogo'], [b'goh', b'German, Old High (ca. 750-1050)'], [b'goi', b'Gobasi'], [b'goj', b'Gowlan'], [b'gok', b'Gowli'], [b'gol', b'Gola'], [b'gom', b'Konkani, Goan'], [b'gon', b'Gondi'], [b'goo', b'Gone Dau'], [b'gop', b'Yeretuar'], [b'goq', b'Gorap'], [b'gor', b'Gorontalo'], [b'gos', b'Gronings'], [b'got', b'Gothic'], [b'gou', b'Gavar'], [b'gow', b'Gorowa'], [b'gox', b'Gobu'], [b'goy', b'Goundo'], [b'goz', b'Gozarkhani'], [b'gpa', b'Gupa-Abawa'], [b'gpe', b'Pidgin English, Ghanaian'], [b'gpn', b'Taiap'], [b'gqa', b"Ga'anda"], [b'gqi', b'Guiqiong'], [b'gqn', b'Guana (Brazil)'], [b'gqr', b'Gor'], [b'gqu', b'Qau'], [b'gra', b'Garasia, Rajput'], [b'grb', b'Grebo'], [b'grc', b'Greek, Ancient (to 1453)'], [b'grd', b'Guruntum-Mbaaru'], [b'grg', b'Madi'], [b'grh', b'Gbiri-Niragu'], [b'gri', b'Ghari'], [b'grj', b'Grebo, Southern'], [b'grm', b'Kota Marudu Talantang'], [b'grn', b'Guarani'], [b'gro', b'Groma'], [b'grq', b'Gorovu'], [b'grr', b'Taznatit'], [b'grs', b'Gresi'], [b'grt', b'Garo'], [b'gru', b'Kistane'], [b'grv', b'Grebo, Central'], [b'grw', b'Gweda'], [b'grx', b'Guriaso'], [b'gry', b'Grebo, Barclayville'], [b'grz', b'Guramalum'], [b'gse', b'Ghanaian Sign Language'], [b'gsg', b'German Sign Language'], [b'gsl', b'Gusilay'], [b'gsm', b'Guatemalan Sign Language'], [b'gsn', b'Gusan'], [b'gso', b'Gbaya, Southwest'], [b'gsp', b'Wasembo'], [b'gss', b'Greek Sign Language'], [b'gsw', b'German, Swiss'], [b'gta', 'Guat\xf3'], [b'gti', b'Gbati-ri'], [b'gtu', b'Aghu-Tharnggala'], [b'gua', b'Shiki'], [b'gub', 'Guajaj\xe1ra'], [b'guc', b'Wayuu'], [b'gud', 'Dida, Yocobou\xe9'], [b'gue', b'Gurinji'], [b'guf', b'Gupapuyngu'], [b'gug', 'Guaran\xed, Paraguayan'], [b'guh', b'Guahibo'], [b'gui', 'Guaran\xed, Eastern Bolivian'], [b'guj', b'Gujarati'], [b'guk', b'Gumuz'], [b'gul', b'Creole English, Sea Island'], [b'gum', b'Guambiano'], [b'gun', 'Guaran\xed, Mby\xe1'], [b'guo', b'Guayabero'], [b'gup', b'Gunwinggu'], [b'guq', 'Ach\xe9'], [b'gur', b'Farefare'], [b'gus', b'Guinean Sign Language'], [b'gut', 'Mal\xe9ku Ja\xedka'], [b'guu', 'Yanomam\xf6'], [b'guv', b'Gey'], [b'guw', b'Gun'], [b'gux', 'Gourmanch\xe9ma'], [b'guz', b'Gusii'], [b'gva', b'Guana (Paraguay)'], [b'gvc', b'Guanano'], [b'gve', b'Duwet'], [b'gvf', b'Golin'], [b'gvj', 'Guaj\xe1'], [b'gvl', b'Gulay'], [b'gvm', b'Gurmana'], [b'gvn', b'Kuku-Yalanji'], [b'gvo', 'Gavi\xe3o Do Jiparan\xe1'], [b'gvp', 'Gavi\xe3o, Par\xe1'], [b'gvr', b'Gurung, Western'], [b'gvs', b'Gumawana'], [b'gvy', b'Guyani'], [b'gwa', b'Mbato'], [b'gwb', b'Gwa'], [b'gwc', b'Kalami'], [b'gwd', b'Gawwada'], [b'gwe', b'Gweno'], [b'gwf', b'Gowro'], [b'gwg', b'Moo'], [b'gwi', 'Gwich\u02bcin'], [b'gwj', b'/Gwi'], [b'gwm', b'Awngthim'], [b'gwn', b'Gwandara'], [b'gwr', b'Gwere'], [b'gwt', b'Gawar-Bati'], [b'gwu', b'Guwamu'], [b'gww', b'Kwini'], [b'gwx', b'Gua'], [b'gxx', 'W\xe8 Southern'], [b'gya', b'Gbaya, Northwest'], [b'gyb', b'Garus'], [b'gyd', b'Kayardild'], [b'gye', b'Gyem'], [b'gyf', b'Gungabula'], [b'gyg', b'Gbayi'], [b'gyi', b'Gyele'], [b'gyl', b'Gayil'], [b'gym', 'Ng\xe4bere'], [b'gyn', b'Creole English, Guyanese'], [b'gyr', b'Guarayu'], [b'gyy', b'Gunya'], [b'gza', b'Ganza'], [b'gzi', b'Gazi'], [b'gzn', b'Gane'], [b'haa', b'Han'], [b'hab', b'Hanoi Sign Language'], [b'hac', b'Gurani'], [b'had', b'Hatam'], [b'hae', b'Oromo, Eastern'], [b'haf', b'Haiphong Sign Language'], [b'hag', b'Hanga'], [b'hah', b'Hahon'], [b'hai', b'Haida'], [b'haj', b'Hajong'], [b'hak', b'Chinese, Hakka'], [b'hal', b'Halang'], [b'ham', b'Hewa'], [b'han', b'Hangaza'], [b'hao', 'Hak\xf6'], [b'hap', b'Hupla'], [b'haq', b'Ha'], [b'har', b'Harari'], [b'has', b'Haisla'], [b'hat', b'Haitian'], [b'hau', b'Hausa'], [b'hav', b'Havu'], [b'haw', b'Hawaiian'], [b'hax', b'Haida, Southern'], [b'hay', b'Haya'], [b'haz', b'Hazaragi'], [b'hba', b'Hamba'], [b'hbb', b'Huba'], [b'hbn', b'Heiban'], [b'hbo', b'Hebrew, Ancient'], [b'hbs', b'Serbo-Croatian'], [b'hbu', b'Habu'], [b'hca', b'Creole Hindi, Andaman'], [b'hch', b'Huichol'], [b'hdn', b'Haida, Northern'], [b'hds', b'Honduras Sign Language'], [b'hdy', b'Hadiyya'], [b'hea', b'Miao, Northern Qiandong'], [b'heb', b'Hebrew'], [b'hed', 'Herd\xe9'], [b'heg', b'Helong'], [b'heh', b'Hehe'], [b'hei', b'Heiltsuk'], [b'hem', b'Hemba'], [b'her', b'Herero'], [b'hgm', b'Hai//om'], [b'hgw', b'Haigwai'], [b'hhi', b'Hoia Hoia'], [b'hhr', b'Kerak'], [b'hhy', b'Hoyahoya'], [b'hia', b'Lamang'], [b'hib', b'Hibito'], [b'hid', b'Hidatsa'], [b'hif', b'Hindi, Fiji'], [b'hig', b'Kamwe'], [b'hih', b'Pamosu'], [b'hii', b'Hinduri'], [b'hij', b'Hijuk'], [b'hik', b'Seit-Kaitetu'], [b'hil', b'Hiligaynon'], [b'hin', b'Hindi'], [b'hio', b'Tsoa'], [b'hir', 'Himarim\xe3'], [b'hit', b'Hittite'], [b'hiw', b'Hiw'], [b'hix', 'Hixkary\xe1na'], [b'hji', b'Haji'], [b'hka', b'Kahe'], [b'hke', b'Hunde'], [b'hkk', b'Hunjara-Kaina Ke'], [b'hks', b'Hong Kong Sign Language'], [b'hla', b'Halia'], [b'hlb', b'Halbi'], [b'hld', b'Halang Doan'], [b'hle', b'Hlersu'], [b'hlt', b'Chin, Matu'], [b'hlu', b'Luwian, Hieroglyphic'], [b'hma', b'Hmong, Southern Mashan'], [b'hmb', b'Songhay, Humburi Senni'], [b'hmc', b'Hmong, Central Huishui'], [b'hmd', b'Miao, Large Flowery'], [b'hme', b'Hmong, Eastern Huishui'], [b'hmf', b'Hmong Don'], [b'hmg', b'Hmong, Southwestern Guiyang'], [b'hmh', b'Hmong, Southwestern Huishui'], [b'hmi', b'Hmong, Northern Huishui'], [b'hmj', b'Ge'], [b'hmk', b'Maek'], [b'hml', b'Hmong, Luopohe'], [b'hmm', b'Hmong, Central Mashan'], [b'hmn', b'Hmong'], [b'hmo', b'Hiri Motu'], [b'hmp', b'Hmong, Northern Mashan'], [b'hmq', b'Miao, Eastern Qiandong'], [b'hmr', b'Hmar'], [b'hms', b'Miao, Southern Qiandong'], [b'hmt', b'Hamtai'], [b'hmu', b'Hamap'], [b'hmv', 'Hmong D\xf4'], [b'hmw', b'Hmong, Western Mashan'], [b'hmy', b'Hmong, Southern Guiyang'], [b'hmz', b'Hmong Shua'], [b'hna', b'Mina (Cameroon)'], [b'hnd', b'Hindko, Southern'], [b'hne', b'Chhattisgarhi'], [b'hnh', b'//Ani'], [b'hni', b'Hani'], [b'hnj', b'Hmong Njua'], [b'hnn', b'Hanunoo'], [b'hno', b'Hindko, Northern'], [b'hns', b'Hindustani, Caribbean'], [b'hnu', b'Hung'], [b'hoa', b'Hoava'], [b'hob', b'Mari (Madang Province)'], [b'hoc', b'Ho'], [b'hod', b'Holma'], [b'hoe', b'Horom'], [b'hoh', 'Hoby\xf3t'], [b'hoi', b'Holikachuk'], [b'hoj', b'Hadothi'], [b'hol', b'Holu'], [b'hom', b'Homa'], [b'hoo', b'Holoholo'], [b'hop', b'Hopi'], [b'hor', b'Horo'], [b'hos', b'Ho Chi Minh City Sign Language'], [b'hot', b'Hote'], [b'hov', b'Hovongan'], [b'how', b'Honi'], [b'hoy', b'Holiya'], [b'hoz', b'Hozo'], [b'hpo', b'Hpon'], [b'hps', b"Hawai'i Pidgin Sign Language"], [b'hra', b'Hrangkhol'], [b'hrc', b'Niwer Mil'], [b'hre', b'Hre'], [b'hrk', b'Haruku'], [b'hrm', b'Miao, Horned'], [b'hro', b'Haroi'], [b'hrp', b'Nhirrpi'], [b'hrt', 'H\xe9rtevin'], [b'hru', b'Hruso'], [b'hrv', b'Croatian'], [b'hrw', b'Warwar Feni'], [b'hrx', b'Hunsrik'], [b'hrz', b'Harzani'], [b'hsb', b'Sorbian, Upper'], [b'hsh', b'Hungarian Sign Language'], [b'hsl', b'Hausa Sign Language'], [b'hsn', b'Chinese, Xiang'], [b'hss', b'Harsusi'], [b'hti', b'Hoti'], [b'hto', b'Huitoto, Minica'], [b'hts', b'Hadza'], [b'htu', b'Hitu'], [b'htx', b'Hittite, Middle'], [b'hub', b'Huambisa'], [b'huc', b'=/Hua'], [b'hud', b'Huaulu'], [b'hue', b'Huave, San Francisco Del Mar'], [b'huf', b'Humene'], [b'hug', b'Huachipaeri'], [b'huh', b'Huilliche'], [b'hui', b'Huli'], [b'huj', b'Hmong, Northern Guiyang'], [b'huk', b'Hulung'], [b'hul', b'Hula'], [b'hum', b'Hungana'], [b'hun', b'Hungarian'], [b'huo', b'Hu'], [b'hup', b'Hupa'], [b'huq', b'Tsat'], [b'hur', b'Halkomelem'], [b'hus', b'Huastec'], [b'hut', b'Humla'], [b'huu', b'Huitoto, Murui'], [b'huv', b'Huave, San Mateo Del Mar'], [b'huw', b'Hukumina'], [b'hux', 'Huitoto, N\xfcpode'], [b'huy', 'Hulaul\xe1'], [b'huz', b'Hunzib'], [b'hvc', b'Haitian Vodoun Culture Language'], [b'hve', b'Huave, San Dionisio Del Mar'], [b'hvk', b'Haveke'], [b'hvn', b'Sabu'], [b'hvv', 'Huave, Santa Mar\xeda Del Mar'], [b'hwa', 'Wan\xe9'], [b'hwc', b"Creole English, Hawai'i"], [b'hwo', b'Hwana'], [b'hya', b'Hya'], [b'hye', b'Armenian'], [b'iai', b'Iaai'], [b'ian', b'Iatmul'], [b'iap', b'Iapama'], [b'iar', b'Purari'], [b'iba', b'Iban'], [b'ibb', b'Ibibio'], [b'ibd', b'Iwaidja'], [b'ibe', b'Akpes'], [b'ibg', b'Ibanag'], [b'ibl', b'Ibaloi'], [b'ibm', b'Agoi'], [b'ibn', b'Ibino'], [b'ibo', b'Igbo'], [b'ibr', b'Ibuoro'], [b'ibu', b'Ibu'], [b'iby', b'Ibani'], [b'ica', b'Ede Ica'], [b'ich', b'Etkywan'], [b'icl', b'Icelandic Sign Language'], [b'icr', b'Creole English, Islander'], [b'ida', b'Idakho-Isukha-Tiriki'], [b'idb', b'Indo-Portuguese'], [b'idc', b'Idon'], [b'idd', b'Ede Idaca'], [b'ide', b'Idere'], [b'idi', b'Idi'], [b'ido', b'Ido'], [b'idr', b'Indri'], [b'ids', b'Idesa'], [b'idt', 'Idat\xe9'], [b'idu', b'Idoma'], [b'ifa', b'Ifugao, Amganad'], [b'ifb', b'Ifugao, Batad'], [b'ife', 'If\xe8'], [b'iff', b'Ifo'], [b'ifk', b'Ifugao, Tuwali'], [b'ifm', b'Teke-Fuumu'], [b'ifu', b'Ifugao, Mayoyao'], [b'ify', b'Kallahan, Keley-I'], [b'igb', b'Ebira'], [b'ige', b'Igede'], [b'igg', b'Igana'], [b'igl', b'Igala'], [b'igm', b'Kanggape'], [b'ign', b'Ignaciano'], [b'igo', b'Isebe'], [b'igs', b'Interglossa'], [b'igw', b'Igwe'], [b'ihb', b'Iha Based Pidgin'], [b'ihi', b'Ihievbe'], [b'ihp', b'Iha'], [b'ihw', b'Bidhawal'], [b'iii', b'Yi, Sichuan'], [b'iin', b'Thiin'], [b'ijc', b'Izon'], [b'ije', b'Biseni'], [b'ijj', b'Ede Ije'], [b'ijn', b'Kalabari'], [b'ijs', b'Ijo, Southeast'], [b'ike', b'Inuktitut, Eastern Canadian'], [b'iki', b'Iko'], [b'ikk', b'Ika'], [b'ikl', b'Ikulu'], [b'iko', b'Olulumo-Ikom'], [b'ikp', b'Ikpeshi'], [b'ikr', b'Ikaranggal'], [b'ikt', b'Inuinnaqtun'], [b'iku', b'Inuktitut'], [b'ikv', b'Iku-Gora-Ankwa'], [b'ikw', b'Ikwere'], [b'ikx', b'Ik'], [b'ikz', b'Ikizu'], [b'ila', b'Ile Ape'], [b'ilb', b'Ila'], [b'ile', b'Interlingue'], [b'ilg', b'Garig-Ilgar'], [b'ili', b'Ili Turki'], [b'ilk', b'Ilongot'], [b'ill', b'Iranun'], [b'ilo', b'Iloko'], [b'ils', b'International Sign'], [b'ilu', b"Ili'uun"], [b'ilv', b'Ilue'], [b'ima', b'Malasar, Mala'], [b'ime', b'Imeraguen'], [b'imi', b'Anamgura'], [b'iml', b'Miluk'], [b'imn', b'Imonda'], [b'imo', b'Imbongu'], [b'imr', b'Imroing'], [b'ims', b'Marsian'], [b'imy', b'Milyan'], [b'ina', b'Interlingua (International Auxiliary Language Association)'], [b'inb', b'Inga'], [b'ind', b'Indonesian'], [b'ing', b"Degexit'an"], [b'inh', b'Ingush'], [b'inj', b'Inga, Jungle'], [b'inl', b'Indonesian Sign Language'], [b'inm', b'Minaean'], [b'inn', b'Isinai'], [b'ino', b'Inoke-Yate'], [b'inp', 'I\xf1apari'], [b'ins', b'Indian Sign Language'], [b'int', b'Intha'], [b'inz', 'Inese\xf1o'], [b'ior', b'Inor'], [b'iou', b'Tuma-Irumu'], [b'iow', b'Iowa-Oto'], [b'ipi', b'Ipili'], [b'ipk', b'Inupiaq'], [b'ipo', b'Ipiko'], [b'iqu', b'Iquito'], [b'iqw', b'Ikwo'], [b'ire', b'Iresim'], [b'irh', b'Irarutu'], [b'iri', b'Irigwe'], [b'irk', b'Iraqw'], [b'irn', 'Ir\xe1ntxe'], [b'irr', b'Ir'], [b'iru', b'Irula'], [b'irx', b'Kamberau'], [b'iry', b'Iraya'], [b'isa', b'Isabi'], [b'isc', b'Isconahua'], [b'isd', b'Isnag'], [b'ise', b'Italian Sign Language'], [b'isg', b'Irish Sign Language'], [b'ish', b'Esan'], [b'isi', b'Nkem-Nkum'], [b'isk', b'Ishkashimi'], [b'isl', b'Icelandic'], [b'ism', b'Masimasi'], [b'isn', b'Isanzu'], [b'iso', b'Isoko'], [b'isr', b'Israeli Sign Language'], [b'ist', b'Istriot'], [b'isu', b'Isu (Menchum Division)'], [b'ita', b'Italian'], [b'itb', b'Itneg, Binongan'], [b'ite', b'Itene'], [b'iti', b'Itneg, Inlaod'], [b'itk', b'Judeo-Italian'], [b'itl', b'Itelmen'], [b'itm', b'Itu Mbon Uzo'], [b'ito', b'Itonama'], [b'itr', b'Iteri'], [b'its', b'Isekiri'], [b'itt', b'Itneg, Maeng'], [b'itv', b'Itawit'], [b'itw', b'Ito'], [b'itx', b'Itik'], [b'ity', b'Itneg, Moyadan'], [b'itz', 'Itz\xe1'], [b'ium', b'Mien, Iu'], [b'ivb', b'Ibatan'], [b'ivv', b'Ivatan'], [b'iwk', b'I-Wak'], [b'iwm', b'Iwam'], [b'iwo', b'Iwur'], [b'iws', b'Iwam, Sepik'], [b'ixc', b'Ixcatec'], [b'ixl', b'Ixil'], [b'iya', b'Iyayu'], [b'iyo', b'Mesaka'], [b'iyx', b'Yaka (Congo)'], [b'izh', b'Ingrian'], [b'izr', b'Izere'], [b'izz', b'Izii'], [b'jaa', 'Jamamad\xed'], [b'jab', b'Hyam'], [b'jac', b"Popti'"], [b'jad', b'Jahanka'], [b'jae', b'Yabem'], [b'jaf', b'Jara'], [b'jah', b'Jah Hut'], [b'jaj', b'Zazao'], [b'jak', b'Jakun'], [b'jal', b'Yalahatan'], [b'jam', b'Creole English, Jamaican'], [b'jan', b'Jandai'], [b'jao', b'Yanyuwa'], [b'jaq', b'Yaqay'], [b'jas', b'Javanese, New Caledonian'], [b'jat', b'Jakati'], [b'jau', b'Yaur'], [b'jav', b'Javanese'], [b'jax', b'Malay, Jambi'], [b'jay', b'Yan-nhangu'], [b'jaz', b'Jawe'], [b'jbe', b'Judeo-Berber'], [b'jbi', b'Badjiri'], [b'jbj', b'Arandai'], [b'jbk', b'Barikewa'], [b'jbn', b'Nafusi'], [b'jbo', b'Lojban'], [b'jbr', b'Jofotek-Bromnya'], [b'jbt', 'Jabut\xed'], [b'jbu', b'Jukun Takum'], [b'jbw', b'Yawijibaya'], [b'jcs', b'Jamaican Country Sign Language'], [b'jct', b'Krymchak'], [b'jda', b'Jad'], [b'jdg', b'Jadgali'], [b'jdt', b'Judeo-Tat'], [b'jeb', b'Jebero'], [b'jee', b'Jerung'], [b'jeg', b'Jeng'], [b'jeh', b'Jeh'], [b'jei', b'Yei'], [b'jek', b'Jeri Kuo'], [b'jel', b'Yelmek'], [b'jen', b'Dza'], [b'jer', b'Jere'], [b'jet', b'Manem'], [b'jeu', b'Jonkor Bourmataguil'], [b'jgb', b'Ngbee'], [b'jge', b'Judeo-Georgian'], [b'jgk', b'Gwak'], [b'jgo', b'Ngomba'], [b'jhi', b'Jehai'], [b'jhs', b'Jhankot Sign Language'], [b'jia', b'Jina'], [b'jib', b'Jibu'], [b'jic', b'Tol'], [b'jid', b'Bu'], [b'jie', b'Jilbe'], [b'jig', b'Djingili'], [b'jih', b'sTodsde'], [b'jii', b'Jiiddu'], [b'jil', b'Jilim'], [b'jim', b'Jimi (Cameroon)'], [b'jio', b'Jiamao'], [b'jiq', b'Guanyinqiao'], [b'jit', b'Jita'], [b'jiu', b'Jinuo, Youle'], [b'jiv', b'Shuar'], [b'jiy', b'Jinuo, Buyuan'], [b'jjr', b'Bankal'], [b'jkm', b'Karen, Mobwa'], [b'jko', b'Kubo'], [b'jkp', b'Karen, Paku'], [b'jkr', b'Koro (India)'], [b'jku', b'Labir'], [b'jle', b'Ngile'], [b'jls', b'Jamaican Sign Language'], [b'jma', b'Dima'], [b'jmb', b'Zumbun'], [b'jmc', b'Machame'], [b'jmd', b'Yamdena'], [b'jmi', b'Jimi (Nigeria)'], [b'jml', b'Jumli'], [b'jmn', b'Naga, Makuri'], [b'jmr', b'Kamara'], [b'jms', b'Mashi (Nigeria)'], [b'jmw', b'Mouwase'], [b'jmx', b'Mixtec, Western Juxtlahuaca'], [b'jna', b'Jangshung'], [b'jnd', b'Jandavra'], [b'jng', b'Yangman'], [b'jni', b'Janji'], [b'jnj', b'Yemsa'], [b'jnl', b'Rawat'], [b'jns', b'Jaunsari'], [b'job', b'Joba'], [b'jod', b'Wojenaka'], [b'jor', 'Jor\xe1'], [b'jos', b'Jordanian Sign Language'], [b'jow', b'Jowulu'], [b'jpa', b'Aramaic, Jewish Palestinian'], [b'jpn', b'Japanese'], [b'jpr', b'Judeo-Persian'], [b'jqr', b'Jaqaru'], [b'jra', b'Jarai'], [b'jrb', b'Judeo-Arabic'], [b'jrr', b'Jiru'], [b'jrt', b'Jorto'], [b'jru', 'Japrer\xeda'], [b'jsl', b'Japanese Sign Language'], [b'jua', 'J\xfama'], [b'jub', b'Wannu'], [b'juc', b'Jurchen'], [b'jud', b'Worodougou'], [b'juh', 'H\xf5ne'], [b'jui', b'Ngadjuri'], [b'juk', b'Wapan'], [b'jul', b'Jirel'], [b'jum', b'Jumjum'], [b'jun', b'Juang'], [b'juo', b'Jiba'], [b'jup', 'Hupd\xeb'], [b'jur', 'Jur\xfana'], [b'jus', b'Jumla Sign Language'], [b'jut', b'Jutish'], [b'juu', b'Ju'], [b'juw', 'W\xe3pha'], [b'juy', b'Juray'], [b'jvd', b'Javindo'], [b'jvn', b'Javanese, Caribbean'], [b'jwi', b'Jwira-Pepesa'], [b'jya', b'Jiarong'], [b'jye', b'Arabic, Judeo-Yemeni'], [b'jyy', b'Jaya'], [b'kaa', b'Kara-Kalpak'], [b'kab', b'Kabyle'], [b'kac', b'Kachin'], [b'kad', b'Adara'], [b'kae', b'Ketangalan'], [b'kaf', b'Katso'], [b'kag', b'Kajaman'], [b'kah', b'Kara (Central African Republic)'], [b'kai', b'Karekare'], [b'kaj', b'Jju'], [b'kak', b'Kallahan, Kayapa'], [b'kal', b'Kalaallisut'], [b'kam', b'Kamba (Kenya)'], [b'kan', b'Kannada'], [b'kao', b'Xaasongaxango'], [b'kap', b'Bezhta'], [b'kaq', b'Capanahua'], [b'kas', b'Kashmiri'], [b'kat', b'Georgian'], [b'kau', b'Kanuri'], [b'kav', 'Katuk\xedna'], [b'kaw', b'Kawi'], [b'kax', b'Kao'], [b'kay', 'Kamayur\xe1'], [b'kaz', b'Kazakh'], [b'kba', b'Kalarko'], [b'kbb', 'Kaxui\xe2na'], [b'kbc', 'Kadiw\xe9u'], [b'kbd', b'Kabardian'], [b'kbe', b'Kanju'], [b'kbf', b'Kakauhua'], [b'kbg', b'Khamba'], [b'kbh', 'Cams\xe1'], [b'kbi', b'Kaptiau'], [b'kbj', b'Kari'], [b'kbk', b'Koiari, Grass'], [b'kbl', b'Kanembu'], [b'kbm', b'Iwal'], [b'kbn', b'Kare (Central African Republic)'], [b'kbo', b'Keliko'], [b'kbp', 'Kabiy\xe8'], [b'kbq', b'Kamano'], [b'kbr', b'Kafa'], [b'kbs', b'Kande'], [b'kbt', b'Abadi'], [b'kbu', b'Kabutra'], [b'kbv', b'Dera (Indonesia)'], [b'kbw', b'Kaiep'], [b'kbx', b'Ap Ma'], [b'kby', b'Kanuri, Manga'], [b'kbz', b'Duhwa'], [b'kca', b'Khanty'], [b'kcb', b'Kawacha'], [b'kcc', b'Lubila'], [b'kcd', 'Kanum, Ngk\xe2lmpw'], [b'kce', b'Kaivi'], [b'kcf', b'Ukaan'], [b'kcg', b'Tyap'], [b'kch', b'Vono'], [b'kci', b'Kamantan'], [b'kcj', b'Kobiana'], [b'kck', b'Kalanga'], [b'kcl', b'Kela (Papua New Guinea)'], [b'kcm', b'Gula (Central African Republic)'], [b'kcn', b'Nubi'], [b'kco', b'Kinalakna'], [b'kcp', b'Kanga'], [b'kcq', b'Kamo'], [b'kcr', b'Katla'], [b'kcs', b'Koenoem'], [b'kct', b'Kaian'], [b'kcu', b'Kami (Tanzania)'], [b'kcv', b'Kete'], [b'kcw', b'Kabwari'], [b'kcx', b'Kachama-Ganjule'], [b'kcy', b'Korandje'], [b'kcz', b'Konongo'], [b'kda', b'Worimi'], [b'kdc', b'Kutu'], [b'kdd', b'Yankunytjatjara'], [b'kde', b'Makonde'], [b'kdf', b'Mamusi'], [b'kdg', b'Seba'], [b'kdh', b'Tem'], [b'kdi', b'Kumam'], [b'kdj', b'Karamojong'], [b'kdk', 'Num\xe8\xe8'], [b'kdl', b'Tsikimba'], [b'kdm', b'Kagoma'], [b'kdn', b'Kunda'], [b'kdp', b'Kaningdon-Nindem'], [b'kdq', b'Koch'], [b'kdr', b'Karaim'], [b'kdt', b'Kuy'], [b'kdu', b'Kadaru'], [b'kdw', b'Koneraw'], [b'kdx', b'Kam'], [b'kdy', b'Keder'], [b'kdz', b'Kwaja'], [b'kea', b'Kabuverdianu'], [b'keb', 'K\xe9l\xe9'], [b'kec', b'Keiga'], [b'ked', b'Kerewe'], [b'kee', b'Keres, Eastern'], [b'kef', b'Kpessi'], [b'keg', b'Tese'], [b'keh', b'Keak'], [b'kei', b'Kei'], [b'kej', b'Kadar'], [b'kek', 'Kekch\xed'], [b'kel', b'Kela (Democratic Republic of Congo)'], [b'kem', b'Kemak'], [b'ken', b'Kenyang'], [b'keo', b'Kakwa'], [b'kep', b'Kaikadi'], [b'keq', b'Kamar'], [b'ker', b'Kera'], [b'kes', b'Kugbo'], [b'ket', b'Ket'], [b'keu', b'Akebu'], [b'kev', b'Kanikkaran'], [b'kew', b'Kewa, West'], [b'kex', b'Kukna'], [b'key', b'Kupia'], [b'kez', b'Kukele'], [b'kfa', b'Kodava'], [b'kfb', b'Kolami, Northwestern'], [b'kfc', b'Konda-Dora'], [b'kfd', b'Koraga, Korra'], [b'kfe', b'Kota (India)'], [b'kff', b'Koya'], [b'kfg', b'Kudiya'], [b'kfh', b'Kurichiya'], [b'kfi', b'Kurumba, Kannada'], [b'kfj', b'Kemiehua'], [b'kfk', b'Kinnauri'], [b'kfl', b'Kung'], [b'kfm', b'Khunsari'], [b'kfn', b'Kuk'], [b'kfo', "Koro (C\xf4te d'Ivoire)"], [b'kfp', b'Korwa'], [b'kfq', b'Korku'], [b'kfr', b'Kachchi'], [b'kfs', b'Bilaspuri'], [b'kft', b'Kanjari'], [b'kfu', b'Katkari'], [b'kfv', b'Kurmukar'], [b'kfw', b'Naga, Kharam'], [b'kfx', b'Pahari, Kullu'], [b'kfy', b'Kumaoni'], [b'kfz', 'Koromf\xe9'], [b'kga', b'Koyaga'], [b'kgb', b'Kawe'], [b'kgc', b'Kasseng'], [b'kgd', b'Kataang'], [b'kge', b'Komering'], [b'kgf', b'Kube'], [b'kgg', b'Kusunda'], [b'kgi', b'Selangor Sign Language'], [b'kgj', b'Kham, Gamale'], [b'kgk', 'Kaiw\xe1'], [b'kgl', b'Kunggari'], [b'kgm', 'Karip\xfana'], [b'kgn', b'Karingani'], [b'kgo', b'Krongo'], [b'kgp', b'Kaingang'], [b'kgq', b'Kamoro'], [b'kgr', b'Abun'], [b'kgs', b'Kumbainggar'], [b'kgt', b'Somyev'], [b'kgu', b'Kobol'], [b'kgv', b'Karas'], [b'kgw', b'Karon Dori'], [b'kgx', b'Kamaru'], [b'kgy', b'Kyerung'], [b'kha', b'Khasi'], [b'khb', 'L\xfc'], [b'khc', b'Tukang Besi North'], [b'khd', 'Kanum, B\xe4di'], [b'khe', b'Korowai'], [b'khf', b'Khuen'], [b'khg', b'Tibetan, Khams'], [b'khh', b'Kehu'], [b'khj', b'Kuturmi'], [b'khk', b'Mongolian, Halh'], [b'khl', b'Lusi'], [b'khm', b'Khmer, Central'], [b'khn', b'Khandesi'], [b'kho', b'Khotanese'], [b'khp', b'Kapori'], [b'khq', b'Songhay, Koyra Chiini'], [b'khr', b'Kharia'], [b'khs', b'Kasua'], [b'kht', b'Khamti'], [b'khu', b'Nkhumbi'], [b'khv', b'Khvarshi'], [b'khw', b'Khowar'], [b'khx', b'Kanu'], [b'khy', b'Kele (Democratic Republic of Congo)'], [b'khz', b'Keapara'], [b'kia', b'Kim'], [b'kib', b'Koalib'], [b'kic', b'Kickapoo'], [b'kid', b'Koshin'], [b'kie', b'Kibet'], [b'kif', b'Kham, Eastern Parbate'], [b'kig', b'Kimaama'], [b'kih', b'Kilmeri'], [b'kii', b'Kitsai'], [b'kij', b'Kilivila'], [b'kik', b'Kikuyu'], [b'kil', b'Kariya'], [b'kim', b'Karagas'], [b'kin', b'Kinyarwanda'], [b'kio', b'Kiowa'], [b'kip', b'Kham, Sheshi'], [b'kiq', b'Kosadle'], [b'kir', b'Kirghiz'], [b'kis', b'Kis'], [b'kit', b'Agob'], [b'kiu', b'Kirmanjki (individual language)'], [b'kiv', b'Kimbu'], [b'kiw', b'Kiwai, Northeast'], [b'kix', b'Naga, Khiamniungan'], [b'kiy', b'Kirikiri'], [b'kiz', b'Kisi'], [b'kja', b'Mlap'], [b'kjb', b"Q'anjob'al"], [b'kjc', b'Konjo, Coastal'], [b'kjd', b'Kiwai, Southern'], [b'kje', b'Kisar'], [b'kjf', b'Khalaj'], [b'kjg', b'Khmu'], [b'kjh', b'Khakas'], [b'kji', b'Zabana'], [b'kjj', b'Khinalugh'], [b'kjk', b'Konjo, Highland'], [b'kjl', b'Kham, Western Parbate'], [b'kjm', 'Kh\xe1ng'], [b'kjn', b'Kunjen'], [b'kjo', b'Kinnauri, Harijan'], [b'kjp', b'Karen, Pwo Eastern'], [b'kjq', b'Keres, Western'], [b'kjr', b'Kurudu'], [b'kjs', b'Kewa, East'], [b'kjt', b'Karen, Phrae Pwo'], [b'kju', b'Kashaya'], [b'kjx', b'Ramopa'], [b'kjy', b'Erave'], [b'kjz', b'Bumthangkha'], [b'kka', b'Kakanda'], [b'kkb', b'Kwerisa'], [b'kkc', b'Odoodee'], [b'kkd', b'Kinuku'], [b'kke', b'Kakabe'], [b'kkf', b'Monpa, Kalaktang'], [b'kkg', b'Kalinga, Mabaka Valley'], [b'kkh', 'Kh\xfcn'], [b'kki', b'Kagulu'], [b'kkj', b'Kako'], [b'kkk', b'Kokota'], [b'kkl', b'Yale, Kosarek'], [b'kkm', b'Kiong'], [b'kkn', b'Kon Keu'], [b'kko', b'Karko'], [b'kkp', b'Gugubera'], [b'kkq', b'Kaiku'], [b'kkr', b'Kir-Balar'], [b'kks', b'Giiwo'], [b'kkt', b'Koi'], [b'kku', b'Tumi'], [b'kkv', b'Kangean'], [b'kkw', b'Teke-Kukuya'], [b'kkx', b'Kohin'], [b'kky', b'Guguyimidjir'], [b'kkz', b'Kaska'], [b'kla', b'Klamath-Modoc'], [b'klb', b'Kiliwa'], [b'klc', b'Kolbila'], [b'kld', b'Gamilaraay'], [b'kle', b'Kulung (Nepal)'], [b'klf', b'Kendeje'], [b'klg', b'Tagakaulo'], [b'klh', b'Weliki'], [b'kli', b'Kalumpang'], [b'klj', b'Khalaj, Turkic'], [b'klk', b'Kono (Nigeria)'], [b'kll', b'Kalagan, Kagan'], [b'klm', b'Migum'], [b'kln', b'Kalenjin'], [b'klo', b'Kapya'], [b'klp', b'Kamasa'], [b'klq', b'Rumu'], [b'klr', b'Khaling'], [b'kls', b'Kalasha'], [b'klt', b'Nukna'], [b'klu', b'Klao'], [b'klv', b'Maskelynes'], [b'klw', b'Lindu'], [b'klx', b'Koluwawa'], [b'kly', b'Kalao'], [b'klz', b'Kabola'], [b'kma', b'Konni'], [b'kmb', b'Kimbundu'], [b'kmc', b'Dong, Southern'], [b'kmd', b'Kalinga, Majukayang'], [b'kme', b'Bakole'], [b'kmf', b'Kare (Papua New Guinea)'], [b'kmg', 'K\xe2te'], [b'kmh', b'Kalam'], [b'kmi', b'Kami (Nigeria)'], [b'kmj', b'Kumarbhag Paharia'], [b'kmk', b'Kalinga, Limos'], [b'kml', b'Kalinga, Tanudan'], [b'kmm', b'Kom (India)'], [b'kmn', b'Awtuw'], [b'kmo', b'Kwoma'], [b'kmp', b'Gimme'], [b'kmq', b'Kwama'], [b'kmr', b'Kurdish, Northern'], [b'kms', b'Kamasau'], [b'kmt', b'Kemtuik'], [b'kmu', b'Kanite'], [b'kmv', 'Creole French, Karip\xfana'], [b'kmw', b'Komo (Democratic Republic of Congo)'], [b'kmx', b'Waboda'], [b'kmy', b'Koma'], [b'kmz', b'Khorasani Turkish'], [b'kna', b'Dera (Nigeria)'], [b'knb', b'Kalinga, Lubuagan'], [b'knc', b'Kanuri, Central'], [b'knd', b'Konda'], [b'kne', b'Kankanaey'], [b'knf', b'Mankanya'], [b'kng', b'Koongo'], [b'kni', b'Kanufi'], [b'knj', b'Kanjobal, Western'], [b'knk', b'Kuranko'], [b'knl', b'Keninjal'], [b'knm', 'Kanamar\xed'], [b'knn', b'Konkani (individual language)'], [b'kno', b'Kono (Sierra Leone)'], [b'knp', b'Kwanja'], [b'knq', b'Kintaq'], [b'knr', b'Kaningra'], [b'kns', b'Kensiu'], [b'knt', 'Katuk\xedna, Panoan'], [b'knu', b'Kono (Guinea)'], [b'knv', b'Tabo'], [b'knw', b'Kung-Ekoka'], [b'knx', b'Kendayan'], [b'kny', b'Kanyok'], [b'knz', 'Kalams\xe9'], [b'koa', b'Konomala'], [b'koc', b'Kpati'], [b'kod', b'Kodi'], [b'koe', b'Kacipo-Balesi'], [b'kof', b'Kubi'], [b'kog', b'Cogui'], [b'koh', b'Koyo'], [b'koi', b'Komi-Permyak'], [b'koj', b'Sara Dunjo'], [b'kok', b'Konkani (macrolanguage)'], [b'kol', b'Kol (Papua New Guinea)'], [b'kom', b'Komi'], [b'kon', b'Kongo'], [b'koo', b'Konzo'], [b'kop', b'Waube'], [b'koq', b'Kota (Gabon)'], [b'kor', b'Korean'], [b'kos', b'Kosraean'], [b'kot', b'Lagwan'], [b'kou', b'Koke'], [b'kov', b'Kudu-Camo'], [b'kow', b'Kugama'], [b'kox', b'Coxima'], [b'koy', b'Koyukon'], [b'koz', b'Korak'], [b'kpa', b'Kutto'], [b'kpb', b'Kurumba, Mullu'], [b'kpc', b'Curripaco'], [b'kpd', b'Koba'], [b'kpe', b'Kpelle'], [b'kpf', b'Komba'], [b'kpg', b'Kapingamarangi'], [b'kph', b'Kplang'], [b'kpi', b'Kofei'], [b'kpj', 'Karaj\xe1'], [b'kpk', b'Kpan'], [b'kpl', b'Kpala'], [b'kpm', b'Koho'], [b'kpn', 'Kepkiriw\xe1t'], [b'kpo', b'Ikposo'], [b'kpq', b'Korupun-Sela'], [b'kpr', b'Korafe-Yegha'], [b'kps', b'Tehit'], [b'kpt', b'Karata'], [b'kpu', b'Kafoa'], [b'kpv', b'Komi-Zyrian'], [b'kpw', b'Kobon'], [b'kpx', b'Koiali, Mountain'], [b'kpy', b'Koryak'], [b'kpz', b'Kupsabiny'], [b'kqa', b'Mum'], [b'kqb', b'Kovai'], [b'kqc', b'Doromu-Koki'], [b'kqd', b'Koy Sanjaq Surat'], [b'kqe', b'Kalagan'], [b'kqf', b'Kakabai'], [b'kqg', b'Khe'], [b'kqh', b'Kisankasa'], [b'kqi', b'Koitabu'], [b'kqj', b'Koromira'], [b'kqk', b'Gbe, Kotafon'], [b'kql', b'Kyenele'], [b'kqm', b'Khisa'], [b'kqn', b'Kaonde'], [b'kqo', b'Krahn, Eastern'], [b'kqp', 'Kimr\xe9'], [b'kqq', b'Krenak'], [b'kqr', b'Kimaragang'], [b'kqs', b'Kissi, Northern'], [b'kqt', b'Kadazan, Klias River'], [b'kqu', b'Seroa'], [b'kqv', b'Okolod'], [b'kqw', b'Kandas'], [b'kqx', b'Mser'], [b'kqy', b'Koorete'], [b'kqz', b'Korana'], [b'kra', b'Kumhali'], [b'krb', b'Karkin'], [b'krc', b'Karachay-Balkar'], [b'krd', b'Kairui-Midiki'], [b'kre', 'Panar\xe1'], [b'krf', b'Koro (Vanuatu)'], [b'krh', b'Kurama'], [b'kri', b'Krio'], [b'krj', b'Kinaray-A'], [b'krk', b'Kerek'], [b'krl', b'Karelian'], [b'krm', b'Krim'], [b'krn', b'Sapo'], [b'krp', b'Korop'], [b'krr', b"Kru'ng 2"], [b'krs', b'Gbaya (Sudan)'], [b'krt', b'Kanuri, Tumari'], [b'kru', b'Kurukh'], [b'krv', b'Kavet'], [b'krw', b'Krahn, Western'], [b'krx', b'Karon'], [b'kry', b'Kryts'], [b'krz', b'Kanum, Sota'], [b'ksa', b'Shuwa-Zamani'], [b'ksb', b'Shambala'], [b'ksc', b'Kalinga, Southern'], [b'ksd', b'Kuanua'], [b'kse', b'Kuni'], [b'ksf', b'Bafia'], [b'ksg', b'Kusaghe'], [b'ksh', 'K\xf6lsch'], [b'ksi', b'Krisa'], [b'ksj', b'Uare'], [b'ksk', b'Kansa'], [b'ksl', b'Kumalu'], [b'ksm', b'Kumba'], [b'ksn', b'Kasiguranin'], [b'kso', b'Kofa'], [b'ksp', b'Kaba'], [b'ksq', b'Kwaami'], [b'ksr', b'Borong'], [b'kss', b'Kisi, Southern'], [b'kst', 'Winy\xe9'], [b'ksu', b'Khamyang'], [b'ksv', b'Kusu'], [b'ksw', b"Karen, S'gaw"], [b'ksx', b'Kedang'], [b'ksy', b'Kharia Thar'], [b'ksz', b'Kodaku'], [b'kta', b'Katua'], [b'ktb', b'Kambaata'], [b'ktc', b'Kholok'], [b'ktd', b'Kokata'], [b'kte', b'Nubri'], [b'ktf', b'Kwami'], [b'ktg', b'Kalkutung'], [b'kth', b'Karanga'], [b'kti', b'Muyu, North'], [b'ktj', b'Krumen, Plapo'], [b'ktk', b'Kaniet'], [b'ktl', b'Koroshi'], [b'ktm', b'Kurti'], [b'ktn', 'Kariti\xe2na'], [b'kto', b'Kuot'], [b'ktp', b'Kaduo'], [b'ktq', b'Katabaga'], [b'ktr', b'Kota Marudu Tinagas'], [b'kts', b'Muyu, South'], [b'ktt', b'Ketum'], [b'ktu', b'Kituba (Democratic Republic of Congo)'], [b'ktv', b'Katu, Eastern'], [b'ktw', b'Kato'], [b'ktx', 'Kaxarar\xed'], [b'kty', 'Kango (Bas-U\xe9l\xe9 District)'], [b'ktz', b"Ju/'hoan"], [b'kua', b'Kuanyama'], [b'kub', b'Kutep'], [b'kuc', b'Kwinsu'], [b'kud', b"'Auhelawa"], [b'kue', b'Kuman'], [b'kuf', b'Katu, Western'], [b'kug', b'Kupa'], [b'kuh', b'Kushi'], [b'kui', 'Kuik\xfaro-Kalap\xe1lo'], [b'kuj', b'Kuria'], [b'kuk', b"Kepo'"], [b'kul', b'Kulere'], [b'kum', b'Kumyk'], [b'kun', b'Kunama'], [b'kuo', b'Kumukio'], [b'kup', b'Kunimaipa'], [b'kuq', b'Karipuna'], [b'kur', b'Kurdish'], [b'kus', b'Kusaal'], [b'kut', b'Kutenai'], [b'kuu', b'Kuskokwim, Upper'], [b'kuv', b'Kur'], [b'kuw', b'Kpagua'], [b'kux', b'Kukatja'], [b'kuy', b"Kuuku-Ya'u"], [b'kuz', b'Kunza'], [b'kva', b'Bagvalal'], [b'kvb', b'Kubu'], [b'kvc', b'Kove'], [b'kvd', b'Kui (Indonesia)'], [b'kve', b'Kalabakan'], [b'kvf', b'Kabalai'], [b'kvg', b'Kuni-Boazi'], [b'kvh', b'Komodo'], [b'kvi', b'Kwang'], [b'kvj', b'Psikye'], [b'kvk', b'Korean Sign Language'], [b'kvl', b'Kayaw'], [b'kvm', b'Kendem'], [b'kvn', b'Kuna, Border'], [b'kvo', b'Dobel'], [b'kvp', b'Kompane'], [b'kvq', b'Karen, Geba'], [b'kvr', b'Kerinci'], [b'kvs', b'Kunggara'], [b'kvt', b'Karen, Lahta'], [b'kvu', b'Karen, Yinbaw'], [b'kvv', b'Kola'], [b'kvw', b'Wersing'], [b'kvx', b'Koli, Parkari'], [b'kvy', b'Karen, Yintale'], [b'kvz', b'Tsakwambo'], [b'kwa', 'D\xe2w'], [b'kwb', b'Kwa'], [b'kwc', b'Likwala'], [b'kwd', b'Kwaio'], [b'kwe', b'Kwerba'], [b'kwf', b"Kwara'ae"], [b'kwg', b'Sara Kaba Deme'], [b'kwh', b'Kowiai'], [b'kwi', b'Awa-Cuaiquer'], [b'kwj', b'Kwanga'], [b'kwk', b'Kwakiutl'], [b'kwl', b'Kofyar'], [b'kwm', b'Kwambi'], [b'kwn', b'Kwangali'], [b'kwo', b'Kwomtari'], [b'kwp', b'Kodia'], [b'kwq', b'Kwak'], [b'kwr', b'Kwer'], [b'kws', b'Kwese'], [b'kwt', b'Kwesten'], [b'kwu', b'Kwakum'], [b'kwv', 'Sara Kaba N\xe1\xe0'], [b'kww', b'Kwinti'], [b'kwx', b'Khirwar'], [b'kwy', b'Kongo, San Salvador'], [b'kwz', b'Kwadi'], [b'kxa', b'Kairiru'], [b'kxb', b'Krobu'], [b'kxc', b'Konso'], [b'kxd', b'Brunei'], [b'kxe', b'Kakihum'], [b'kxf', b'Karen, Manumanaw'], [b'kxh', b'Karo (Ethiopia)'], [b'kxi', b'Murut, Keningau'], [b'kxj', b'Kulfa'], [b'kxk', b'Karen, Zayein'], [b'kxl', b'Kurux, Nepali'], [b'kxm', b'Khmer, Northern'], [b'kxn', b'Melanau, Kanowit-Tanjong'], [b'kxo', 'Kano\xe9'], [b'kxp', b'Koli, Wadiyara'], [b'kxq', 'Kanum, Sm\xe4rky'], [b'kxr', b'Koro (Papua New Guinea)'], [b'kxs', b'Kangjia'], [b'kxt', b'Koiwat'], [b'kxu', b'Kui (India)'], [b'kxv', b'Kuvi'], [b'kxw', b'Konai'], [b'kxx', b'Likuba'], [b'kxy', b'Kayong'], [b'kxz', b'Kerewo'], [b'kya', b'Kwaya'], [b'kyb', b'Kalinga, Butbut'], [b'kyc', b'Kyaka'], [b'kyd', b'Karey'], [b'kye', b'Krache'], [b'kyf', b'Kouya'], [b'kyg', b'Keyagana'], [b'kyh', b'Karok'], [b'kyi', b'Kiput'], [b'kyj', b'Karao'], [b'kyk', b'Kamayo'], [b'kyl', b'Kalapuya'], [b'kym', b'Kpatili'], [b'kyn', b'Binukidnon, Northern'], [b'kyo', b'Kelon'], [b'kyp', b'Kang'], [b'kyq', b'Kenga'], [b'kyr', 'Kuru\xe1ya'], [b'kys', b'Kayan, Baram'], [b'kyt', b'Kayagar'], [b'kyu', b'Kayah, Western'], [b'kyv', b'Kayort'], [b'kyw', b'Kudmali'], [b'kyx', b'Rapoisi'], [b'kyy', b'Kambaira'], [b'kyz', 'Kayab\xed'], [b'kza', b'Karaboro, Western'], [b'kzb', b'Kaibobo'], [b'kzc', b'Kulango, Bondoukou'], [b'kzd', b'Kadai'], [b'kze', b'Kosena'], [b'kzf', b"Kaili, Da'a"], [b'kzg', b'Kikai'], [b'kzi', b'Kelabit'], [b'kzj', b'Kadazan, Coastal'], [b'kzk', b'Kazukuru'], [b'kzl', b'Kayeli'], [b'kzm', b'Kais'], [b'kzn', b'Kokola'], [b'kzo', b'Kaningi'], [b'kzp', b'Kaidipang'], [b'kzq', b'Kaike'], [b'kzr', b'Karang'], [b'kzs', b'Dusun, Sugut'], [b'kzt', b'Dusun, Tambunan'], [b'kzu', b'Kayupulau'], [b'kzv', b'Komyandaret'], [b'kzw', 'Karir\xed-Xoc\xf3'], [b'kzx', b'Kamarian'], [b'kzy', b'Kango (Tshopo District)'], [b'kzz', b'Kalabra'], [b'laa', b'Subanen, Southern'], [b'lab', b'Linear A'], [b'lac', b'Lacandon'], [b'lad', b'Ladino'], [b'lae', b'Pattani'], [b'laf', b'Lafofa'], [b'lag', b'Langi'], [b'lah', b'Lahnda'], [b'lai', b'Lambya'], [b'laj', b'Lango (Uganda)'], [b'lak', b'Laka (Nigeria)'], [b'lal', b'Lalia'], [b'lam', b'Lamba'], [b'lan', b'Laru'], [b'lao', b'Lao'], [b'lap', b'Laka (Chad)'], [b'laq', b'Qabiao'], [b'lar', b'Larteh'], [b'las', b'Lama (Togo)'], [b'lat', b'Latin'], [b'lau', b'Laba'], [b'lav', b'Latvian'], [b'law', b'Lauje'], [b'lax', b'Tiwa'], [b'lay', b'Lama (Myanmar)'], [b'laz', b'Aribwatsa'], [b'lba', b'Lui'], [b'lbb', b'Label'], [b'lbc', b'Lakkia'], [b'lbe', b'Lak'], [b'lbf', b'Tinani'], [b'lbg', b'Laopang'], [b'lbi', b"La'bi"], [b'lbj', b'Ladakhi'], [b'lbk', b'Bontok, Central'], [b'lbl', b'Bikol, Libon'], [b'lbm', b'Lodhi'], [b'lbn', b'Lamet'], [b'lbo', b'Laven'], [b'lbq', b'Wampar'], [b'lbr', b'Lohorung'], [b'lbs', b'Libyan Sign Language'], [b'lbt', b'Lachi'], [b'lbu', b'Labu'], [b'lbv', b'Lavatbura-Lamusong'], [b'lbw', b'Tolaki'], [b'lbx', b'Lawangan'], [b'lby', b'Lamu-Lamu'], [b'lbz', b'Lardil'], [b'lcc', b'Legenyem'], [b'lcd', b'Lola'], [b'lce', b'Loncong'], [b'lcf', b'Lubu'], [b'lch', b'Luchazi'], [b'lcl', b'Lisela'], [b'lcm', b'Tungag'], [b'lcp', b'Lawa, Western'], [b'lcq', b'Luhu'], [b'lcs', b'Lisabata-Nuniali'], [b'lda', b'Kla-Dan'], [b'ldb', 'Du\u0303ya'], [b'ldd', b'Luri'], [b'ldg', b'Lenyima'], [b'ldh', b'Lamja-Dengsa-Tola'], [b'ldi', b'Laari'], [b'ldj', b'Lemoro'], [b'ldk', b'Leelau'], [b'ldl', b'Kaan'], [b'ldm', b'Landoma'], [b'ldn', 'L\xe1adan'], [b'ldo', b'Loo'], [b'ldp', b'Tso'], [b'ldq', b'Lufu'], [b'lea', b'Lega-Shabunda'], [b'leb', b'Lala-Bisa'], [b'lec', b'Leco'], [b'led', b'Lendu'], [b'lee', 'Ly\xe9l\xe9'], [b'lef', b'Lelemi'], [b'leg', b'Lengua'], [b'leh', b'Lenje'], [b'lei', b'Lemio'], [b'lej', b'Lengola'], [b'lek', b'Leipon'], [b'lel', b'Lele (Democratic Republic of Congo)'], [b'lem', b'Nomaande'], [b'len', b'Lenca'], [b'leo', b'Leti (Cameroon)'], [b'lep', b'Lepcha'], [b'leq', b'Lembena'], [b'ler', b'Lenkau'], [b'les', b'Lese'], [b'let', b'Lesing-Gelimi'], [b'leu', b'Kara (Papua New Guinea)'], [b'lev', b'Lamma'], [b'lew', b'Kaili, Ledo'], [b'lex', b'Luang'], [b'ley', b'Lemolang'], [b'lez', b'Lezghian'], [b'lfa', b'Lefa'], [b'lfn', b'Lingua Franca Nova'], [b'lga', b'Lungga'], [b'lgb', b'Laghu'], [b'lgg', b'Lugbara'], [b'lgh', b'Laghuu'], [b'lgi', b'Lengilu'], [b'lgk', b'Lingarak'], [b'lgl', b'Wala'], [b'lgm', b'Lega-Mwenga'], [b'lgn', b'Opuuo'], [b'lgq', b'Logba'], [b'lgr', b'Lengo'], [b'lgt', b'Pahi'], [b'lgu', b'Longgu'], [b'lgz', b'Ligenza'], [b'lha', b'Laha (Viet Nam)'], [b'lhh', b'Laha (Indonesia)'], [b'lhi', b'Lahu Shi'], [b'lhl', b'Lohar, Lahul'], [b'lhm', b'Lhomi'], [b'lhn', b'Lahanan'], [b'lhp', b'Lhokpu'], [b'lhs', 'Mlahs\xf6'], [b'lht', b'Lo-Toga'], [b'lhu', b'Lahu'], [b'lia', b'Limba, West-Central'], [b'lib', b'Likum'], [b'lic', b'Hlai'], [b'lid', b'Nyindrou'], [b'lie', b'Likila'], [b'lif', b'Limbu'], [b'lig', b'Ligbi'], [b'lih', b'Lihir'], [b'lii', b'Lingkhim'], [b'lij', b'Ligurian'], [b'lik', b'Lika'], [b'lil', b'Lillooet'], [b'lim', b'Limburgan'], [b'lin', b'Lingala'], [b'lio', b'Liki'], [b'lip', b'Sekpele'], [b'liq', b'Libido'], [b'lir', b'English, Liberian'], [b'lis', b'Lisu'], [b'lit', b'Lithuanian'], [b'liu', b'Logorik'], [b'liv', b'Liv'], [b'liw', b'Col'], [b'lix', b'Liabuku'], [b'liy', b'Banda-Bambari'], [b'liz', b'Libinza'], [b'lja', b'Golpa'], [b'lje', b'Rampi'], [b'lji', b'Laiyolo'], [b'ljl', b"Li'o"], [b'ljp', b'Lampung Api'], [b'ljw', b'Yirandali'], [b'ljx', b'Yuru'], [b'lka', b'Lakalei'], [b'lkb', b'Kabras'], [b'lkc', b'Kucong'], [b'lkd', 'Lakond\xea'], [b'lke', b'Kenyi'], [b'lkh', b'Lakha'], [b'lki', b'Laki'], [b'lkj', b'Remun'], [b'lkl', b'Laeko-Libuat'], [b'lkm', b'Kalaamaya'], [b'lkn', b'Lakon'], [b'lko', b'Khayo'], [b'lkr', 'P\xe4ri'], [b'lks', b'Kisa'], [b'lkt', b'Lakota'], [b'lku', b'Kungkari'], [b'lky', b'Lokoya'], [b'lla', b'Lala-Roba'], [b'llb', b'Lolo'], [b'llc', b'Lele (Guinea)'], [b'lld', b'Ladin'], [b'lle', b'Lele (Papua New Guinea)'], [b'llf', b'Hermit'], [b'llg', b'Lole'], [b'llh', b'Lamu'], [b'lli', b'Teke-Laali'], [b'llj', b'Ladji Ladji'], [b'llk', b'Lelak'], [b'lll', b'Lilau'], [b'llm', b'Lasalimu'], [b'lln', b'Lele (Chad)'], [b'llo', b'Khlor'], [b'llp', b'Efate, North'], [b'llq', b'Lolak'], [b'lls', b'Lithuanian Sign Language'], [b'llu', b'Lau'], [b'llx', b'Lauan'], [b'lma', b'Limba, East'], [b'lmb', b'Merei'], [b'lmc', b'Limilngan'], [b'lmd', b'Lumun'], [b'lme', 'P\xe9v\xe9'], [b'lmf', b'Lembata, South'], [b'lmg', b'Lamogai'], [b'lmh', b'Lambichhong'], [b'lmi', b'Lombi'], [b'lmj', b'Lembata, West'], [b'lmk', b'Lamkang'], [b'lml', b'Hano'], [b'lmm', b'Lamam'], [b'lmn', b'Lambadi'], [b'lmo', b'Lombard'], [b'lmp', b'Limbum'], [b'lmq', b'Lamatuka'], [b'lmr', b'Lamalera'], [b'lmu', b'Lamenu'], [b'lmv', b'Lomaiviti'], [b'lmw', b'Miwok, Lake'], [b'lmx', b'Laimbue'], [b'lmy', b'Lamboya'], [b'lmz', b'Lumbee'], [b'lna', b'Langbashe'], [b'lnb', b'Mbalanhu'], [b'lnd', b'Lundayeh'], [b'lng', b'Langobardic'], [b'lnh', b'Lanoh'], [b'lni', b"Daantanai'"], [b'lnj', b'Leningitij'], [b'lnl', b'Banda, South Central'], [b'lnm', b'Langam'], [b'lnn', b'Lorediakarkar'], [b'lno', b'Lango (Sudan)'], [b'lns', b"Lamnso'"], [b'lnu', b'Longuda'], [b'lnw', b'Lanima'], [b'lnz', b'Lonzo'], [b'loa', b'Loloda'], [b'lob', b'Lobi'], [b'loc', b'Inonhan'], [b'loe', b'Saluan'], [b'lof', b'Logol'], [b'log', b'Logo'], [b'loh', b'Narim'], [b'loi', "Loma (C\xf4te d'Ivoire)"], [b'loj', b'Lou'], [b'lok', b'Loko'], [b'lol', b'Mongo'], [b'lom', b'Loma (Liberia)'], [b'lon', b'Lomwe, Malawi'], [b'loo', b'Lombo'], [b'lop', b'Lopa'], [b'loq', b'Lobala'], [b'lor', 'T\xe9\xe9n'], [b'los', b'Loniu'], [b'lot', b'Otuho'], [b'lou', b'Creole French, Louisiana'], [b'lov', b'Lopi'], [b'low', b'Lobu, Tampias'], [b'lox', b'Loun'], [b'loy', b'Loke'], [b'loz', b'Lozi'], [b'lpa', b'Lelepa'], [b'lpe', b'Lepki'], [b'lpn', b'Naga, Long Phuri'], [b'lpo', b'Lipo'], [b'lpx', b'Lopit'], [b'lra', b"Rara Bakati'"], [b'lrc', b'Luri, Northern'], [b'lre', b'Laurentian'], [b'lrg', b'Laragia'], [b'lri', b'Marachi'], [b'lrk', b'Loarki'], [b'lrl', b'Lari'], [b'lrm', b'Marama'], [b'lrn', b'Lorang'], [b'lro', b'Laro'], [b'lrr', b'Yamphu, Southern'], [b'lrt', b'Malay, Larantuka'], [b'lrv', b'Larevat'], [b'lrz', b'Lemerig'], [b'lsa', b'Lasgerdi'], [b'lsd', b'Lishana Deni'], [b'lse', b'Lusengo'], [b'lsg', b'Lyons Sign Language'], [b'lsh', b'Lish'], [b'lsi', b'Lashi'], [b'lsl', b'Latvian Sign Language'], [b'lsm', b'Saamia'], [b'lso', b'Laos Sign Language'], [b'lsp', b'Panamanian Sign Language'], [b'lsr', b'Aruop'], [b'lss', b'Lasi'], [b'lst', b'Trinidad and Tobago Sign Language'], [b'lsy', b'Mauritian Sign Language'], [b'ltc', b'Chinese, Late Middle'], [b'ltg', b'Latgalian'], [b'lti', b'Leti (Indonesia)'], [b'ltn', 'Latund\xea'], [b'lto', b'Tsotso'], [b'lts', b'Tachoni'], [b'ltu', b'Latu'], [b'ltz', b'Luxembourgish'], [b'lua', b'Luba-Lulua'], [b'lub', b'Luba-Katanga'], [b'luc', b'Aringa'], [b'lud', b'Ludian'], [b'lue', b'Luvale'], [b'luf', b'Laua'], [b'lug', b'Ganda'], [b'lui', b'Luiseno'], [b'luj', b'Luna'], [b'luk', b'Lunanakha'], [b'lul', b"Olu'bo"], [b'lum', b'Luimbi'], [b'lun', b'Lunda'], [b'luo', b'Luo (Kenya and Tanzania)'], [b'lup', b'Lumbu'], [b'luq', b'Lucumi'], [b'lur', b'Laura'], [b'lus', b'Lushai'], [b'lut', b'Lushootseed'], [b'luu', b'Lumba-Yakkha'], [b'luv', b'Luwati'], [b'luw', b'Luo (Cameroon)'], [b'luy', b'Luyia'], [b'luz', b'Luri, Southern'], [b'lva', b"Maku'a"], [b'lvk', b'Lavukaleve'], [b'lvs', b'Latvian, Standard'], [b'lvu', b'Levuka'], [b'lwa', b'Lwalu'], [b'lwe', b'Lewo Eleng'], [b'lwg', b'Wanga'], [b'lwh', b'Lachi, White'], [b'lwl', b'Lawa, Eastern'], [b'lwm', b'Laomian'], [b'lwo', b'Luwo'], [b'lwt', b'Lewotobi'], [b'lwu', b'Lawu'], [b'lww', b'Lewo'], [b'lya', b'Layakha'], [b'lyg', b'Lyngngam'], [b'lyn', b'Luyana'], [b'lzh', b'Chinese, Literary'], [b'lzl', b'Litzlitz'], [b'lzn', b'Naga, Leinong'], [b'lzz', b'Laz'], [b'maa', 'Mazatec, San Jer\xf3nimo Tec\xf3atl'], [b'mab', b'Mixtec, Yutanduchi'], [b'mad', b'Madurese'], [b'mae', b'Bo-Rukul'], [b'maf', b'Mafa'], [b'mag', b'Magahi'], [b'mah', b'Marshallese'], [b'mai', b'Maithili'], [b'maj', 'Mazatec, Jalapa De D\xedaz'], [b'mak', b'Makasar'], [b'mal', b'Malayalam'], [b'mam', b'Mam'], [b'man', b'Mandingo'], [b'maq', 'Mazatec, Chiquihuitl\xe1n'], [b'mar', b'Marathi'], [b'mas', b'Masai'], [b'mat', b'Matlatzinca, San Francisco'], [b'mau', b'Mazatec, Huautla'], [b'mav', 'Sater\xe9-Maw\xe9'], [b'maw', b'Mampruli'], [b'max', b'Malay, North Moluccan'], [b'maz', b'Mazahua, Central'], [b'mba', b'Higaonon'], [b'mbb', b'Manobo, Western Bukidnon'], [b'mbc', b'Macushi'], [b'mbd', b'Manobo, Dibabawon'], [b'mbe', b'Molale'], [b'mbf', b'Malay, Baba'], [b'mbh', b'Mangseng'], [b'mbi', b'Manobo, Ilianen'], [b'mbj', 'Nad\xebb'], [b'mbk', b'Malol'], [b'mbl', 'Maxakal\xed'], [b'mbm', b'Ombamba'], [b'mbn', 'Macagu\xe1n'], [b'mbo', b'Mbo (Cameroon)'], [b'mbp', b'Malayo'], [b'mbq', b'Maisin'], [b'mbr', 'Nukak Mak\xfa'], [b'mbs', b'Manobo, Sarangani'], [b'mbt', b'Manobo, Matigsalug'], [b'mbu', b'Mbula-Bwazza'], [b'mbv', b'Mbulungish'], [b'mbw', b'Maring'], [b'mbx', b'Mari (East Sepik Province)'], [b'mby', b'Memoni'], [b'mbz', b'Mixtec, Amoltepec'], [b'mca', b'Maca'], [b'mcb', b'Machiguenga'], [b'mcc', b'Bitur'], [b'mcd', b'Sharanahua'], [b'mce', b'Mixtec, Itundujia'], [b'mcf', 'Mats\xe9s'], [b'mcg', b'Mapoyo'], [b'mch', b'Maquiritari'], [b'mci', b'Mese'], [b'mcj', b'Mvanip'], [b'mck', b'Mbunda'], [b'mcl', b'Macaguaje'], [b'mcm', b'Creole Portuguese, Malaccan'], [b'mcn', b'Masana'], [b'mco', 'Mixe, Coatl\xe1n'], [b'mcp', b'Makaa'], [b'mcq', b'Ese'], [b'mcr', b'Menya'], [b'mcs', b'Mambai'], [b'mct', b'Mengisa'], [b'mcu', b'Mambila, Cameroon'], [b'mcv', b'Minanibai'], [b'mcw', b'Mawa (Chad)'], [b'mcx', b'Mpiemo'], [b'mcy', b'Watut, South'], [b'mcz', b'Mawan'], [b'mda', b'Mada (Nigeria)'], [b'mdb', b'Morigi'], [b'mdc', b'Male (Papua New Guinea)'], [b'mdd', b'Mbum'], [b'mde', b'Maba (Chad)'], [b'mdf', b'Moksha'], [b'mdg', b'Massalat'], [b'mdh', b'Maguindanaon'], [b'mdi', b'Mamvu'], [b'mdj', b'Mangbetu'], [b'mdk', b'Mangbutu'], [b'mdl', b'Maltese Sign Language'], [b'mdm', b'Mayogo'], [b'mdn', b'Mbati'], [b'mdp', b'Mbala'], [b'mdq', b'Mbole'], [b'mdr', b'Mandar'], [b'mds', b'Maria (Papua New Guinea)'], [b'mdt', b'Mbere'], [b'mdu', b'Mboko'], [b'mdv', 'Mixtec, Santa Luc\xeda Monteverde'], [b'mdw', b'Mbosi'], [b'mdx', b'Dizin'], [b'mdy', b'Male (Ethiopia)'], [b'mdz', 'Suru\xed Do Par\xe1'], [b'mea', b'Menka'], [b'meb', b'Ikobi'], [b'mec', b'Mara'], [b'med', b'Melpa'], [b'mee', b'Mengen'], [b'mef', b'Megam'], [b'meh', b'Mixtec, Southwestern Tlaxiaco'], [b'mei', b'Midob'], [b'mej', b'Meyah'], [b'mek', b'Mekeo'], [b'mel', b'Melanau, Central'], [b'mem', b'Mangala'], [b'men', b'Mende (Sierra Leone)'], [b'meo', b'Malay, Kedah'], [b'mep', b'Miriwung'], [b'meq', b'Merey'], [b'mer', b'Meru'], [b'mes', b'Masmaje'], [b'met', b'Mato'], [b'meu', b'Motu'], [b'mev', b'Mano'], [b'mew', b'Maaka'], [b'mey', b'Hassaniyya'], [b'mez', b'Menominee'], [b'mfa', b'Malay, Pattani'], [b'mfb', b'Bangka'], [b'mfc', b'Mba'], [b'mfd', b'Mendankwe-Nkwen'], [b'mfe', b'Morisyen'], [b'mff', b'Naki'], [b'mfg', b'Mogofin'], [b'mfh', b'Matal'], [b'mfi', b'Wandala'], [b'mfj', b'Mefele'], [b'mfk', b'Mofu, North'], [b'mfl', b'Putai'], [b'mfm', b'Marghi South'], [b'mfn', b'Mbembe, Cross River'], [b'mfo', b'Mbe'], [b'mfp', b'Malay, Makassar'], [b'mfq', b'Moba'], [b'mfr', b'Marithiel'], [b'mfs', b'Mexican Sign Language'], [b'mft', b'Mokerang'], [b'mfu', b'Mbwela'], [b'mfv', b'Mandjak'], [b'mfw', b'Mulaha'], [b'mfx', b'Melo'], [b'mfy', b'Mayo'], [b'mfz', b'Mabaan'], [b'mga', b'Irish, Middle (900-1200)'], [b'mgb', b'Mararit'], [b'mgc', b'Morokodo'], [b'mgd', b'Moru'], [b'mge', b'Mango'], [b'mgf', b'Maklew'], [b'mgg', b'Mpumpong'], [b'mgh', b'Makhuwa-Meetto'], [b'mgi', b'Lijili'], [b'mgj', b'Abureni'], [b'mgk', b'Mawes'], [b'mgl', b'Maleu-Kilenge'], [b'mgm', b'Mambae'], [b'mgn', b'Mbangi'], [b'mgo', b"Meta'"], [b'mgp', b'Magar, Eastern'], [b'mgq', b'Malila'], [b'mgr', b'Mambwe-Lungu'], [b'mgs', b'Manda (Tanzania)'], [b'mgt', b'Mongol'], [b'mgu', b'Mailu'], [b'mgv', b'Matengo'], [b'mgw', b'Matumbi'], [b'mgy', b'Mbunga'], [b'mgz', b'Mbugwe'], [b'mha', b'Manda (India)'], [b'mhb', b'Mahongwe'], [b'mhc', b'Mocho'], [b'mhd', b'Mbugu'], [b'mhe', b'Besisi'], [b'mhf', b'Mamaa'], [b'mhg', b'Margu'], [b'mhh', b'Maskoy Pidgin'], [b'mhi', b"Ma'di"], [b'mhj', b'Mogholi'], [b'mhk', b'Mungaka'], [b'mhl', b'Mauwake'], [b'mhm', b'Makhuwa-Moniga'], [b'mhn', 'M\xf3cheno'], [b'mho', b'Mashi (Zambia)'], [b'mhp', b'Malay, Balinese'], [b'mhq', b'Mandan'], [b'mhr', b'Mari, Eastern'], [b'mhs', b'Buru (Indonesia)'], [b'mht', b'Mandahuaca'], [b'mhu', b'Digaro-Mishmi'], [b'mhw', b'Mbukushu'], [b'mhx', b'Maru'], [b'mhy', b"Ma'anyan"], [b'mhz', b'Mor (Mor Islands)'], [b'mia', b'Miami'], [b'mib', 'Mixtec, Atatl\xe1huca'], [b'mic', b"Mi'kmaq"], [b'mid', b'Mandaic'], [b'mie', b'Mixtec, Ocotepec'], [b'mif', b'Mofu-Gudur'], [b'mig', b'Mixtec, San Miguel El Grande'], [b'mih', b'Mixtec, Chayuco'], [b'mii', 'Mixtec, Chigmecatitl\xe1n'], [b'mij', b'Abar'], [b'mik', b'Mikasuki'], [b'mil', 'Mixtec, Pe\xf1oles'], [b'mim', b'Mixtec, Alacatlatzala'], [b'min', b'Minangkabau'], [b'mio', b'Mixtec, Pinotepa Nacional'], [b'mip', b'Mixtec, Apasco-Apoala'], [b'miq', 'M\xedskito'], [b'mir', b'Mixe, Isthmus'], [b'mis', b'Uncoded languages'], [b'mit', b'Mixtec, Southern Puebla'], [b'miu', b'Mixtec, Cacaloxtepec'], [b'miw', b'Akoye'], [b'mix', b'Mixtec, Mixtepec'], [b'miy', b'Mixtec, Ayutla'], [b'miz', b'Mixtec, Coatzospan'], [b'mjc', b'Mixtec, San Juan Colorado'], [b'mjd', b'Maidu, Northwest'], [b'mje', b'Muskum'], [b'mjg', b'Tu'], [b'mjh', b'Mwera (Nyasa)'], [b'mji', b'Kim Mun'], [b'mjj', b'Mawak'], [b'mjk', b'Matukar'], [b'mjl', b'Mandeali'], [b'mjm', b'Medebur'], [b'mjn', b'Ma (Papua New Guinea)'], [b'mjo', b'Malankuravan'], [b'mjp', b'Malapandaram'], [b'mjq', b'Malaryan'], [b'mjr', b'Malavedan'], [b'mjs', b'Miship'], [b'mjt', b'Sauria Paharia'], [b'mju', b'Manna-Dora'], [b'mjv', b'Mannan'], [b'mjw', b'Karbi'], [b'mjx', b'Mahali'], [b'mjy', b'Mahican'], [b'mjz', b'Majhi'], [b'mka', b'Mbre'], [b'mkb', b'Mal Paharia'], [b'mkc', b'Siliput'], [b'mkd', b'Macedonian'], [b'mke', b'Mawchi'], [b'mkf', b'Miya'], [b'mkg', b'Mak (China)'], [b'mki', b'Dhatki'], [b'mkj', b'Mokilese'], [b'mkk', b'Byep'], [b'mkl', b'Mokole'], [b'mkm', b'Moklen'], [b'mkn', b'Malay, Kupang'], [b'mko', b'Mingang Doso'], [b'mkp', b'Moikodi'], [b'mkq', b'Miwok, Bay'], [b'mkr', b'Malas'], [b'mks', b'Mixtec, Silacayoapan'], [b'mkt', b'Vamale'], [b'mku', b'Maninka, Konyanka'], [b'mkv', b'Mafea'], [b'mkw', b'Kituba (Congo)'], [b'mkx', b'Manobo, Kinamiging'], [b'mky', b'Makian, East'], [b'mkz', b'Makasae'], [b'mla', b'Malo'], [b'mlb', b'Mbule'], [b'mlc', b'Cao Lan'], [b'mle', b'Manambu'], [b'mlf', b'Mal'], [b'mlg', b'Malagasy'], [b'mlh', b'Mape'], [b'mli', b'Malimpung'], [b'mlj', b'Miltu'], [b'mlk', b'Ilwana'], [b'mll', b'Malua Bay'], [b'mlm', b'Mulam'], [b'mln', b'Malango'], [b'mlo', b'Mlomp'], [b'mlp', b'Bargam'], [b'mlq', b'Maninkakan, Western'], [b'mlr', b'Vame'], [b'mls', b'Masalit'], [b'mlt', b'Maltese'], [b'mlu', b"To'abaita"], [b'mlv', b'Motlav'], [b'mlw', b'Moloko'], [b'mlx', b'Malfaxal'], [b'mlz', b'Malaynon'], [b'mma', b'Mama'], [b'mmb', b'Momina'], [b'mmc', 'Mazahua, Michoac\xe1n'], [b'mmd', b'Maonan'], [b'mme', b'Mae'], [b'mmf', b'Mundat'], [b'mmg', b'Ambrym, North'], [b'mmh', 'Mehin\xe1ku'], [b'mmi', b'Musar'], [b'mmj', b'Majhwar'], [b'mmk', b'Mukha-Dora'], [b'mml', b'Man Met'], [b'mmm', b'Maii'], [b'mmn', b'Mamanwa'], [b'mmo', b'Buang, Mangga'], [b'mmp', b'Siawi'], [b'mmq', b'Musak'], [b'mmr', b'Miao, Western Xiangxi'], [b'mmt', b'Malalamai'], [b'mmu', b'Mmaala'], [b'mmv', b'Miriti'], [b'mmw', b'Emae'], [b'mmx', b'Madak'], [b'mmy', b'Migaama'], [b'mmz', b'Mabaale'], [b'mna', b'Mbula'], [b'mnb', b'Muna'], [b'mnc', b'Manchu'], [b'mnd', 'Mond\xe9'], [b'mne', b'Naba'], [b'mnf', b'Mundani'], [b'mng', b'Mnong, Eastern'], [b'mnh', b'Mono (Democratic Republic of Congo)'], [b'mni', b'Manipuri'], [b'mnj', b'Munji'], [b'mnk', b'Mandinka'], [b'mnl', b'Tiale'], [b'mnm', b'Mapena'], [b'mnn', b'Mnong, Southern'], [b'mnp', b'Chinese, Min Bei'], [b'mnq', b'Minriq'], [b'mnr', b'Mono (USA)'], [b'mns', b'Mansi'], [b'mnu', b'Mer'], [b'mnv', b'Rennell-Bellona'], [b'mnw', b'Mon'], [b'mnx', b'Manikion'], [b'mny', b'Manyawa'], [b'mnz', b'Moni'], [b'moa', b'Mwan'], [b'moc', 'Mocov\xed'], [b'mod', b'Mobilian'], [b'moe', b'Montagnais'], [b'mog', b'Mongondow'], [b'moh', b'Mohawk'], [b'moi', b'Mboi'], [b'moj', b'Monzombo'], [b'mok', b'Morori'], [b'mom', b'Mangue'], [b'mon', b'Mongolian'], [b'moo', b'Monom'], [b'mop', 'Mop\xe1n Maya'], [b'moq', b'Mor (Bomberai Peninsula)'], [b'mor', b'Moro'], [b'mos', b'Mossi'], [b'mot', 'Bar\xed'], [b'mou', b'Mogum'], [b'mov', b'Mohave'], [b'mow', b'Moi (Congo)'], [b'mox', b'Molima'], [b'moy', b'Shekkacho'], [b'moz', b'Mukulu'], [b'mpa', b'Mpoto'], [b'mpb', b'Mullukmulluk'], [b'mpc', b'Mangarayi'], [b'mpd', b'Machinere'], [b'mpe', b'Majang'], [b'mpg', b'Marba'], [b'mph', b'Maung'], [b'mpi', b'Mpade'], [b'mpj', b'Martu Wangka'], [b'mpk', b'Mbara (Chad)'], [b'mpl', b'Watut, Middle'], [b'mpm', 'Mixtec, Yosond\xfaa'], [b'mpn', b'Mindiri'], [b'mpo', b'Miu'], [b'mpp', b'Migabac'], [b'mpq', 'Mat\xeds'], [b'mpr', b'Vangunu'], [b'mps', b'Dadibi'], [b'mpt', b'Mian'], [b'mpu', 'Makur\xe1p'], [b'mpv', b'Mungkip'], [b'mpw', b'Mapidian'], [b'mpx', b'Misima-Panaeati'], [b'mpy', b'Mapia'], [b'mpz', b'Mpi'], [b'mqa', b'Maba (Indonesia)'], [b'mqb', b'Mbuko'], [b'mqc', b'Mangole'], [b'mqe', b'Matepi'], [b'mqf', b'Momuna'], [b'mqg', b'Malay, Kota Bangun Kutai'], [b'mqh', b'Mixtec, Tlazoyaltepec'], [b'mqi', b'Mariri'], [b'mqj', b'Mamasa'], [b'mqk', b'Manobo, Rajah Kabunsuwan'], [b'mql', b'Mbelime'], [b'mqm', b'Marquesan, South'], [b'mqn', b'Moronene'], [b'mqo', b'Modole'], [b'mqp', b'Manipa'], [b'mqq', b'Minokok'], [b'mqr', b'Mander'], [b'mqs', b'Makian, West'], [b'mqt', b'Mok'], [b'mqu', b'Mandari'], [b'mqv', b'Mosimo'], [b'mqw', b'Murupi'], [b'mqx', b'Mamuju'], [b'mqy', b'Manggarai'], [b'mqz', b'Pano'], [b'mra', b'Mlabri'], [b'mrb', b'Marino'], [b'mrc', b'Maricopa'], [b'mrd', b'Magar, Western'], [b'mre', b"Martha's Vineyard Sign Language"], [b'mrf', b'Elseng'], [b'mrg', b'Mising'], [b'mrh', b'Chin, Mara'], [b'mri', b'Maori'], [b'mrj', b'Mari, Western'], [b'mrk', b'Hmwaveke'], [b'mrl', b'Mortlockese'], [b'mrm', b'Merlav'], [b'mrn', b'Cheke Holo'], [b'mro', b'Mru'], [b'mrp', b'Morouas'], [b'mrq', b'Marquesan, North'], [b'mrr', b'Maria (India)'], [b'mrs', b'Maragus'], [b'mrt', b'Marghi Central'], [b'mru', b'Mono (Cameroon)'], [b'mrv', b'Mangareva'], [b'mrw', b'Maranao'], [b'mrx', b'Maremgi'], [b'mry', b'Mandaya'], [b'mrz', b'Marind'], [b'msa', b'Malay (macrolanguage)'], [b'msb', b'Masbatenyo'], [b'msc', b'Maninka, Sankaran'], [b'msd', b'Yucatec Maya Sign Language'], [b'mse', b'Musey'], [b'msf', b'Mekwei'], [b'msg', b'Moraid'], [b'msh', b'Malagasy, Masikoro'], [b'msi', b'Malay, Sabah'], [b'msj', b'Ma (Democratic Republic of Congo)'], [b'msk', b'Mansaka'], [b'msl', b'Molof'], [b'msm', b'Manobo, Agusan'], [b'msn', 'Vur\xebs'], [b'mso', b'Mombum'], [b'msp', 'Maritsau\xe1'], [b'msq', b'Caac'], [b'msr', b'Mongolian Sign Language'], [b'mss', b'Masela, West'], [b'msu', b'Musom'], [b'msv', b'Maslam'], [b'msw', b'Mansoanka'], [b'msx', b'Moresada'], [b'msy', b'Aruamu'], [b'msz', b'Momare'], [b'mta', b'Manobo, Cotabato'], [b'mtb', b'Anyin Morofo'], [b'mtc', b'Munit'], [b'mtd', b'Mualang'], [b'mte', b'Mono (Solomon Islands)'], [b'mtf', b'Murik (Papua New Guinea)'], [b'mtg', b'Una'], [b'mth', b'Munggui'], [b'mti', b'Maiwa (Papua New Guinea)'], [b'mtj', b'Moskona'], [b'mtk', b"Mbe'"], [b'mtl', b'Montol'], [b'mtm', b'Mator'], [b'mtn', b'Matagalpa'], [b'mto', b'Mixe, Totontepec'], [b'mtp', 'Wich\xed Lhamt\xe9s Nocten'], [b'mtq', b'Muong'], [b'mtr', b'Mewari'], [b'mts', b'Yora'], [b'mtt', b'Mota'], [b'mtu', b'Mixtec, Tututepec'], [b'mtv', b"Asaro'o"], [b'mtw', b'Binukidnon, Southern'], [b'mtx', 'Mixtec, Tida\xe1'], [b'mty', b'Nabi'], [b'mua', b'Mundang'], [b'mub', b'Mubi'], [b'muc', b'Ajumbu'], [b'mud', b'Aleut, Mednyj'], [b'mue', b'Media Lengua'], [b'mug', b'Musgu'], [b'muh', 'M\xfcnd\xfc'], [b'mui', b'Musi'], [b'muj', b'Mabire'], [b'muk', b'Mugom'], [b'mul', b'Multiple languages'], [b'mum', b'Maiwala'], [b'muo', b'Nyong'], [b'mup', b'Malvi'], [b'muq', b'Miao, Eastern Xiangxi'], [b'mur', b'Murle'], [b'mus', b'Creek'], [b'mut', b'Muria, Western'], [b'muu', b'Yaaku'], [b'muv', b'Muthuvan'], [b'mux', b'Bo-Ung'], [b'muy', b'Muyang'], [b'muz', b'Mursi'], [b'mva', b'Manam'], [b'mvb', b'Mattole'], [b'mvd', b'Mamboru'], [b'mve', b'Marwari (Pakistan)'], [b'mvf', b'Mongolian, Peripheral'], [b'mvg', 'Mixtec, Yucua\xf1e'], [b'mvh', b'Mulgi'], [b'mvi', b'Miyako'], [b'mvk', b'Mekmek'], [b'mvl', b'Mbara (Australia)'], [b'mvm', b'Muya'], [b'mvn', b'Minaveha'], [b'mvo', b'Marovo'], [b'mvp', b'Duri'], [b'mvq', b'Moere'], [b'mvr', b'Marau'], [b'mvs', b'Massep'], [b'mvt', b'Mpotovoro'], [b'mvu', b'Marfa'], [b'mvv', b'Murut, Tagal'], [b'mvw', b'Machinga'], [b'mvx', b'Meoswar'], [b'mvy', b'Kohistani, Indus'], [b'mvz', b'Mesqan'], [b'mwa', b'Mwatebu'], [b'mwb', b'Juwal'], [b'mwc', b'Are'], [b'mwe', b'Mwera (Chimwera)'], [b'mwf', b'Murrinh-Patha'], [b'mwg', b'Aiklep'], [b'mwh', b'Mouk-Aria'], [b'mwi', b'Labo'], [b'mwj', b'Maligo'], [b'mwk', b'Maninkakan, Kita'], [b'mwl', b'Mirandese'], [b'mwm', b'Sar'], [b'mwn', b'Nyamwanga'], [b'mwo', b'Maewo, Central'], [b'mwp', b'Kala Lagaw Ya'], [b'mwq', 'Chin, M\xfcn'], [b'mwr', b'Marwari'], [b'mws', b'Mwimbi-Muthambi'], [b'mwt', b'Moken'], [b'mwu', b'Mittu'], [b'mwv', b'Mentawai'], [b'mww', b'Hmong Daw'], [b'mwx', b'Mediak'], [b'mwy', b'Mosiro'], [b'mwz', b'Moingi'], [b'mxa', b'Mixtec, Northwest Oaxaca'], [b'mxb', 'Mixtec, Tezoatl\xe1n'], [b'mxc', b'Manyika'], [b'mxd', b'Modang'], [b'mxe', b'Mele-Fila'], [b'mxf', b'Malgbe'], [b'mxg', b'Mbangala'], [b'mxh', b'Mvuba'], [b'mxi', b'Mozarabic'], [b'mxj', b'Miju-Mishmi'], [b'mxk', b'Monumbo'], [b'mxl', b'Gbe, Maxi'], [b'mxm', b'Meramera'], [b'mxn', b'Moi (Indonesia)'], [b'mxo', b'Mbowe'], [b'mxp', b'Mixe, Tlahuitoltepec'], [b'mxq', b'Mixe, Juquila'], [b'mxr', b'Murik (Malaysia)'], [b'mxs', b'Mixtec, Huitepec'], [b'mxt', b'Mixtec, Jamiltepec'], [b'mxu', b'Mada (Cameroon)'], [b'mxv', 'Mixtec, Metlat\xf3noc'], [b'mxw', b'Namo'], [b'mxx', b'Mahou'], [b'mxy', 'Mixtec, Southeastern Nochixtl\xe1n'], [b'mxz', b'Masela, Central'], [b'mya', b'Burmese'], [b'myb', b'Mbay'], [b'myc', b'Mayeka'], [b'myd', b'Maramba'], [b'mye', b'Myene'], [b'myf', b'Bambassi'], [b'myg', b'Manta'], [b'myh', b'Makah'], [b'myi', b'Mina (India)'], [b'myj', b'Mangayat'], [b'myk', b'Senoufo, Mamara'], [b'myl', b'Moma'], [b'mym', b"Me'en"], [b'myo', b'Anfillo'], [b'myp', 'Pirah\xe3'], [b'myr', b'Muniche'], [b'mys', b'Mesmes'], [b'myu', 'Munduruk\xfa'], [b'myv', b'Erzya'], [b'myw', b'Muyuw'], [b'myx', b'Masaaba'], [b'myy', b'Macuna'], [b'myz', b'Mandaic, Classical'], [b'mza', 'Mixtec, Santa Mar\xeda Zacatepec'], [b'mzb', b'Tumzabt'], [b'mzc', b'Madagascar Sign Language'], [b'mzd', b'Malimba'], [b'mze', b'Morawa'], [b'mzg', b'Monastic Sign Language'], [b'mzh', 'Wich\xed Lhamt\xe9s G\xfcisnay'], [b'mzi', 'Mazatec, Ixcatl\xe1n'], [b'mzj', b'Manya'], [b'mzk', b'Mambila, Nigeria'], [b'mzl', 'Mixe, Mazatl\xe1n'], [b'mzm', b'Mumuye'], [b'mzn', b'Mazanderani'], [b'mzo', b'Matipuhy'], [b'mzp', b'Movima'], [b'mzq', b'Mori Atas'], [b'mzr', 'Mar\xfabo'], [b'mzs', b'Macanese'], [b'mzt', b'Mintil'], [b'mzu', b'Inapang'], [b'mzv', b'Manza'], [b'mzw', b'Deg'], [b'mzx', b'Mawayana'], [b'mzy', b'Mozambican Sign Language'], [b'mzz', b'Maiadomu'], [b'naa', b'Namla'], [b'nab', 'Nambiku\xe1ra, Southern'], [b'nac', b'Narak'], [b'nad', b'Nijadali'], [b'nae', b"Naka'ela"], [b'naf', b'Nabak'], [b'nag', b'Naga Pidgin'], [b'naj', b'Nalu'], [b'nak', b'Nakanai'], [b'nal', b'Nalik'], [b'nam', b"Ngan'gityemerri"], [b'nan', b'Chinese, Min Nan'], [b'nao', b'Naaba'], [b'nap', b'Neapolitan'], [b'naq', b'Nama (Namibia)'], [b'nar', b'Iguta'], [b'nas', b'Naasioi'], [b'nat', b'Hungworo'], [b'nau', b'Nauru'], [b'nav', b'Navajo'], [b'naw', b'Nawuri'], [b'nax', b'Nakwi'], [b'nay', b'Narrinyeri'], [b'naz', b'Nahuatl, Coatepec'], [b'nba', b'Nyemba'], [b'nbb', b'Ndoe'], [b'nbc', b'Naga, Chang'], [b'nbd', b'Ngbinda'], [b'nbe', b'Naga, Konyak'], [b'nbg', b'Nagarchal'], [b'nbh', b'Ngamo'], [b'nbi', b'Naga, Mao'], [b'nbj', b'Ngarinman'], [b'nbk', b'Nake'], [b'nbl', b'Ndebele, South'], [b'nbm', b"Ngbaka Ma'bo"], [b'nbn', b'Kuri'], [b'nbo', b'Nkukoli'], [b'nbp', b'Nnam'], [b'nbq', b'Nggem'], [b'nbr', b'Numana-Nunku-Gbantu-Numbu'], [b'nbs', b'Namibian Sign Language'], [b'nbt', b'Na'], [b'nbu', b'Naga, Rongmei'], [b'nbv', b'Ngamambo'], [b'nbw', b'Ngbandi, Southern'], [b'nby', b'Ningera'], [b'nca', b'Iyo'], [b'ncb', b'Nicobarese, Central'], [b'ncc', b'Ponam'], [b'ncd', b'Nachering'], [b'nce', b'Yale'], [b'ncf', b'Notsi'], [b'ncg', b"Nisga'a"], [b'nch', b'Nahuatl, Central Huasteca'], [b'nci', b'Nahuatl, Classical'], [b'ncj', b'Nahuatl, Northern Puebla'], [b'nck', b'Nakara'], [b'ncl', 'Nahuatl, Michoac\xe1n'], [b'ncm', b'Nambo'], [b'ncn', b'Nauna'], [b'nco', b'Sibe'], [b'ncp', b'Ndaktup'], [b'ncr', b'Ncane'], [b'ncs', b'Nicaraguan Sign Language'], [b'nct', b'Naga, Chothe'], [b'ncu', b'Chumburung'], [b'ncx', b'Nahuatl, Central Puebla'], [b'ncz', b'Natchez'], [b'nda', b'Ndasa'], [b'ndb', b'Kenswei Nsei'], [b'ndc', b'Ndau'], [b'ndd', b'Nde-Nsele-Nta'], [b'nde', b'Ndebele, North'], [b'ndf', b'Nadruvian'], [b'ndg', b'Ndengereko'], [b'ndh', b'Ndali'], [b'ndi', b'Samba Leko'], [b'ndj', b'Ndamba'], [b'ndk', b'Ndaka'], [b'ndl', b'Ndolo'], [b'ndm', b'Ndam'], [b'ndn', b'Ngundi'], [b'ndo', b'Ndonga'], [b'ndp', b'Ndo'], [b'ndq', b'Ndombe'], [b'ndr', b'Ndoola'], [b'nds', b'German, Low'], [b'ndt', b'Ndunga'], [b'ndu', b'Dugun'], [b'ndv', b'Ndut'], [b'ndw', b'Ndobo'], [b'ndx', b'Nduga'], [b'ndy', b'Lutos'], [b'ndz', b'Ndogo'], [b'nea', b"Ngad'a, Eastern"], [b'neb', "Toura (C\xf4te d'Ivoire)"], [b'nec', b'Nedebang'], [b'ned', b'Nde-Gbite'], [b'nee', 'N\xeal\xeamwa-Nixumwak'], [b'nef', b'Nefamese'], [b'neg', b'Negidal'], [b'neh', b'Nyenkha'], [b'nei', b'Hittite, Neo-'], [b'nej', b'Neko'], [b'nek', b'Neku'], [b'nem', b'Nemi'], [b'nen', b'Nengone'], [b'neo', 'N\xe1-Meo'], [b'nep', b'Nepali (macrolanguage)'], [b'neq', b'Mixe, North Central'], [b'ner', b'Yahadian'], [b'nes', b'Kinnauri, Bhoti'], [b'net', b'Nete'], [b'neu', b'Neo'], [b'nev', b'Nyaheun'], [b'new', b'Newari'], [b'nex', b'Neme'], [b'ney', b'Neyo'], [b'nez', b'Nez Perce'], [b'nfa', b'Dhao'], [b'nfd', b'Ahwai'], [b'nfl', b'Ayiwo'], [b'nfr', b'Nafaanra'], [b'nfu', b'Mfumte'], [b'nga', b'Ngbaka'], [b'ngb', b'Ngbandi, Northern'], [b'ngc', b'Ngombe (Democratic Republic of Congo)'], [b'ngd', b'Ngando (Central African Republic)'], [b'nge', b'Ngemba'], [b'ngg', b'Ngbaka Manza'], [b'ngh', b'N/u'], [b'ngi', b'Ngizim'], [b'ngj', b'Ngie'], [b'ngk', b'Dalabon'], [b'ngl', b'Lomwe'], [b'ngm', b"Ngatik Men's Creole"], [b'ngn', b'Ngwo'], [b'ngo', b'Ngoni'], [b'ngp', b'Ngulu'], [b'ngq', b'Ngurimi'], [b'ngr', b'Engdewu'], [b'ngs', b'Gvoko'], [b'ngt', b'Ngeq'], [b'ngu', b'Nahuatl, Guerrero'], [b'ngv', b'Nagumi'], [b'ngw', b'Ngwaba'], [b'ngx', b'Nggwahyi'], [b'ngy', b'Tibea'], [b'ngz', b'Ngungwel'], [b'nha', b'Nhanda'], [b'nhb', b'Beng'], [b'nhc', b'Nahuatl, Tabasco'], [b'nhd', 'Chirip\xe1'], [b'nhe', b'Nahuatl, Eastern Huasteca'], [b'nhf', b'Nhuwala'], [b'nhg', b'Nahuatl, Tetelcingo'], [b'nhh', b'Nahari'], [b'nhi', 'Nahuatl, Zacatl\xe1n-Ahuacatl\xe1n-Tepetzintla'], [b'nhk', b'Nahuatl, Isthmus-Cosoleacaque'], [b'nhm', b'Nahuatl, Morelos'], [b'nhn', b'Nahuatl, Central'], [b'nho', b'Takuu'], [b'nhp', b'Nahuatl, Isthmus-Pajapan'], [b'nhq', b'Nahuatl, Huaxcaleca'], [b'nhr', b'Naro'], [b'nht', b'Nahuatl, Ometepec'], [b'nhu', b'Noone'], [b'nhv', b'Nahuatl, Temascaltepec'], [b'nhw', b'Nahuatl, Western Huasteca'], [b'nhx', b'Nahuatl, Isthmus-Mecayapan'], [b'nhy', b'Nahuatl, Northern Oaxaca'], [b'nhz', 'Nahuatl, Santa Mar\xeda La Alta'], [b'nia', b'Nias'], [b'nib', b'Nakame'], [b'nid', b'Ngandi'], [b'nie', b'Niellim'], [b'nif', b'Nek'], [b'nig', b'Ngalakan'], [b'nih', b'Nyiha (Tanzania)'], [b'nii', b'Nii'], [b'nij', b'Ngaju'], [b'nik', b'Nicobarese, Southern'], [b'nil', b'Nila'], [b'nim', b'Nilamba'], [b'nin', b'Ninzo'], [b'nio', b'Nganasan'], [b'niq', b'Nandi'], [b'nir', b'Nimboran'], [b'nis', b'Nimi'], [b'nit', b'Kolami, Southeastern'], [b'niu', b'Niuean'], [b'niv', b'Gilyak'], [b'niw', b'Nimo'], [b'nix', b'Hema'], [b'niy', b'Ngiti'], [b'niz', b'Ningil'], [b'nja', b'Nzanyi'], [b'njb', b'Naga, Nocte'], [b'njd', b'Ndonde Hamba'], [b'njh', b'Naga, Lotha'], [b'nji', b'Gudanji'], [b'njj', b'Njen'], [b'njl', b'Njalgulgule'], [b'njm', b'Naga, Angami'], [b'njn', b'Naga, Liangmai'], [b'njo', b'Naga, Ao'], [b'njr', b'Njerep'], [b'njs', b'Nisa'], [b'njt', b'Ndyuka-Trio Pidgin'], [b'nju', b'Ngadjunmaya'], [b'njx', b'Kunyi'], [b'njy', b'Njyem'], [b'njz', b'Nyishi'], [b'nka', b'Nkoya'], [b'nkb', b'Naga, Khoibu'], [b'nkc', b'Nkongho'], [b'nkd', b'Koireng'], [b'nke', b'Duke'], [b'nkf', b'Naga, Inpui'], [b'nkg', b'Nekgini'], [b'nkh', b'Naga, Khezha'], [b'nki', b'Naga, Thangal'], [b'nkj', b'Nakai'], [b'nkk', b'Nokuku'], [b'nkm', b'Namat'], [b'nkn', b'Nkangala'], [b'nko', b'Nkonya'], [b'nkp', b'Niuatoputapu'], [b'nkq', b'Nkami'], [b'nkr', b'Nukuoro'], [b'nks', b'Asmat, North'], [b'nkt', b'Nyika (Tanzania)'], [b'nku', b'Kulango, Bouna'], [b'nkv', b'Nyika (Malawi and Zambia)'], [b'nkw', b'Nkutu'], [b'nkx', b'Nkoroo'], [b'nkz', b'Nkari'], [b'nla', b'Ngombale'], [b'nlc', b'Nalca'], [b'nld', b'Dutch'], [b'nle', b'Nyala, East'], [b'nlg', b'Gela'], [b'nli', b'Grangali'], [b'nlj', b'Nyali'], [b'nlk', b'Yali, Ninia'], [b'nll', b'Nihali'], [b'nlo', b'Ngul'], [b'nlq', b'Naga, Lao'], [b'nlu', b'Nchumbulu'], [b'nlv', b'Nahuatl, Orizaba'], [b'nlw', b'Walangama'], [b'nlx', b'Nahali'], [b'nly', b'Nyamal'], [b'nlz', 'Nal\xf6go'], [b'nma', b'Naga, Maram'], [b'nmb', b'Nambas, Big'], [b'nmc', b'Ngam'], [b'nmd', b'Ndumu'], [b'nme', b'Naga, Mzieme'], [b'nmf', b'Naga, Tangkhul (India)'], [b'nmg', b'Kwasio'], [b'nmh', b'Naga, Monsang'], [b'nmi', b'Nyam'], [b'nmj', b'Ngombe (Central African Republic)'], [b'nmk', b'Namakura'], [b'nml', b'Ndemli'], [b'nmm', b'Manangba'], [b'nmn', '!X\xf3\xf5'], [b'nmo', b'Naga, Moyon'], [b'nmp', b'Nimanbur'], [b'nmq', b'Nambya'], [b'nmr', b'Nimbari'], [b'nms', b'Letemboi'], [b'nmt', b'Namonuito'], [b'nmu', b'Maidu, Northeast'], [b'nmv', b'Ngamini'], [b'nmw', b'Nimoa'], [b'nmx', b'Nama (Papua New Guinea)'], [b'nmy', b'Namuyi'], [b'nmz', b'Nawdm'], [b'nna', b'Nyangumarta'], [b'nnb', b'Nande'], [b'nnc', b'Nancere'], [b'nnd', b'Ambae, West'], [b'nne', b'Ngandyera'], [b'nnf', b'Ngaing'], [b'nng', b'Naga, Maring'], [b'nnh', b'Ngiemboon'], [b'nni', b'Nuaulu, North'], [b'nnj', b'Nyangatom'], [b'nnk', b'Nankina'], [b'nnl', b'Naga, Northern Rengma'], [b'nnm', b'Namia'], [b'nnn', b'Ngete'], [b'nno', b'Norwegian Nynorsk'], [b'nnp', b'Naga, Wancho'], [b'nnq', b'Ngindo'], [b'nnr', b'Narungga'], [b'nns', b'Ningye'], [b'nnt', b'Nanticoke'], [b'nnu', b'Dwang'], [b'nnv', b'Nugunu (Australia)'], [b'nnw', b'Nuni, Southern'], [b'nnx', b'Ngong'], [b'nny', b'Nyangga'], [b'nnz', b"Nda'nda'"], [b'noa', b'Woun Meu'], [b'nob', 'Norwegian Bokm\xe5l'], [b'noc', b'Nuk'], [b'nod', b'Thai, Northern'], [b'noe', b'Nimadi'], [b'nof', b'Nomane'], [b'nog', b'Nogai'], [b'noh', b'Nomu'], [b'noi', b'Noiri'], [b'noj', b'Nonuya'], [b'nok', b'Nooksack'], [b'nol', b'Nomlaki'], [b'nom', 'Nocam\xe1n'], [b'non', b'Norse, Old'], [b'nop', b'Numanggang'], [b'noq', b'Ngongo'], [b'nor', b'Norwegian'], [b'nos', b'Nisu, Eastern'], [b'not', b'Nomatsiguenga'], [b'nou', b'Ewage-Notu'], [b'nov', b'Novial'], [b'now', b'Nyambo'], [b'noy', b'Noy'], [b'noz', b'Nayi'], [b'npa', b'Nar Phu'], [b'npb', b'Nupbikha'], [b'npg', b'Naga, Ponyo-Gongwang'], [b'nph', b'Naga, Phom'], [b'npi', b'Nepali (individual language)'], [b'npl', b'Nahuatl, Southeastern Puebla'], [b'npn', b'Mondropolon'], [b'npo', b'Naga, Pochuri'], [b'nps', b'Nipsan'], [b'npu', b'Naga, Puimei'], [b'npy', b'Napu'], [b'nqg', b'Nago, Southern'], [b'nqk', b'Ede Nago, Kura'], [b'nqm', b'Ndom'], [b'nqn', b'Nen'], [b'nqo', b"N'Ko"], [b'nqq', b'Naga, Kyan-Karyaw'], [b'nqy', b'Naga, Akyaung Ari'], [b'nra', b'Ngom'], [b'nrb', b'Nara'], [b'nrc', b'Noric'], [b'nre', b'Naga, Southern Rengma'], [b'nrg', b'Narango'], [b'nri', b'Naga, Chokri'], [b'nrk', b'Ngarla'], [b'nrl', b'Ngarluma'], [b'nrm', b'Narom'], [b'nrn', b'Norn'], [b'nrp', b'Picene, North'], [b'nrr', b'Norra'], [b'nrt', b'Kalapuya, Northern'], [b'nru', b'Narua'], [b'nrx', b'Ngurmbur'], [b'nrz', b'Lala'], [b'nsa', b'Naga, Sangtam'], [b'nsc', b'Nshi'], [b'nsd', b'Nisu, Southern'], [b'nse', b'Nsenga'], [b'nsf', b'Nisu, Northwestern'], [b'nsg', b'Ngasa'], [b'nsh', b'Ngoshie'], [b'nsi', b'Nigerian Sign Language'], [b'nsk', b'Naskapi'], [b'nsl', b'Norwegian Sign Language'], [b'nsm', b'Naga, Sumi'], [b'nsn', b'Nehan'], [b'nso', b'Pedi'], [b'nsp', b'Nepalese Sign Language'], [b'nsq', b'Miwok, Northern Sierra'], [b'nsr', b'Maritime Sign Language'], [b'nss', b'Nali'], [b'nst', b'Naga, Tase'], [b'nsu', b'Nahuatl, Sierra Negra'], [b'nsv', b'Nisu, Southwestern'], [b'nsw', b'Navut'], [b'nsx', b'Nsongo'], [b'nsy', b'Nasal'], [b'nsz', b'Nisenan'], [b'nte', b'Nathembo'], [b'ntg', b'Ngantangarra'], [b'nti', b'Natioro'], [b'ntj', b'Ngaanyatjarra'], [b'ntk', b'Ikoma-Nata-Isenye'], [b'ntm', b'Nateni'], [b'nto', b'Ntomba'], [b'ntp', b'Tepehuan, Northern'], [b'ntr', b'Delo'], [b'nts', b'Natagaimas'], [b'ntu', 'Nat\xfcgu'], [b'ntw', b'Nottoway'], [b'ntx', b'Naga, Tangkhul (Myanmar)'], [b'nty', b'Mantsi'], [b'ntz', b'Natanzi'], [b'nua', b'Yuanga'], [b'nuc', b'Nukuini'], [b'nud', b'Ngala'], [b'nue', b'Ngundu'], [b'nuf', b'Nusu'], [b'nug', b'Nungali'], [b'nuh', b'Ndunda'], [b'nui', b'Ngumbi'], [b'nuj', b'Nyole'], [b'nuk', b'Nuu-chah-nulth'], [b'nul', b'Nusa Laut'], [b'num', b"Niuafo'ou"], [b'nun', b'Anong'], [b'nuo', 'Ngu\xf4n'], [b'nup', b'Nupe-Nupe-Tako'], [b'nuq', b'Nukumanu'], [b'nur', b'Nukuria'], [b'nus', b'Nuer'], [b'nut', b'Nung (Viet Nam)'], [b'nuu', b'Ngbundu'], [b'nuv', b'Nuni, Northern'], [b'nuw', b'Nguluwan'], [b'nux', b'Mehek'], [b'nuy', b'Nunggubuyu'], [b'nuz', b'Nahuatl, Tlamacazapa'], [b'nvh', b'Nasarian'], [b'nvm', b'Namiae'], [b'nvo', b'Nyokon'], [b'nwa', b'Nawathinehena'], [b'nwb', b'Nyabwa'], [b'nwc', b'Newari, Classical'], [b'nwe', b'Ngwe'], [b'nwg', b'Ngayawung'], [b'nwi', b'Tanna, Southwest'], [b'nwm', b'Nyamusa-Molo'], [b'nwo', b'Nauo'], [b'nwr', b'Nawaru'], [b'nwx', b'Newar, Middle'], [b'nwy', b'Nottoway-Meherrin'], [b'nxa', b'Nauete'], [b'nxd', b'Ngando (Democratic Republic of Congo)'], [b'nxe', b'Nage'], [b'nxg', b"Ngad'a"], [b'nxi', b'Nindi'], [b'nxk', b'Naga, Koki'], [b'nxl', b'Nuaulu, South'], [b'nxm', b'Numidian'], [b'nxn', b'Ngawun'], [b'nxq', b'Naxi'], [b'nxr', b'Ninggerum'], [b'nxu', b'Narau'], [b'nxx', b'Nafri'], [b'nya', b'Nyanja'], [b'nyb', b'Nyangbo'], [b'nyc', b'Nyanga-li'], [b'nyd', b'Nyore'], [b'nye', b'Nyengo'], [b'nyf', b'Giryama'], [b'nyg', b'Nyindu'], [b'nyh', b'Nyigina'], [b'nyi', b'Ama (Sudan)'], [b'nyj', b'Nyanga'], [b'nyk', b'Nyaneka'], [b'nyl', b'Nyeu'], [b'nym', b'Nyamwezi'], [b'nyn', b'Nyankole'], [b'nyo', b'Nyoro'], [b'nyp', b"Nyang'i"], [b'nyq', b'Nayini'], [b'nyr', b'Nyiha (Malawi)'], [b'nys', b'Nyunga'], [b'nyt', b'Nyawaygi'], [b'nyu', b'Nyungwe'], [b'nyv', b'Nyulnyul'], [b'nyw', b'Nyaw'], [b'nyx', b'Nganyaywana'], [b'nyy', b'Nyakyusa-Ngonde'], [b'nza', b'Mbembe, Tigon'], [b'nzb', b'Njebi'], [b'nzi', b'Nzima'], [b'nzk', b'Nzakara'], [b'nzm', b'Naga, Zeme'], [b'nzs', b'New Zealand Sign Language'], [b'nzu', b'Teke-Nzikou'], [b'nzy', b'Nzakambay'], [b'nzz', b'Dogon, Nanga Dama'], [b'oaa', b'Orok'], [b'oac', b'Oroch'], [b'oar', b'Aramaic, Old (up to 700 BCE)'], [b'oav', b'Avar, Old'], [b'obi', 'Obispe\xf1o'], [b'obk', b'Bontok, Southern'], [b'obl', b'Oblo'], [b'obm', b'Moabite'], [b'obo', b'Manobo, Obo'], [b'obr', b'Burmese, Old'], [b'obt', b'Breton, Old'], [b'obu', b'Obulom'], [b'oca', b'Ocaina'], [b'och', b'Chinese, Old'], [b'oci', b'Occitan (post 1500)'], [b'oco', b'Cornish, Old'], [b'ocu', b'Matlatzinca, Atzingo'], [b'oda', b'Odut'], [b'odk', b'Od'], [b'odt', b'Dutch, Old'], [b'odu', b'Odual'], [b'ofo', b'Ofo'], [b'ofs', b'Frisian, Old'], [b'ofu', b'Efutop'], [b'ogb', b'Ogbia'], [b'ogc', b'Ogbah'], [b'oge', b'Georgian, Old'], [b'ogg', b'Ogbogolo'], [b'ogo', b'Khana'], [b'ogu', b'Ogbronuagum'], [b'oht', b'Hittite, Old'], [b'ohu', b'Hungarian, Old'], [b'oia', b'Oirata'], [b'oin', b'One, Inebu'], [b'ojb', b'Ojibwa, Northwestern'], [b'ojc', b'Ojibwa, Central'], [b'ojg', b'Ojibwa, Eastern'], [b'oji', b'Ojibwa'], [b'ojp', b'Japanese, Old'], [b'ojs', b'Ojibwa, Severn'], [b'ojv', b'Ontong Java'], [b'ojw', b'Ojibwa, Western'], [b'oka', b'Okanagan'], [b'okb', b'Okobo'], [b'okd', b'Okodia'], [b'oke', b'Okpe (Southwestern Edo)'], [b'okg', b'Koko Babangk'], [b'okh', b'Koresh-e Rostam'], [b'oki', b'Okiek'], [b'okj', b'Oko-Juwoi'], [b'okk', b'One, Kwamtim'], [b'okl', b'Kentish Sign Language, Old'], [b'okm', b'Korean, Middle (10th-16th cent.)'], [b'okn', b'Oki-No-Erabu'], [b'oko', b'Korean, Old (3rd-9th cent.)'], [b'okr', b'Kirike'], [b'oks', b'Oko-Eni-Osayen'], [b'oku', b'Oku'], [b'okv', b'Orokaiva'], [b'okx', b'Okpe (Northwestern Edo)'], [b'ola', b'Walungge'], [b'old', b'Mochi'], [b'ole', b'Olekha'], [b'olk', b'Olkol'], [b'olm', b'Oloma'], [b'olo', b'Livvi'], [b'olr', b'Olrat'], [b'oma', b'Omaha-Ponca'], [b'omb', b'Ambae, East'], [b'omc', b'Mochica'], [b'ome', b'Omejes'], [b'omg', b'Omagua'], [b'omi', b'Omi'], [b'omk', b'Omok'], [b'oml', b'Ombo'], [b'omn', b'Minoan'], [b'omo', b'Utarmbung'], [b'omp', b'Manipuri, Old'], [b'omr', b'Marathi, Old'], [b'omt', b'Omotik'], [b'omu', b'Omurano'], [b'omw', b'Tairora, South'], [b'omx', b'Mon, Old'], [b'ona', b'Ona'], [b'onb', b'Lingao'], [b'one', b'Oneida'], [b'ong', b'Olo'], [b'oni', b'Onin'], [b'onj', b'Onjob'], [b'onk', b'One, Kabore'], [b'onn', b'Onobasulu'], [b'ono', b'Onondaga'], [b'onp', b'Sartang'], [b'onr', b'One, Northern'], [b'ons', b'Ono'], [b'ont', b'Ontenu'], [b'onu', b'Unua'], [b'onw', b'Nubian, Old'], [b'onx', b'Onin Based Pidgin'], [b'ood', b"Tohono O'odham"], [b'oog', b'Ong'], [b'oon', '\xd6nge'], [b'oor', b'Oorlams'], [b'oos', b'Ossetic, Old'], [b'opa', b'Okpamheri'], [b'opk', b'Kopkaka'], [b'opm', b'Oksapmin'], [b'opo', b'Opao'], [b'opt', b'Opata'], [b'opy', 'Ofay\xe9'], [b'ora', b'Oroha'], [b'orc', b'Orma'], [b'ore', 'Orej\xf3n'], [b'org', b'Oring'], [b'orh', b'Oroqen'], [b'ori', b'Oriya (macrolanguage)'], [b'orm', b'Oromo'], [b'orn', b'Orang Kanaq'], [b'oro', b'Orokolo'], [b'orr', b'Oruma'], [b'ors', b'Orang Seletar'], [b'ort', b'Oriya, Adivasi'], [b'oru', b'Ormuri'], [b'orv', b'Russian, Old'], [b'orw', b'Oro Win'], [b'orx', b'Oro'], [b'ory', b'Oriya (individual language)'], [b'orz', b'Ormu'], [b'osa', b'Osage'], [b'osc', b'Oscan'], [b'osi', b'Osing'], [b'oso', b'Ososo'], [b'osp', b'Spanish, Old'], [b'oss', b'Ossetian'], [b'ost', b'Osatu'], [b'osu', b'One, Southern'], [b'osx', b'Saxon, Old'], [b'ota', b'Turkish, Ottoman (1500-1928)'], [b'otb', b'Tibetan, Old'], [b'otd', b'Ot Danum'], [b'ote', b'Otomi, Mezquital'], [b'oti', b'Oti'], [b'otk', b'Turkish, Old'], [b'otl', b'Otomi, Tilapa'], [b'otm', b'Otomi, Eastern Highland'], [b'otn', b'Otomi, Tenango'], [b'otq', 'Otomi, Quer\xe9taro'], [b'otr', b'Otoro'], [b'ots', 'Otomi, Estado de M\xe9xico'], [b'ott', b'Otomi, Temoaya'], [b'otu', b'Otuke'], [b'otw', b'Ottawa'], [b'otx', b'Otomi, Texcatepec'], [b'oty', b'Tamil, Old'], [b'otz', b'Otomi, Ixtenco'], [b'oua', b'Tagargrent'], [b'oub', b'Glio-Oubi'], [b'oue', b'Oune'], [b'oui', b'Uighur, Old'], [b'oum', b'Ouma'], [b'oun', b'!O!ung'], [b'owi', b'Owiniga'], [b'owl', b'Welsh, Old'], [b'oyb', b'Oy'], [b'oyd', b'Oyda'], [b'oym', b'Wayampi'], [b'oyy', b"Oya'oya"], [b'ozm', b'Koonzime'], [b'pab', 'Parec\xeds'], [b'pac', b'Pacoh'], [b'pad', 'Paumar\xed'], [b'pae', b'Pagibete'], [b'paf', 'Paranaw\xe1t'], [b'pag', b'Pangasinan'], [b'pah', b'Tenharim'], [b'pai', b'Pe'], [b'pak', 'Parakan\xe3'], [b'pal', b'Pahlavi'], [b'pam', b'Pampanga'], [b'pan', b'Panjabi'], [b'pao', b'Paiute, Northern'], [b'pap', b'Papiamento'], [b'paq', b'Parya'], [b'par', b'Panamint'], [b'pas', b'Papasena'], [b'pat', b'Papitalai'], [b'pau', b'Palauan'], [b'pav', 'Paka\xe1snovos'], [b'paw', b'Pawnee'], [b'pax', 'Pankarar\xe9'], [b'pay', b'Pech'], [b'paz', 'Pankarar\xfa'], [b'pbb', 'P\xe1ez'], [b'pbc', b'Patamona'], [b'pbe', b'Popoloca, Mezontla'], [b'pbf', b'Popoloca, Coyotepec'], [b'pbg', b'Paraujano'], [b'pbh', "E'\xf1apa Woromaipu"], [b'pbi', b'Parkwa'], [b'pbl', b'Mak (Nigeria)'], [b'pbn', b'Kpasam'], [b'pbo', b'Papel'], [b'pbp', b'Badyara'], [b'pbr', b'Pangwa'], [b'pbs', b'Pame, Central'], [b'pbt', b'Pashto, Southern'], [b'pbu', b'Pashto, Northern'], [b'pbv', b'Pnar'], [b'pby', b'Pyu'], [b'pca', 'Popoloca, Santa In\xe9s Ahuatempan'], [b'pcb', b'Pear'], [b'pcc', b'Bouyei'], [b'pcd', b'Picard'], [b'pce', b'Palaung, Ruching'], [b'pcf', b'Paliyan'], [b'pcg', b'Paniya'], [b'pch', b'Pardhan'], [b'pci', b'Duruwa'], [b'pcj', b'Parenga'], [b'pck', b'Chin, Paite'], [b'pcl', b'Pardhi'], [b'pcm', b'Pidgin, Nigerian'], [b'pcn', b'Piti'], [b'pcp', b'Pacahuara'], [b'pcw', b'Pyapun'], [b'pda', b'Anam'], [b'pdc', b'German, Pennsylvania'], [b'pdi', b'Pa Di'], [b'pdn', b'Podena'], [b'pdo', b'Padoe'], [b'pdt', b'Plautdietsch'], [b'pdu', b'Kayan'], [b'pea', b'Indonesian, Peranakan'], [b'peb', b'Pomo, Eastern'], [b'ped', b'Mala (Papua New Guinea)'], [b'pee', b'Taje'], [b'pef', b'Pomo, Northeastern'], [b'peg', b'Pengo'], [b'peh', b'Bonan'], [b'pei', b'Chichimeca-Jonaz'], [b'pej', b'Pomo, Northern'], [b'pek', b'Penchal'], [b'pel', b'Pekal'], [b'pem', b'Phende'], [b'peo', b'Persian, Old (ca. 600-400 B.C.)'], [b'pep', b'Kunja'], [b'peq', b'Pomo, Southern'], [b'pes', b'Persian, Iranian'], [b'pev', 'P\xe9mono'], [b'pex', b'Petats'], [b'pey', b'Petjo'], [b'pez', b'Penan, Eastern'], [b'pfa', 'P\xe1\xe1fang'], [b'pfe', b'Peere'], [b'pfl', b'Pfaelzisch'], [b'pga', b'Creole Arabic, Sudanese'], [b'pgg', b'Pangwali'], [b'pgi', b'Pagi'], [b'pgk', b'Rerep'], [b'pgl', b'Irish, Primitive'], [b'pgn', b'Paelignian'], [b'pgs', b'Pangseng'], [b'pgu', b'Pagu'], [b'pha', b'Pa-Hng'], [b'phd', b'Phudagi'], [b'phg', b'Phuong'], [b'phh', b'Phukha'], [b'phk', b'Phake'], [b'phl', b'Phalura'], [b'phm', b'Phimbi'], [b'phn', b'Phoenician'], [b'pho', b'Phunoi'], [b'phq', b"Phana'"], [b'phr', b'Pahari-Potwari'], [b'pht', b'Phu Thai'], [b'phu', b'Phuan'], [b'phv', b'Pahlavani'], [b'phw', b'Phangduwali'], [b'pia', b'Pima Bajo'], [b'pib', b'Yine'], [b'pic', b'Pinji'], [b'pid', b'Piaroa'], [b'pie', b'Piro'], [b'pif', b'Pingelapese'], [b'pig', b'Pisabo'], [b'pih', b'Pitcairn-Norfolk'], [b'pii', b'Pini'], [b'pij', b'Pijao'], [b'pil', b'Yom'], [b'pim', b'Powhatan'], [b'pin', b'Piame'], [b'pio', b'Piapoco'], [b'pip', b'Pero'], [b'pir', b'Piratapuyo'], [b'pis', b'Pijin'], [b'pit', b'Pitta Pitta'], [b'piu', b'Pintupi-Luritja'], [b'piv', b'Pileni'], [b'piw', b'Pimbwe'], [b'pix', b'Piu'], [b'piy', b'Piya-Kwonci'], [b'piz', b'Pije'], [b'pjt', b'Pitjantjatjara'], [b'pka', 'Pr\u0101krit, Ardham\u0101gadh\u012b'], [b'pkb', b'Pokomo'], [b'pkc', b'Paekche'], [b'pkg', b'Pak-Tong'], [b'pkh', b'Pankhu'], [b'pkn', b'Pakanha'], [b'pko', 'P\xf6koot'], [b'pkp', b'Pukapuka'], [b'pkr', b'Kurumba, Attapady'], [b'pks', b'Pakistan Sign Language'], [b'pkt', b'Maleng'], [b'pku', b'Paku'], [b'pla', b'Miani'], [b'plb', b'Polonombauk'], [b'plc', b'Palawano, Central'], [b'pld', b'Polari'], [b'ple', b"Palu'e"], [b'plg', 'Pilag\xe1'], [b'plh', b'Paulohi'], [b'pli', b'Pali'], [b'plj', b'Polci'], [b'plk', b'Shina, Kohistani'], [b'pll', b'Palaung, Shwe'], [b'pln', b'Palenquero'], [b'plo', b'Popoluca, Oluta'], [b'plp', b'Palpa'], [b'plq', b'Palaic'], [b'plr', b'Senoufo, Palaka'], [b'pls', b'Popoloca, San Marcos Tlalcoyalco'], [b'plt', b'Malagasy, Plateau'], [b'plu', 'Palik\xfar'], [b'plv', b'Palawano, Southwest'], [b'plw', b"Palawano, Brooke's Point"], [b'ply', b'Bolyu'], [b'plz', b'Paluan'], [b'pma', b'Paama'], [b'pmb', b'Pambia'], [b'pmc', b'Palumata'], [b'pmd', b'Pallanganmiddang'], [b'pme', b'Pwaamei'], [b'pmf', b'Pamona'], [b'pmh', 'Pr\u0101krit, M\u0101h\u0101r\u0101\u1e63\u1e6dri'], [b'pmi', b'Pumi, Northern'], [b'pmj', b'Pumi, Southern'], [b'pmk', b'Pamlico'], [b'pml', b'Lingua Franca'], [b'pmm', b'Pomo'], [b'pmn', b'Pam'], [b'pmo', b'Pom'], [b'pmq', b'Pame, Northern'], [b'pmr', b'Paynamar'], [b'pms', b'Piemontese'], [b'pmt', b'Tuamotuan'], [b'pmu', b'Panjabi, Mirpur'], [b'pmw', b'Miwok, Plains'], [b'pmx', b'Naga, Poumei'], [b'pmy', b'Malay, Papuan'], [b'pmz', b'Pame, Southern'], [b'pna', b'Punan Bah-Biau'], [b'pnb', b'Panjabi, Western'], [b'pnc', b'Pannei'], [b'pne', b'Penan, Western'], [b'png', b'Pongu'], [b'pnh', b'Penrhyn'], [b'pni', b'Aoheng'], [b'pnj', b'Pinjarup'], [b'pnk', b'Paunaka'], [b'pnl', b'Paleni'], [b'pnm', b'Punan Batu 1'], [b'pnn', b'Pinai-Hagahai'], [b'pno', b'Panobo'], [b'pnp', b'Pancana'], [b'pnq', b'Pana (Burkina Faso)'], [b'pnr', b'Panim'], [b'pns', b'Ponosakan'], [b'pnt', b'Pontic'], [b'pnu', b'Bunu, Jiongnai'], [b'pnv', b'Pinigura'], [b'pnw', b'Panytyima'], [b'pnx', b'Phong-Kniang'], [b'pny', b'Pinyin'], [b'pnz', b'Pana (Central African Republic)'], [b'poc', b'Poqomam'], [b'pod', b'Ponares'], [b'poe', b'Popoloca, San Juan Atzingo'], [b'pof', b'Poke'], [b'pog', 'Potigu\xe1ra'], [b'poh', b"Poqomchi'"], [b'poi', b'Popoluca, Highland'], [b'pok', 'Pokang\xe1'], [b'pol', b'Polish'], [b'pom', b'Pomo, Southeastern'], [b'pon', b'Pohnpeian'], [b'poo', b'Pomo, Central'], [b'pop', 'Pwapw\xe2'], [b'poq', b'Popoluca, Texistepec'], [b'por', b'Portuguese'], [b'pos', b'Popoluca, Sayula'], [b'pot', b'Potawatomi'], [b'pov', b'Crioulo, Upper Guinea'], [b'pow', b'Popoloca, San Felipe Otlaltepec'], [b'pox', b'Polabian'], [b'poy', b'Pogolo'], [b'ppa', b'Pao'], [b'ppe', b'Papi'], [b'ppi', b'Paipai'], [b'ppk', b'Uma'], [b'ppl', b'Pipil'], [b'ppm', b'Papuma'], [b'ppn', b'Papapana'], [b'ppo', b'Folopa'], [b'ppp', b'Pelende'], [b'ppq', b'Pei'], [b'pps', 'Popoloca, San Lu\xeds Temalacayuca'], [b'ppt', b'Pare'], [b'ppu', b'Papora'], [b'pqa', b"Pa'a"], [b'pqm', b'Malecite-Passamaquoddy'], [b'prb', b"Lua'"], [b'prc', b'Parachi'], [b'prd', b'Parsi-Dari'], [b'pre', b'Principense'], [b'prf', b'Paranan'], [b'prg', b'Prussian'], [b'prh', b'Porohanon'], [b'pri', 'Paic\xee'], [b'prk', b'Parauk'], [b'prl', b'Peruvian Sign Language'], [b'prm', b'Kibiri'], [b'prn', b'Prasuni'], [b'pro', 'Proven\xe7al, Old (to 1500)'], [b'prp', b'Parsi'], [b'prq', 'Ash\xe9ninka Peren\xe9'], [b'prr', b'Puri'], [b'prs', b'Dari'], [b'prt', b'Phai'], [b'pru', b'Puragi'], [b'prw', b'Parawen'], [b'prx', b'Purik'], [b'pry', b'Pray 3'], [b'prz', b'Providencia Sign Language'], [b'psa', b'Awyu, Asue'], [b'psc', b'Persian Sign Language'], [b'psd', b'Plains Indian Sign Language'], [b'pse', b'Malay, Central'], [b'psg', b'Penang Sign Language'], [b'psh', b'Pashayi, Southwest'], [b'psi', b'Pashayi, Southeast'], [b'psl', b'Puerto Rican Sign Language'], [b'psm', b'Pauserna'], [b'psn', b'Panasuan'], [b'pso', b'Polish Sign Language'], [b'psp', b'Philippine Sign Language'], [b'psq', b'Pasi'], [b'psr', b'Portuguese Sign Language'], [b'pss', b'Kaulong'], [b'pst', b'Pashto, Central'], [b'psu', 'Pr\u0101krit, Sauraseni'], [b'psw', b'Port Sandwich'], [b'psy', b'Piscataway'], [b'pta', b'Pai Tavytera'], [b'pth', 'Patax\xf3 H\xe3-Ha-H\xe3e'], [b'pti', b'Pintiini'], [b'ptn', b'Patani'], [b'pto', "Zo'\xe9"], [b'ptp', b'Patep'], [b'ptr', b'Piamatsina'], [b'ptt', b'Enrekang'], [b'ptu', b'Bambam'], [b'ptv', b'Port Vato'], [b'ptw', b'Pentlatch'], [b'pty', b'Pathiya'], [b'pua', b'Purepecha, Western Highland'], [b'pub', b'Purum'], [b'puc', b'Punan Merap'], [b'pud', b'Punan Aput'], [b'pue', b'Puelche'], [b'puf', b'Punan Merah'], [b'pug', b'Phuie'], [b'pui', b'Puinave'], [b'puj', b'Punan Tubu'], [b'puk', b'Pu Ko'], [b'pum', b'Puma'], [b'puo', b'Puoc'], [b'pup', b'Pulabu'], [b'puq', b'Puquina'], [b'pur', 'Purubor\xe1'], [b'pus', b'Pushto'], [b'put', b'Putoh'], [b'puu', b'Punu'], [b'puw', b'Puluwatese'], [b'pux', b'Puare'], [b'puy', 'Purisime\xf1o'], [b'puz', b'Naga, Purum'], [b'pwa', b'Pawaia'], [b'pwb', b'Panawa'], [b'pwg', b'Gapapaiwa'], [b'pwi', b'Patwin'], [b'pwm', b'Molbog'], [b'pwn', b'Paiwan'], [b'pwo', b'Karen, Pwo Western'], [b'pwr', b'Powari'], [b'pww', b'Karen, Pwo Northern'], [b'pxm', b'Mixe, Quetzaltepec'], [b'pye', b'Krumen, Pye'], [b'pym', b'Fyam'], [b'pyn', 'Poyan\xe1wa'], [b'pys', b'Paraguayan Sign Language'], [b'pyu', b'Puyuma'], [b'pyx', b'Pyu (Myanmar)'], [b'pyy', b'Pyen'], [b'pzn', b'Naga, Para'], [b'qua', b'Quapaw'], [b'qub', 'Quechua, Huallaga Hu\xe1nuco'], [b'quc', b"K'iche'"], [b'qud', 'Quichua, Calder\xf3n Highland'], [b'que', b'Quechua'], [b'quf', b'Quechua, Lambayeque'], [b'qug', b'Quichua, Chimborazo Highland'], [b'quh', b'Quechua, South Bolivian'], [b'qui', b'Quileute'], [b'quk', b'Quechua, Chachapoyas'], [b'qul', b'Quechua, North Bolivian'], [b'qum', b'Sipacapense'], [b'qun', b'Quinault'], [b'qup', b'Quechua, Southern Pastaza'], [b'quq', b'Quinqui'], [b'qur', b'Quechua, Yanahuanca Pasco'], [b'qus', b'Quichua, Santiago del Estero'], [b'quv', b'Sacapulteco'], [b'quw', b'Quichua, Tena Lowland'], [b'qux', b'Quechua, Yauyos'], [b'quy', b'Quechua, Ayacucho'], [b'quz', b'Quechua, Cusco'], [b'qva', b'Quechua, Ambo-Pasco'], [b'qvc', b'Quechua, Cajamarca'], [b'qve', 'Quechua, Eastern Apur\xedmac'], [b'qvh', 'Quechua, Huamal\xedes-Dos de Mayo Hu\xe1nuco'], [b'qvi', b'Quichua, Imbabura Highland'], [b'qvj', b'Quichua, Loja Highland'], [b'qvl', b'Quechua, Cajatambo North Lima'], [b'qvm', b'Quechua, Margos-Yarowilca-Lauricocha'], [b'qvn', 'Quechua, North Jun\xedn'], [b'qvo', b'Quechua, Napo Lowland'], [b'qvp', b'Quechua, Pacaraos'], [b'qvs', 'Quechua, San Mart\xedn'], [b'qvw', b'Quechua, Huaylla Wanca'], [b'qvy', b'Queyu'], [b'qvz', b'Quichua, Northern Pastaza'], [b'qwa', b'Quechua, Corongo Ancash'], [b'qwc', b'Quechua, Classical'], [b'qwh', b'Quechua, Huaylas Ancash'], [b'qwm', b'Kuman (Russia)'], [b'qws', b'Quechua, Sihuas Ancash'], [b'qwt', b'Kwalhioqua-Tlatskanai'], [b'qxa', 'Quechua, Chiqui\xe1n Ancash'], [b'qxc', b'Quechua, Chincha'], [b'qxh', 'Quechua, Panao Hu\xe1nuco'], [b'qxl', b'Quichua, Salasaca Highland'], [b'qxn', b'Quechua, Northern Conchucos Ancash'], [b'qxo', b'Quechua, Southern Conchucos Ancash'], [b'qxp', b'Quechua, Puno'], [b'qxq', b"Qashqa'i"], [b'qxr', 'Quichua, Ca\xf1ar Highland'], [b'qxs', b'Qiang, Southern'], [b'qxt', b'Quechua, Santa Ana de Tusi Pasco'], [b'qxu', 'Quechua, Arequipa-La Uni\xf3n'], [b'qxw', b'Quechua, Jauja Wanca'], [b'qya', b'Quenya'], [b'qyp', b'Quiripi'], [b'raa', b'Dungmali'], [b'rab', b'Camling'], [b'rac', b'Rasawa'], [b'rad', b'Rade'], [b'raf', b'Meohang, Western'], [b'rag', b'Logooli'], [b'rah', b'Rabha'], [b'rai', b'Ramoaaina'], [b'raj', b'Rajasthani'], [b'rak', b'Tulu-Bohuai'], [b'ral', b'Ralte'], [b'ram', b'Canela'], [b'ran', b'Riantana'], [b'rao', b'Rao'], [b'rap', b'Rapanui'], [b'raq', b'Saam'], [b'rar', b'Rarotongan'], [b'ras', b'Tegali'], [b'rat', b'Razajerdi'], [b'rau', b'Raute'], [b'rav', b'Sampang'], [b'raw', b'Rawang'], [b'rax', b'Rang'], [b'ray', b'Rapa'], [b'raz', b'Rahambuu'], [b'rbb', b'Palaung, Rumai'], [b'rbk', b'Bontok, Northern'], [b'rbl', b'Bikol, Miraya'], [b'rbp', b'Barababaraba'], [b'rcf', 'Creole French, R\xe9union'], [b'rdb', b'Rudbari'], [b'rea', b'Rerau'], [b'reb', b'Rembong'], [b'ree', b'Kayan, Rejang'], [b'reg', b'Kara (Tanzania)'], [b'rei', b'Reli'], [b'rej', b'Rejang'], [b'rel', b'Rendille'], [b'rem', b'Remo'], [b'ren', b'Rengao'], [b'rer', b'Rer Bare'], [b'res', b'Reshe'], [b'ret', b'Retta'], [b'rey', b'Reyesano'], [b'rga', b'Roria'], [b'rge', b'Romano-Greek'], [b'rgk', b'Rangkas'], [b'rgn', b'Romagnol'], [b'rgr', 'Res\xedgaro'], [b'rgs', b'Roglai, Southern'], [b'rgu', b'Ringgou'], [b'rhg', b'Rohingya'], [b'rhp', b'Yahang'], [b'ria', b'Riang (India)'], [b'rie', b'Rien'], [b'rif', b'Tarifit'], [b'ril', b'Riang (Myanmar)'], [b'rim', b'Nyaturu'], [b'rin', b'Nungu'], [b'rir', b'Ribun'], [b'rit', b'Ritarungo'], [b'riu', b'Riung'], [b'rjg', b'Rajong'], [b'rji', b'Raji'], [b'rjs', b'Rajbanshi'], [b'rka', b'Kraol'], [b'rkb', b'Rikbaktsa'], [b'rkh', b'Rakahanga-Manihiki'], [b'rki', b'Rakhine'], [b'rkm', b'Marka'], [b'rkt', b'Rangpuri'], [b'rkw', b'Arakwal'], [b'rma', b'Rama'], [b'rmb', b'Rembarunga'], [b'rmc', b'Romani, Carpathian'], [b'rmd', b'Danish, Traveller'], [b'rme', b'Angloromani'], [b'rmf', b'Romani, Kalo Finnish'], [b'rmg', b'Norwegian, Traveller'], [b'rmh', b'Murkim'], [b'rmi', b'Lomavren'], [b'rmk', b'Romkun'], [b'rml', b'Romani, Baltic'], [b'rmm', b'Roma'], [b'rmn', b'Romani, Balkan'], [b'rmo', b'Romani, Sinte'], [b'rmp', b'Rempi'], [b'rmq', 'Cal\xf3'], [b'rms', b'Romanian Sign Language'], [b'rmt', b'Domari'], [b'rmu', b'Romani, Tavringer'], [b'rmv', b'Romanova'], [b'rmw', b'Romani, Welsh'], [b'rmx', b'Romam'], [b'rmy', b'Romani, Vlax'], [b'rmz', b'Marma'], [b'rna', b'Runa'], [b'rnd', b'Ruund'], [b'rng', b'Ronga'], [b'rnl', b'Ranglong'], [b'rnn', b'Roon'], [b'rnp', b'Rongpo'], [b'rnr', b'Nari Nari'], [b'rnw', b'Rungwa'], [b'rob', b"Tae'"], [b'roc', b'Roglai, Cacgia'], [b'rod', b'Rogo'], [b'roe', b'Ronji'], [b'rof', b'Rombo'], [b'rog', b'Roglai, Northern'], [b'roh', b'Romansh'], [b'rol', b'Romblomanon'], [b'rom', b'Romany'], [b'ron', b'Romanian'], [b'roo', b'Rotokas'], [b'rop', b'Kriol'], [b'ror', b'Rongga'], [b'rou', b'Runga'], [b'row', b'Dela-Oenale'], [b'rpn', b'Repanbitip'], [b'rpt', b'Rapting'], [b'rri', b'Ririo'], [b'rro', b'Waima'], [b'rrt', b'Arritinngithigh'], [b'rsb', b'Romano-Serbian'], [b'rsi', b'Rennellese Sign Language'], [b'rsl', b'Russian Sign Language'], [b'rtc', b'Chin, Rungtu'], [b'rth', b'Ratahan'], [b'rtm', b'Rotuman'], [b'rtw', b'Rathawi'], [b'rub', b'Gungu'], [b'ruc', b'Ruuli'], [b'rue', b'Rusyn'], [b'ruf', b'Luguru'], [b'rug', b'Roviana'], [b'ruh', b'Ruga'], [b'rui', b'Rufiji'], [b'ruk', b'Che'], [b'run', b'Rundi'], [b'ruo', b'Romanian, Istro'], [b'rup', b'Romanian, Macedo-'], [b'ruq', b'Romanian, Megleno'], [b'rus', b'Russian'], [b'rut', b'Rutul'], [b'ruu', b'Lobu, Lanas'], [b'ruy', b'Mala (Nigeria)'], [b'ruz', b'Ruma'], [b'rwa', b'Rawo'], [b'rwk', b'Rwa'], [b'rwm', b'Amba (Uganda)'], [b'rwo', b'Rawa'], [b'rwr', b'Marwari (India)'], [b'rxd', b'Ngardi'], [b'rxw', b'Karuwali'], [b'ryn', b'Amami-Oshima, Northern'], [b'rys', b'Yaeyama'], [b'ryu', b'Okinawan, Central'], [b'saa', b'Saba'], [b'sab', b'Buglere'], [b'sac', b'Meskwaki'], [b'sad', b'Sandawe'], [b'sae', 'Saban\xea'], [b'saf', b'Safaliba'], [b'sag', b'Sango'], [b'sah', b'Yakut'], [b'saj', b'Sahu'], [b'sak', b'Sake'], [b'sam', b'Aramaic, Samaritan'], [b'san', b'Sanskrit'], [b'sao', b'Sause'], [b'sap', 'Sanapan\xe1'], [b'saq', b'Samburu'], [b'sar', b'Saraveca'], [b'sas', b'Sasak'], [b'sat', b'Santali'], [b'sau', b'Saleman'], [b'sav', b'Saafi-Saafi'], [b'saw', b'Sawi'], [b'sax', b'Sa'], [b'say', b'Saya'], [b'saz', b'Saurashtra'], [b'sba', b'Ngambay'], [b'sbb', b'Simbo'], [b'sbc', b'Kele (Papua New Guinea)'], [b'sbd', b'Samo, Southern'], [b'sbe', b'Saliba'], [b'sbf', b'Shabo'], [b'sbg', b'Seget'], [b'sbh', b'Sori-Harengan'], [b'sbi', b'Seti'], [b'sbj', b'Surbakhal'], [b'sbk', b'Safwa'], [b'sbl', b'Sambal, Botolan'], [b'sbm', b'Sagala'], [b'sbn', b'Bhil, Sindhi'], [b'sbo', 'Sab\xfcm'], [b'sbp', b'Sangu (Tanzania)'], [b'sbq', b'Sileibi'], [b'sbr', b'Sembakung Murut'], [b'sbs', b'Subiya'], [b'sbt', b'Kimki'], [b'sbu', b'Bhoti, Stod'], [b'sbv', b'Sabine'], [b'sbw', b'Simba'], [b'sbx', b'Seberuang'], [b'sby', b'Soli'], [b'sbz', b'Sara Kaba'], [b'scb', b'Chut'], [b'sce', b'Dongxiang'], [b'scf', b'Creole French, San Miguel'], [b'scg', b'Sanggau'], [b'sch', b'Sakachep'], [b'sci', b'Creole Malay, Sri Lankan'], [b'sck', b'Sadri'], [b'scl', b'Shina'], [b'scn', b'Sicilian'], [b'sco', b'Scots'], [b'scp', b'Helambu Sherpa'], [b'scq', b"Sa'och"], [b'scs', b'Slavey, North'], [b'scu', b'Shumcho'], [b'scv', b'Sheni'], [b'scw', b'Sha'], [b'scx', b'Sicel'], [b'sda', b"Toraja-Sa'dan"], [b'sdb', b'Shabak'], [b'sdc', b'Sardinian, Sassarese'], [b'sde', b'Surubu'], [b'sdf', b'Sarli'], [b'sdg', b'Savi'], [b'sdh', b'Kurdish, Southern'], [b'sdj', b'Suundi'], [b'sdk', b'Sos Kundi'], [b'sdl', b'Saudi Arabian Sign Language'], [b'sdm', b'Semandang'], [b'sdn', b'Sardinian, Gallurese'], [b'sdo', b'Bidayuh, Bukar-Sadung'], [b'sdp', b'Sherdukpen'], [b'sdr', b'Sadri, Oraon'], [b'sds', b'Sened'], [b'sdt', b'Shuadit'], [b'sdu', b'Sarudu'], [b'sdx', b'Melanau, Sibu'], [b'sdz', b'Sallands'], [b'sea', b'Semai'], [b'seb', b'Senoufo, Shempire'], [b'sec', b'Sechelt'], [b'sed', b'Sedang'], [b'see', b'Seneca'], [b'sef', b'Senoufo, Cebaara'], [b'seg', b'Segeju'], [b'seh', b'Sena'], [b'sei', b'Seri'], [b'sej', b'Sene'], [b'sek', b'Sekani'], [b'sel', b'Selkup'], [b'sen', 'S\xe9noufo, Nanerig\xe9'], [b'seo', b'Suarmin'], [b'sep', 'S\xe9noufo, S\xecc\xect\xe9'], [b'seq', 'S\xe9noufo, Senara'], [b'ser', b'Serrano'], [b'ses', b'Songhai, Koyraboro Senni'], [b'set', b'Sentani'], [b'seu', b'Serui-Laut'], [b'sev', b'Senoufo, Nyarafolo'], [b'sew', b'Sewa Bay'], [b'sey', b'Secoya'], [b'sez', b'Chin, Senthang'], [b'sfb', b'Langue des signes de Belgique Francophone'], [b'sfe', b'Subanen, Eastern'], [b'sfm', b'Miao, Small Flowery'], [b'sfs', b'South African Sign Language'], [b'sfw', b'Sehwi'], [b'sga', b'Irish, Old (to 900)'], [b'sgb', b'Ayta, Mag-antsi'], [b'sgc', b'Kipsigis'], [b'sgd', b'Surigaonon'], [b'sge', b'Segai'], [b'sgg', b'Swiss-German Sign Language'], [b'sgh', b'Shughni'], [b'sgi', b'Suga'], [b'sgj', b'Surgujia'], [b'sgk', b'Sangkong'], [b'sgm', b'Singa'], [b'sgo', b'Songa'], [b'sgp', b'Singpho'], [b'sgr', b'Sangisari'], [b'sgs', b'Samogitian'], [b'sgt', b'Brokpake'], [b'sgu', b'Salas'], [b'sgw', b'Sebat Bet Gurage'], [b'sgx', b'Sierra Leone Sign Language'], [b'sgy', b'Sanglechi'], [b'sgz', b'Sursurunga'], [b'sha', b'Shall-Zwall'], [b'shb', b'Ninam'], [b'shc', b'Sonde'], [b'shd', b'Kundal Shahi'], [b'she', b'Sheko'], [b'shg', b'Shua'], [b'shh', b'Shoshoni'], [b'shi', b'Tachelhit'], [b'shj', b'Shatt'], [b'shk', b'Shilluk'], [b'shl', b'Shendu'], [b'shm', b'Shahrudi'], [b'shn', b'Shan'], [b'sho', b'Shanga'], [b'shp', b'Shipibo-Conibo'], [b'shq', b'Sala'], [b'shr', b'Shi'], [b'shs', b'Shuswap'], [b'sht', b'Shasta'], [b'shu', b'Arabic, Chadian'], [b'shv', b'Shehri'], [b'shw', b'Shwai'], [b'shx', b'She'], [b'shy', b'Tachawit'], [b'shz', b'Senoufo, Syenara'], [b'sia', b'Sami, Akkala'], [b'sib', b'Sebop'], [b'sid', b'Sidamo'], [b'sie', b'Simaa'], [b'sif', b'Siamou'], [b'sig', b'Paasaal'], [b'sih', b'Zire'], [b'sii', b'Shom Peng'], [b'sij', b'Numbami'], [b'sik', b'Sikiana'], [b'sil', b'Sisaala, Tumulung'], [b'sim', b'Mende (Papua New Guinea)'], [b'sin', b'Sinhala'], [b'sip', b'Sikkimese'], [b'siq', b'Sonia'], [b'sir', b'Siri'], [b'sis', b'Siuslaw'], [b'siu', b'Sinagen'], [b'siv', b'Sumariup'], [b'siw', b'Siwai'], [b'six', b'Sumau'], [b'siy', b'Sivandi'], [b'siz', b'Siwi'], [b'sja', b'Epena'], [b'sjb', b'Sajau Basap'], [b'sjd', b'Sami, Kildin'], [b'sje', b'Sami, Pite'], [b'sjg', b'Assangori'], [b'sjk', b'Sami, Kemi'], [b'sjl', b'Sajalong'], [b'sjm', b'Mapun'], [b'sjn', b'Sindarin'], [b'sjo', b'Xibe'], [b'sjp', b'Surjapuri'], [b'sjr', b'Siar-Lak'], [b'sjs', b'Senhaja De Srair'], [b'sjt', b'Sami, Ter'], [b'sju', b'Sami, Ume'], [b'sjw', b'Shawnee'], [b'ska', b'Skagit'], [b'skb', b'Saek'], [b'skc', b'Ma Manda'], [b'skd', b'Miwok, Southern Sierra'], [b'ske', b'Seke (Vanuatu)'], [b'skf', 'Sakirabi\xe1'], [b'skg', b'Malagasy, Sakalava'], [b'skh', b'Sikule'], [b'ski', b'Sika'], [b'skj', b'Seke (Nepal)'], [b'skk', b'Sok'], [b'skm', b'Kutong'], [b'skn', b'Subanon, Kolibugan'], [b'sko', b'Seko Tengah'], [b'skp', b'Sekapan'], [b'skq', b'Sininkere'], [b'skr', b'Seraiki'], [b'sks', b'Maia'], [b'skt', b'Sakata'], [b'sku', b'Sakao'], [b'skv', b'Skou'], [b'skw', b'Creole Dutch, Skepi'], [b'skx', b'Seko Padang'], [b'sky', b'Sikaiana'], [b'skz', b'Sekar'], [b'slc', 'S\xe1liba'], [b'sld', b'Sissala'], [b'sle', b'Sholaga'], [b'slf', b'Swiss-Italian Sign Language'], [b'slg', b'Selungai Murut'], [b'slh', b'Salish, Southern Puget Sound'], [b'sli', b'Silesian, Lower'], [b'slj', 'Salum\xe1'], [b'slk', b'Slovak'], [b'sll', b'Salt-Yui'], [b'slm', b'Sama, Pangutaran'], [b'sln', b'Salinan'], [b'slp', b'Lamaholot'], [b'slq', b'Salchuq'], [b'slr', b'Salar'], [b'sls', b'Singapore Sign Language'], [b'slt', b'Sila'], [b'slu', b'Selaru'], [b'slv', b'Slovenian'], [b'slw', b'Sialum'], [b'slx', b'Salampasu'], [b'sly', b'Selayar'], [b'slz', b"Ma'ya"], [b'sma', b'Sami, Southern'], [b'smb', b'Simbari'], [b'smc', b'Som'], [b'smd', b'Sama'], [b'sme', b'Sami, Northern'], [b'smf', b'Auwe'], [b'smg', b'Simbali'], [b'smh', b'Samei'], [b'smj', b'Lule Sami'], [b'smk', b'Bolinao'], [b'sml', b'Sama, Central'], [b'smm', b'Musasa'], [b'smn', b'Sami, Inari'], [b'smo', b'Samoan'], [b'smp', b'Samaritan'], [b'smq', b'Samo'], [b'smr', b'Simeulue'], [b'sms', b'Sami, Skolt'], [b'smt', b'Simte'], [b'smu', b'Somray'], [b'smv', b'Samvedi'], [b'smw', b'Sumbawa'], [b'smx', b'Samba'], [b'smy', b'Semnani'], [b'smz', b'Simeku'], [b'sna', b'Shona'], [b'snb', b'Sebuyau'], [b'snc', b'Sinaugoro'], [b'snd', b'Sindhi'], [b'sne', b'Bidayuh, Bau'], [b'snf', b'Noon'], [b'sng', b'Sanga (Democratic Republic of Congo)'], [b'snh', b'Shinabo'], [b'sni', b'Sensi'], [b'snj', b'Sango, Riverain'], [b'snk', b'Soninke'], [b'snl', b'Sangil'], [b'snm', b"Ma'di, Southern"], [b'snn', b'Siona'], [b'sno', b'Snohomish'], [b'snp', b'Siane'], [b'snq', b'Sangu (Gabon)'], [b'snr', b'Sihan'], [b'sns', b'South West Bay'], [b'snu', b'Senggi'], [b'snv', b"Sa'ban"], [b'snw', b'Selee'], [b'snx', b'Sam'], [b'sny', b'Saniyo-Hiyewe'], [b'snz', b'Sinsauru'], [b'soa', b'Thai Song'], [b'sob', b'Sobei'], [b'soc', b'So (Democratic Republic of Congo)'], [b'sod', b'Songoora'], [b'soe', b'Songomeno'], [b'sog', b'Sogdian'], [b'soh', b'Aka'], [b'soi', b'Sonha'], [b'soj', b'Soi'], [b'sok', b'Sokoro'], [b'sol', b'Solos'], [b'som', b'Somali'], [b'soo', b'Songo'], [b'sop', b'Songe'], [b'soq', b'Kanasi'], [b'sor', b'Somrai'], [b'sos', b'Seeku'], [b'sot', b'Sotho, Southern'], [b'sou', b'Thai, Southern'], [b'sov', b'Sonsorol'], [b'sow', b'Sowanda'], [b'sox', b'Swo'], [b'soy', b'Miyobe'], [b'soz', b'Temi'], [b'spa', b'Spanish'], [b'spb', b'Sepa (Indonesia)'], [b'spc', 'Sap\xe9'], [b'spd', b'Saep'], [b'spe', b'Sepa (Papua New Guinea)'], [b'spg', b'Sian'], [b'spi', b'Saponi'], [b'spk', b'Sengo'], [b'spl', b'Selepet'], [b'spm', b'Akukem'], [b'spo', b'Spokane'], [b'spp', b'Senoufo, Supyire'], [b'spq', b'Spanish, Loreto-Ucayali'], [b'spr', b'Saparua'], [b'sps', b'Saposa'], [b'spt', b'Bhoti, Spiti'], [b'spu', b'Sapuan'], [b'spv', b'Sambalpuri'], [b'spx', b'Picene, South'], [b'spy', b'Sabaot'], [b'sqa', b'Shama-Sambuga'], [b'sqh', b'Shau'], [b'sqi', b'Albanian'], [b'sqk', b'Albanian Sign Language'], [b'sqm', b'Suma'], [b'sqn', b'Susquehannock'], [b'sqo', b'Sorkhei'], [b'sqq', b'Sou'], [b'sqr', b'Arabic, Siculo'], [b'sqs', b'Sri Lankan Sign Language'], [b'sqt', b'Soqotri'], [b'squ', b'Squamish'], [b'sra', b'Saruga'], [b'srb', b'Sora'], [b'src', b'Sardinian, Logudorese'], [b'srd', b'Sardinian'], [b'sre', b'Sara'], [b'srf', b'Nafi'], [b'srg', b'Sulod'], [b'srh', b'Sarikoli'], [b'sri', b'Siriano'], [b'srk', b'Serudung Murut'], [b'srl', b'Isirawa'], [b'srm', b'Saramaccan'], [b'srn', b'Sranan Tongo'], [b'sro', b'Sardinian, Campidanese'], [b'srp', b'Serbian'], [b'srq', 'Sirion\xf3'], [b'srr', b'Serer'], [b'srs', b'Sarsi'], [b'srt', b'Sauri'], [b'sru', 'Suru\xed'], [b'srv', b'Sorsoganon, Southern'], [b'srw', b'Serua'], [b'srx', b'Sirmauri'], [b'sry', b'Sera'], [b'srz', b'Shahmirzadi'], [b'ssb', b'Sama, Southern'], [b'ssc', b'Suba-Simbiti'], [b'ssd', b'Siroi'], [b'sse', b'Balangingi'], [b'ssf', b'Thao'], [b'ssg', b'Seimat'], [b'ssh', b'Arabic, Shihhi'], [b'ssi', b'Sansi'], [b'ssj', b'Sausi'], [b'ssk', b'Sunam'], [b'ssl', b'Sisaala, Western'], [b'ssm', b'Semnam'], [b'ssn', b'Waata'], [b'sso', b'Sissano'], [b'ssp', b'Spanish Sign Language'], [b'ssq', b"So'a"], [b'ssr', b'Swiss-French Sign Language'], [b'sss', 'S\xf4'], [b'sst', b'Sinasina'], [b'ssu', b'Susuami'], [b'ssv', b'Shark Bay'], [b'ssw', b'Swati'], [b'ssx', b'Samberigi'], [b'ssy', b'Saho'], [b'ssz', b'Sengseng'], [b'sta', b'Settla'], [b'stb', b'Subanen, Northern'], [b'std', b'Sentinel'], [b'ste', b'Liana-Seti'], [b'stf', b'Seta'], [b'stg', b'Trieng'], [b'sth', b'Shelta'], [b'sti', b'Stieng, Bulo'], [b'stj', b'Samo, Matya'], [b'stk', b'Arammba'], [b'stl', b'Stellingwerfs'], [b'stm', b'Setaman'], [b'stn', b'Owa'], [b'sto', b'Stoney'], [b'stp', b'Tepehuan, Southeastern'], [b'stq', b'Saterfriesisch'], [b'str', b'Salish, Straits'], [b'sts', b'Shumashti'], [b'stt', b'Stieng, Budeh'], [b'stu', b'Samtao'], [b'stv', b"Silt'e"], [b'stw', b'Satawalese'], [b'sty', b'Tatar, Siberian'], [b'sua', b'Sulka'], [b'sub', b'Suku'], [b'suc', b'Subanon, Western'], [b'sue', b'Suena'], [b'sug', b'Suganga'], [b'sui', b'Suki'], [b'suj', b'Shubi'], [b'suk', b'Sukuma'], [b'sun', b'Sundanese'], [b'suq', b'Suri'], [b'sur', b'Mwaghavul'], [b'sus', b'Susu'], [b'sut', b'Subtiaba'], [b'suv', b'Puroik'], [b'suw', b'Sumbwa'], [b'sux', b'Sumerian'], [b'suy', 'Suy\xe1'], [b'suz', b'Sunwar'], [b'sva', b'Svan'], [b'svb', b'Ulau-Suain'], [b'svc', b'Creole English, Vincentian'], [b'sve', b'Serili'], [b'svk', b'Slovakian Sign Language'], [b'svm', b'Slavomolisano'], [b'svr', b'Savara'], [b'svs', b'Savosavo'], [b'svx', b'Skalvian'], [b'swa', b'Swahili (macrolanguage)'], [b'swb', b'Comorian, Maore'], [b'swc', b'Swahili, Congo'], [b'swe', b'Swedish'], [b'swf', b'Sere'], [b'swg', b'Swabian'], [b'swh', b'Swahili (individual language)'], [b'swi', b'Sui'], [b'swj', b'Sira'], [b'swk', b'Sena, Malawi'], [b'swl', b'Swedish Sign Language'], [b'swm', b'Samosa'], [b'swn', b'Sawknah'], [b'swo', b'Shanenawa'], [b'swp', b'Suau'], [b'swq', b'Sharwa'], [b'swr', b'Saweru'], [b'sws', b'Seluwasan'], [b'swt', b'Sawila'], [b'swu', b'Suwawa'], [b'swv', b'Shekhawati'], [b'sww', b'Sowa'], [b'swx', 'Suruah\xe1'], [b'swy', b'Sarua'], [b'sxb', b'Suba'], [b'sxc', b'Sicanian'], [b'sxe', b'Sighu'], [b'sxg', b'Shixing'], [b'sxk', b'Kalapuya, Southern'], [b'sxl', b'Selian'], [b'sxm', b'Samre'], [b'sxn', b'Sangir'], [b'sxo', b'Sorothaptic'], [b'sxr', b'Saaroa'], [b'sxs', b'Sasaru'], [b'sxu', b'Saxon, Upper'], [b'sxw', b'Gbe, Saxwe'], [b'sya', b'Siang'], [b'syb', b'Subanen, Central'], [b'syc', b'Syriac, Classical'], [b'syi', b'Seki'], [b'syk', b'Sukur'], [b'syl', b'Sylheti'], [b'sym', b'Samo, Maya'], [b'syn', b'Senaya'], [b'syo', b'Suoy'], [b'syr', b'Syriac'], [b'sys', b'Sinyar'], [b'syw', b'Kagate'], [b'syy', b'Al-Sayyid Bedouin Sign Language'], [b'sza', b'Semelai'], [b'szb', b'Ngalum'], [b'szc', b'Semaq Beri'], [b'szd', b'Seru'], [b'sze', b'Seze'], [b'szg', b'Sengele'], [b'szl', b'Silesian'], [b'szn', b'Sula'], [b'szp', b'Suabo'], [b'szv', b'Isu (Fako Division)'], [b'szw', b'Sawai'], [b'taa', b'Tanana, Lower'], [b'tab', b'Tabassaran'], [b'tac', b'Tarahumara, Lowland'], [b'tad', b'Tause'], [b'tae', b'Tariana'], [b'taf', 'Tapirap\xe9'], [b'tag', b'Tagoi'], [b'tah', b'Tahitian'], [b'taj', b'Tamang, Eastern'], [b'tak', b'Tala'], [b'tal', b'Tal'], [b'tam', b'Tamil'], [b'tan', b'Tangale'], [b'tao', b'Yami'], [b'tap', b'Taabwa'], [b'taq', b'Tamasheq'], [b'tar', b'Tarahumara, Central'], [b'tas', b'Tay Boi'], [b'tat', b'Tatar'], [b'tau', b'Tanana, Upper'], [b'tav', b'Tatuyo'], [b'taw', b'Tai'], [b'tax', b'Tamki'], [b'tay', b'Atayal'], [b'taz', b'Tocho'], [b'tba', 'Aikan\xe3'], [b'tbb', b'Tapeba'], [b'tbc', b'Takia'], [b'tbd', b'Kaki Ae'], [b'tbe', b'Tanimbili'], [b'tbf', b'Mandara'], [b'tbg', b'Tairora, North'], [b'tbh', b'Thurawal'], [b'tbi', b'Gaam'], [b'tbj', b'Tiang'], [b'tbk', b'Tagbanwa, Calamian'], [b'tbl', b'Tboli'], [b'tbm', b'Tagbu'], [b'tbn', b'Tunebo, Barro Negro'], [b'tbo', b'Tawala'], [b'tbp', b'Taworta'], [b'tbr', b'Tumtum'], [b'tbs', b'Tanguat'], [b'tbt', b'Tembo (Kitembo)'], [b'tbu', b'Tubar'], [b'tbv', b'Tobo'], [b'tbw', b'Tagbanwa'], [b'tbx', b'Kapin'], [b'tby', b'Tabaru'], [b'tbz', b'Ditammari'], [b'tca', b'Ticuna'], [b'tcb', b'Tanacross'], [b'tcc', b'Datooga'], [b'tcd', b'Tafi'], [b'tce', b'Tutchone, Southern'], [b'tcf', b"Me'phaa, Malinaltepec"], [b'tcg', b'Tamagario'], [b'tch', b'Creole English, Turks And Caicos'], [b'tci', 'W\xe1ra'], [b'tck', b'Tchitchege'], [b'tcl', b'Taman (Myanmar)'], [b'tcm', b'Tanahmerah'], [b'tcn', b'Tichurong'], [b'tco', b'Taungyo'], [b'tcp', b'Chin, Tawr'], [b'tcq', b'Kaiy'], [b'tcs', b'Creole, Torres Strait'], [b'tct', b"T'en"], [b'tcu', b'Tarahumara, Southeastern'], [b'tcw', 'Totonac, Tecpatl\xe1n'], [b'tcx', b'Toda'], [b'tcy', b'Tulu'], [b'tcz', b'Chin, Thado'], [b'tda', b'Tagdal'], [b'tdb', b'Panchpargania'], [b'tdc', 'Ember\xe1-Tad\xf3'], [b'tdd', 'Tai N\xfca'], [b'tde', b'Dogon, Tiranige Diga'], [b'tdf', b'Talieng'], [b'tdg', b'Tamang, Western'], [b'tdh', b'Thulung'], [b'tdi', b'Tomadino'], [b'tdj', b'Tajio'], [b'tdk', b'Tambas'], [b'tdl', b'Sur'], [b'tdn', b'Tondano'], [b'tdo', b'Teme'], [b'tdq', b'Tita'], [b'tdr', b'Todrah'], [b'tds', b'Doutai'], [b'tdt', b'Tetun Dili'], [b'tdu', b'Dusun, Tempasuk'], [b'tdv', b'Toro'], [b'tdx', b'Malagasy, Tandroy-Mahafaly'], [b'tdy', b'Tadyawan'], [b'tea', b'Temiar'], [b'teb', b'Tetete'], [b'tec', b'Terik'], [b'ted', b'Krumen, Tepo'], [b'tee', b'Tepehua, Huehuetla'], [b'tef', b'Teressa'], [b'teg', b'Teke-Tege'], [b'teh', b'Tehuelche'], [b'tei', b'Torricelli'], [b'tek', b'Teke, Ibali'], [b'tel', b'Telugu'], [b'tem', b'Timne'], [b'ten', b'Tama (Colombia)'], [b'teo', b'Teso'], [b'tep', b'Tepecano'], [b'teq', b'Temein'], [b'ter', b'Tereno'], [b'tes', b'Tengger'], [b'tet', b'Tetum'], [b'teu', b'Soo'], [b'tev', b'Teor'], [b'tew', b'Tewa (USA)'], [b'tex', b'Tennet'], [b'tey', b'Tulishi'], [b'tfi', b'Gbe, Tofin'], [b'tfn', b'Tanaina'], [b'tfo', b'Tefaro'], [b'tfr', b'Teribe'], [b'tft', b'Ternate'], [b'tga', b'Sagalla'], [b'tgb', b'Tobilung'], [b'tgc', b'Tigak'], [b'tgd', b'Ciwogai'], [b'tge', b'Tamang, Eastern Gorkha'], [b'tgf', b'Chalikha'], [b'tgh', b'Creole English, Tobagonian'], [b'tgi', b'Lawunuia'], [b'tgj', b'Tagin'], [b'tgk', b'Tajik'], [b'tgl', b'Tagalog'], [b'tgn', b'Tandaganon'], [b'tgo', b'Sudest'], [b'tgp', b'Tangoa'], [b'tgq', b'Tring'], [b'tgr', b'Tareng'], [b'tgs', b'Nume'], [b'tgt', b'Tagbanwa, Central'], [b'tgu', b'Tanggu'], [b'tgv', b'Tingui-Boto'], [b'tgw', b'Senoufo, Tagwana'], [b'tgx', b'Tagish'], [b'tgy', b'Togoyo'], [b'tgz', b'Tagalaka'], [b'tha', b'Thai'], [b'thc', b'Tai Hang Tong'], [b'thd', b'Thayore'], [b'the', b'Tharu, Chitwania'], [b'thf', b'Thangmi'], [b'thh', b'Tarahumara, Northern'], [b'thi', b'Tai Long'], [b'thk', b'Tharaka'], [b'thl', b'Tharu, Dangaura'], [b'thm', b'Aheu'], [b'thn', b'Thachanadan'], [b'thp', b'Thompson'], [b'thq', b'Tharu, Kochila'], [b'thr', b'Tharu, Rana'], [b'ths', b'Thakali'], [b'tht', b'Tahltan'], [b'thu', b'Thuri'], [b'thv', b'Tamahaq, Tahaggart'], [b'thw', b'Thudam'], [b'thx', b'The'], [b'thy', b'Tha'], [b'thz', b'Tamajeq, Tayart'], [b'tia', b'Tamazight, Tidikelt'], [b'tic', b'Tira'], [b'tid', b'Tidong'], [b'tif', b'Tifal'], [b'tig', b'Tigre'], [b'tih', b'Murut, Timugon'], [b'tii', b'Tiene'], [b'tij', b'Tilung'], [b'tik', b'Tikar'], [b'til', b'Tillamook'], [b'tim', b'Timbe'], [b'tin', b'Tindi'], [b'tio', b'Teop'], [b'tip', b'Trimuris'], [b'tiq', 'Ti\xe9fo'], [b'tir', b'Tigrinya'], [b'tis', b'Itneg, Masadiit'], [b'tit', b'Tinigua'], [b'tiu', b'Adasen'], [b'tiv', b'Tiv'], [b'tiw', b'Tiwi'], [b'tix', b'Tiwa, Southern'], [b'tiy', b'Tiruray'], [b'tiz', b'Tai Hongjin'], [b'tja', b'Tajuasohn'], [b'tjg', b'Tunjung'], [b'tji', b'Tujia, Northern'], [b'tjl', b'Tai Laing'], [b'tjm', b'Timucua'], [b'tjn', b'Tonjon'], [b'tjo', b'Tamazight, Temacine'], [b'tjs', b'Tujia, Southern'], [b'tju', b'Tjurruru'], [b'tjw', b'Djabwurrung'], [b'tka', 'Truk\xe1'], [b'tkb', b'Buksa'], [b'tkd', b'Tukudede'], [b'tke', b'Takwane'], [b'tkf', 'Tukumanf\xe9d'], [b'tkg', b'Malagasy, Tesaka'], [b'tkl', b'Tokelau'], [b'tkm', b'Takelma'], [b'tkn', b'Toku-No-Shima'], [b'tkp', b'Tikopia'], [b'tkq', b'Tee'], [b'tkr', b'Tsakhur'], [b'tks', b'Takestani'], [b'tkt', b'Tharu, Kathoriya'], [b'tku', b'Totonac, Upper Necaxa'], [b'tkw', b'Teanu'], [b'tkx', b'Tangko'], [b'tkz', b'Takua'], [b'tla', b'Tepehuan, Southwestern'], [b'tlb', b'Tobelo'], [b'tlc', b'Totonac, Yecuatla'], [b'tld', b'Talaud'], [b'tlf', b'Telefol'], [b'tlg', b'Tofanma'], [b'tlh', b'Klingon'], [b'tli', b'Tlingit'], [b'tlj', b'Talinga-Bwisi'], [b'tlk', b'Taloki'], [b'tll', b'Tetela'], [b'tlm', b'Tolomako'], [b'tln', b"Talondo'"], [b'tlo', b'Talodi'], [b'tlp', 'Totonac, Filomena Mata-Coahuitl\xe1n'], [b'tlq', b'Tai Loi'], [b'tlr', b'Talise'], [b'tls', b'Tambotalo'], [b'tlt', b'Teluti'], [b'tlu', b'Tulehu'], [b'tlv', b'Taliabu'], [b'tlx', b'Khehek'], [b'tly', b'Talysh'], [b'tma', b'Tama (Chad)'], [b'tmb', b'Katbol'], [b'tmc', b'Tumak'], [b'tmd', b'Haruai'], [b'tme', 'Trememb\xe9'], [b'tmf', b'Toba-Maskoy'], [b'tmg', 'Ternate\xf1o'], [b'tmh', b'Tamashek'], [b'tmi', b'Tutuba'], [b'tmj', b'Samarokena'], [b'tmk', b'Tamang, Northwestern'], [b'tml', b'Citak, Tamnim'], [b'tmm', b'Tai Thanh'], [b'tmn', b'Taman (Indonesia)'], [b'tmo', b'Temoq'], [b'tmp', 'Tai M\xe8ne'], [b'tmq', b'Tumleo'], [b'tmr', b'Aramaic, Jewish Babylonian (ca. 200-1200 CE)'], [b'tms', b'Tima'], [b'tmt', b'Tasmate'], [b'tmu', b'Iau'], [b'tmv', b'Tembo (Motembo)'], [b'tmw', b'Temuan'], [b'tmy', b'Tami'], [b'tmz', b'Tamanaku'], [b'tna', b'Tacana'], [b'tnb', b'Tunebo, Western'], [b'tnc', 'Tanimuca-Retuar\xe3'], [b'tnd', b'Tunebo, Angosturas'], [b'tne', b'Kallahan, Tinoc'], [b'tng', b'Tobanga'], [b'tnh', b'Maiani'], [b'tni', b'Tandia'], [b'tnk', b'Kwamera'], [b'tnl', b'Lenakel'], [b'tnm', b'Tabla'], [b'tnn', b'Tanna, North'], [b'tno', b'Toromono'], [b'tnp', b'Whitesands'], [b'tnq', b'Taino'], [b'tnr', 'M\xe9nik'], [b'tns', b'Tenis'], [b'tnt', b'Tontemboan'], [b'tnu', b'Tay Khang'], [b'tnv', b'Tangchangya'], [b'tnw', b'Tonsawang'], [b'tnx', b'Tanema'], [b'tny', b'Tongwe'], [b'tnz', b'Tonga (Thailand)'], [b'tob', b'Toba'], [b'toc', b'Totonac, Coyutla'], [b'tod', b'Toma'], [b'toe', b'Tomedes'], [b'tof', b'Gizrra'], [b'tog', b'Tonga (Nyasa)'], [b'toh', b'Gitonga'], [b'toi', b'Tonga (Zambia)'], [b'toj', b'Tojolabal'], [b'tol', b'Tolowa'], [b'tom', b'Tombulu'], [b'ton', b'Tonga (Tonga Islands)'], [b'too', 'Totonac, Xicotepec De Ju\xe1rez'], [b'top', b'Totonac, Papantla'], [b'toq', b'Toposa'], [b'tor', b'Banda, Togbo-Vara'], [b'tos', b'Totonac, Highland'], [b'tou', b'Tho'], [b'tov', b'Taromi, Upper'], [b'tow', b'Jemez'], [b'tox', b'Tobian'], [b'toy', b'Topoiyo'], [b'toz', b'To'], [b'tpa', b'Taupota'], [b'tpc', "Me'phaa, Azoy\xfa"], [b'tpe', b'Tippera'], [b'tpf', b'Tarpia'], [b'tpg', b'Kula'], [b'tpi', b'Tok Pisin'], [b'tpj', 'Tapiet\xe9'], [b'tpk', b'Tupinikin'], [b'tpl', b"Me'phaa, Tlacoapa"], [b'tpm', b'Tampulma'], [b'tpn', 'Tupinamb\xe1'], [b'tpo', b'Tai Pao'], [b'tpp', b'Tepehua, Pisaflores'], [b'tpq', b'Tukpa'], [b'tpr', 'Tupar\xed'], [b'tpt', b'Tepehua, Tlachichilco'], [b'tpu', b'Tampuan'], [b'tpv', b'Tanapag'], [b'tpw', 'Tup\xed'], [b'tpx', b"Me'phaa, Acatepec"], [b'tpy', b'Trumai'], [b'tpz', b'Tinputz'], [b'tqb', 'Temb\xe9'], [b'tql', b'Lehali'], [b'tqm', b'Turumsa'], [b'tqn', b'Tenino'], [b'tqo', b'Toaripi'], [b'tqp', b'Tomoip'], [b'tqq', b'Tunni'], [b'tqr', b'Torona'], [b'tqt', b'Totonac, Western'], [b'tqu', b'Touo'], [b'tqw', b'Tonkawa'], [b'tra', b'Tirahi'], [b'trb', b'Terebu'], [b'trc', b'Triqui, Copala'], [b'trd', b'Turi'], [b'tre', b'Tarangan, East'], [b'trf', b'Creole English, Trinidadian'], [b'trg', 'Lish\xe1n Did\xe1n'], [b'trh', b'Turaka'], [b'tri', 'Tri\xf3'], [b'trj', b'Toram'], [b'trl', b'Scottish, Traveller'], [b'trm', b'Tregami'], [b'trn', b'Trinitario'], [b'tro', b'Naga, Tarao'], [b'trp', b'Kok Borok'], [b'trq', 'Triqui, San Mart\xedn Itunyoso'], [b'trr', b'Taushiro'], [b'trs', b'Triqui, Chicahuaxtla'], [b'trt', b'Tunggare'], [b'tru', b'Turoyo'], [b'trv', b'Taroko'], [b'trw', b'Torwali'], [b'trx', b'Bidayuh, Tringgus-Sembaan'], [b'try', b'Turung'], [b'trz', 'Tor\xe1'], [b'tsa', b'Tsaangi'], [b'tsb', b'Tsamai'], [b'tsc', b'Tswa'], [b'tsd', b'Tsakonian'], [b'tse', b'Tunisian Sign Language'], [b'tsf', b'Tamang, Southwestern'], [b'tsg', b'Tausug'], [b'tsh', b'Tsuvan'], [b'tsi', b'Tsimshian'], [b'tsj', b'Tshangla'], [b'tsk', b'Tseku'], [b'tsl', "Ts'\xfcn-Lao"], [b'tsm', b'Turkish Sign Language'], [b'tsn', b'Tswana'], [b'tso', b'Tsonga'], [b'tsp', b'Toussian, Northern'], [b'tsq', b'Thai Sign Language'], [b'tsr', b'Akei'], [b'tss', b'Taiwan Sign Language'], [b'tst', b'Songway Kiini, Tondi'], [b'tsu', b'Tsou'], [b'tsv', b'Tsogo'], [b'tsw', b'Tsishingini'], [b'tsx', b'Mubami'], [b'tsy', b'Tebul Sign Language'], [b'tsz', b'Purepecha'], [b'tta', b'Tutelo'], [b'ttb', b'Gaa'], [b'ttc', b'Tektiteko'], [b'ttd', b'Tauade'], [b'tte', b'Bwanabwana'], [b'ttf', b'Tuotomb'], [b'ttg', b'Tutong'], [b'tth', b"Ta'oih, Upper"], [b'tti', b'Tobati'], [b'ttj', b'Tooro'], [b'ttk', b'Totoro'], [b'ttl', b'Totela'], [b'ttm', b'Tutchone, Northern'], [b'ttn', b'Towei'], [b'tto', b"Ta'oih, Lower"], [b'ttp', b'Tombelala'], [b'ttq', b'Tamajaq, Tawallammat'], [b'ttr', b'Tera'], [b'tts', b'Thai, Northeastern'], [b'ttt', b'Tat, Muslim'], [b'ttu', b'Torau'], [b'ttv', b'Titan'], [b'ttw', b'Long Wat'], [b'tty', b'Sikaritai'], [b'ttz', b'Tsum'], [b'tua', b'Wiarumus'], [b'tub', 'T\xfcbatulabal'], [b'tuc', b'Mutu'], [b'tud', 'Tux\xe1'], [b'tue', b'Tuyuca'], [b'tuf', b'Tunebo, Central'], [b'tug', b'Tunia'], [b'tuh', b'Taulil'], [b'tui', b'Tupuri'], [b'tuj', b'Tugutil'], [b'tuk', b'Turkmen'], [b'tul', b'Tula'], [b'tum', b'Tumbuka'], [b'tun', b'Tunica'], [b'tuo', b'Tucano'], [b'tuq', b'Tedaga'], [b'tur', b'Turkish'], [b'tus', b'Tuscarora'], [b'tuu', b'Tututni'], [b'tuv', b'Turkana'], [b'tux', 'Tuxin\xe1wa'], [b'tuy', b'Tugen'], [b'tuz', b'Turka'], [b'tva', b'Vaghua'], [b'tvd', b'Tsuvadi'], [b'tve', b"Te'un"], [b'tvk', b'Ambrym, Southeast'], [b'tvl', b'Tuvalu'], [b'tvm', b'Tela-Masbuar'], [b'tvn', b'Tavoyan'], [b'tvo', b'Tidore'], [b'tvs', b'Taveta'], [b'tvt', b'Naga, Tutsa'], [b'tvu', b'Tunen'], [b'tvw', b'Sedoa'], [b'tvy', b'Pidgin, Timor'], [b'twa', b'Twana'], [b'twb', b'Tawbuid, Western'], [b'twc', b'Teshenawa'], [b'twd', b'Twents'], [b'twe', b'Tewa (Indonesia)'], [b'twf', b'Tiwa, Northern'], [b'twg', b'Tereweng'], [b'twh', 'Tai D\xf3n'], [b'twi', b'Twi'], [b'twl', b'Tawara'], [b'twm', b'Monpa, Tawang'], [b'twn', b'Twendi'], [b'two', b'Tswapong'], [b'twp', b'Ere'], [b'twq', b'Tasawaq'], [b'twr', b'Tarahumara, Southwestern'], [b'twt', 'Turiw\xe1ra'], [b'twu', b'Termanu'], [b'tww', b'Tuwari'], [b'twx', b'Tewe'], [b'twy', b'Tawoyan'], [b'txa', b'Tombonuo'], [b'txb', b'Tokharian B'], [b'txc', b'Tsetsaut'], [b'txe', b'Totoli'], [b'txg', b'Tangut'], [b'txh', b'Thracian'], [b'txi', b'Ikpeng'], [b'txm', b'Tomini'], [b'txn', b'Tarangan, West'], [b'txo', b'Toto'], [b'txq', b'Tii'], [b'txr', b'Tartessian'], [b'txs', b'Tonsea'], [b'txt', b'Citak'], [b'txu', 'Kayap\xf3'], [b'txx', b'Tatana'], [b'txy', b'Malagasy, Tanosy'], [b'tya', b'Tauya'], [b'tye', b'Kyanga'], [b'tyh', b"O'du"], [b'tyi', b'Teke-Tsaayi'], [b'tyj', b'Tai Do'], [b'tyl', b'Thu Lao'], [b'tyn', b'Kombai'], [b'typ', b'Thaypan'], [b'tyr', b'Tai Daeng'], [b'tys', 'T\xe0y Sa Pa'], [b'tyt', 'T\xe0y Tac'], [b'tyu', b'Kua'], [b'tyv', b'Tuvinian'], [b'tyx', b'Teke-Tyee'], [b'tyz', 'T\xe0y'], [b'tza', b'Tanzanian Sign Language'], [b'tzh', b'Tzeltal'], [b'tzj', b"Tz'utujil"], [b'tzl', b'Talossan'], [b'tzm', b'Tamazight, Central Atlas'], [b'tzn', b'Tugun'], [b'tzo', b'Tzotzil'], [b'tzx', b'Tabriak'], [b'uam', 'Uamu\xe9'], [b'uan', b'Kuan'], [b'uar', b'Tairuma'], [b'uba', b'Ubang'], [b'ubi', b'Ubi'], [b'ubl', b"Bikol, Buhi'non"], [b'ubr', b'Ubir'], [b'ubu', b'Umbu-Ungu'], [b'uby', b'Ubykh'], [b'uda', b'Uda'], [b'ude', b'Udihe'], [b'udg', b'Muduga'], [b'udi', b'Udi'], [b'udj', b'Ujir'], [b'udl', b'Wuzlam'], [b'udm', b'Udmurt'], [b'udu', b'Uduk'], [b'ues', b'Kioko'], [b'ufi', b'Ufim'], [b'uga', b'Ugaritic'], [b'ugb', b'Kuku-Ugbanh'], [b'uge', b'Ughele'], [b'ugn', b'Ugandan Sign Language'], [b'ugo', b'Ugong'], [b'ugy', b'Uruguayan Sign Language'], [b'uha', b'Uhami'], [b'uhn', b'Damal'], [b'uig', b'Uighur'], [b'uis', b'Uisai'], [b'uiv', b'Iyive'], [b'uji', b'Tanjijili'], [b'uka', b'Kaburi'], [b'ukg', b'Ukuriguma'], [b'ukh', b'Ukhwejo'], [b'ukl', b'Ukrainian Sign Language'], [b'ukp', b'Ukpe-Bayobiri'], [b'ukq', b'Ukwa'], [b'ukr', b'Ukrainian'], [b'uks', 'Urub\xfa-Kaapor Sign Language'], [b'uku', b'Ukue'], [b'ukw', b'Ukwuani-Aboh-Ndoni'], [b'uky', b'Kuuk-Yak'], [b'ula', b'Fungwa'], [b'ulb', b'Ulukwumi'], [b'ulc', b'Ulch'], [b'ule', b'Lule'], [b'ulf', b'Usku'], [b'uli', b'Ulithian'], [b'ulk', b'Meriam'], [b'ull', b'Ullatan'], [b'ulm', b"Ulumanda'"], [b'uln', b'Unserdeutsch'], [b'ulu', b"Uma' Lung"], [b'ulw', b'Ulwa'], [b'uma', b'Umatilla'], [b'umb', b'Umbundu'], [b'umc', b'Marrucinian'], [b'umd', b'Umbindhamu'], [b'umg', b'Umbuygamu'], [b'umi', b'Ukit'], [b'umm', b'Umon'], [b'umn', b'Naga, Makyan'], [b'umo', 'Umot\xedna'], [b'ump', b'Umpila'], [b'umr', b'Umbugarla'], [b'ums', b'Pendau'], [b'umu', b'Munsee'], [b'una', b'Watut, North'], [b'und', b'Undetermined'], [b'une', b'Uneme'], [b'ung', b'Ngarinyin'], [b'unk', 'Enawen\xe9-Naw\xe9'], [b'unm', b'Unami'], [b'unn', b'Kurnai'], [b'unr', b'Mundari'], [b'unu', b'Unubahe'], [b'unx', b'Munda'], [b'unz', b'Kaili, Unde'], [b'uok', b'Uokha'], [b'upi', b'Umeda'], [b'upv', b'Uripiv-Wala-Rano-Atchin'], [b'ura', b'Urarina'], [b'urb', 'Urub\xfa-Kaapor'], [b'urc', b'Urningangg'], [b'urd', b'Urdu'], [b'ure', b'Uru'], [b'urf', b'Uradhi'], [b'urg', b'Urigina'], [b'urh', b'Urhobo'], [b'uri', b'Urim'], [b'urk', b"Urak Lawoi'"], [b'url', b'Urali'], [b'urm', b'Urapmin'], [b'urn', b'Uruangnirin'], [b'uro', b'Ura (Papua New Guinea)'], [b'urp', b'Uru-Pa-In'], [b'urr', b'Lehalurup'], [b'urt', b'Urat'], [b'uru', b'Urumi'], [b'urv', b'Uruava'], [b'urw', b'Sop'], [b'urx', b'Urimo'], [b'ury', b'Orya'], [b'urz', b'Uru-Eu-Wau-Wau'], [b'usa', b'Usarufa'], [b'ush', b'Ushojo'], [b'usi', b'Usui'], [b'usk', b'Usaghade'], [b'usp', b'Uspanteco'], [b'usu', b'Uya'], [b'uta', b'Otank'], [b'ute', b'Ute-Southern Paiute'], [b'utp', b'Amba (Solomon Islands)'], [b'utr', b'Etulo'], [b'utu', b'Utu'], [b'uum', b'Urum'], [b'uun', b'Kulon-Pazeh'], [b'uur', b'Ura (Vanuatu)'], [b'uuu', b'U'], [b'uve', b'Uvean, West'], [b'uvh', b'Uri'], [b'uvl', b'Lote'], [b'uwa', b'Kuku-Uwanh'], [b'uya', b'Doko-Uyanga'], [b'uzb', b'Uzbek'], [b'uzn', b'Uzbek, Northern'], [b'uzs', b'Uzbek, Southern'], [b'vaa', b'Vaagri Booli'], [b'vae', b'Vale'], [b'vaf', b'Vafsi'], [b'vag', b'Vagla'], [b'vah', b'Varhadi-Nagpuri'], [b'vai', b'Vai'], [b'vaj', b'Vasekela Bushman'], [b'val', b'Vehes'], [b'vam', b'Vanimo'], [b'van', b'Valman'], [b'vao', b'Vao'], [b'vap', b'Vaiphei'], [b'var', b'Huarijio'], [b'vas', b'Vasavi'], [b'vau', b'Vanuma'], [b'vav', b'Varli'], [b'vay', b'Wayu'], [b'vbb', b'Babar, Southeast'], [b'vbk', b'Bontok, Southwestern'], [b'vec', b'Venetian'], [b'ved', b'Veddah'], [b'vel', b'Veluws'], [b'vem', b'Vemgo-Mabas'], [b'ven', b'Venda'], [b'veo', 'Venture\xf1o'], [b'vep', b'Veps'], [b'ver', b'Mom Jango'], [b'vgr', b'Vaghri'], [b'vgt', b'Vlaamse Gebarentaal'], [b'vic', b'Creole English, Virgin Islands'], [b'vid', b'Vidunda'], [b'vie', b'Vietnamese'], [b'vif', b'Vili'], [b'vig', b'Viemo'], [b'vil', b'Vilela'], [b'vin', b'Vinza'], [b'vis', b'Vishavan'], [b'vit', b'Viti'], [b'viv', b'Iduna'], [b'vka', b'Kariyarra'], [b'vki', b'Ija-Zuba'], [b'vkj', b'Kujarge'], [b'vkk', b'Kaur'], [b'vkl', b'Kulisusu'], [b'vkm', b'Kamakan'], [b'vko', b'Kodeoha'], [b'vkp', b'Creole Portuguese, Korlai'], [b'vkt', b'Malay, Tenggarong Kutai'], [b'vku', b'Kurrama'], [b'vlp', b'Valpei'], [b'vls', b'Vlaams'], [b'vma', b'Martuyhunira'], [b'vmb', b'Barbaram'], [b'vmc', b'Mixtec, Juxtlahuaca'], [b'vmd', b'Koraga, Mudu'], [b'vme', b'Masela, East'], [b'vmf', 'Mainfr\xe4nkisch'], [b'vmg', b'Lungalunga'], [b'vmh', b'Maraghei'], [b'vmi', b'Miwa'], [b'vmj', b'Mixtec, Ixtayutla'], [b'vmk', b'Makhuwa-Shirima'], [b'vml', b'Malgana'], [b'vmm', b'Mixtec, Mitlatongo'], [b'vmp', b'Mazatec, Soyaltepec'], [b'vmq', b'Mixtec, Soyaltepec'], [b'vmr', b'Marenje'], [b'vms', b'Moksela'], [b'vmu', b'Muluridyi'], [b'vmv', b'Maidu, Valley'], [b'vmw', b'Makhuwa'], [b'vmx', b'Mixtec, Tamazola'], [b'vmy', b'Mazatec, Ayautla'], [b'vmz', 'Mazatec, Mazatl\xe1n'], [b'vnk', b'Vano'], [b'vnm', b'Vinmavis'], [b'vnp', b'Vunapu'], [b'vol', 'Volap\xfck'], [b'vor', b'Voro'], [b'vot', b'Votic'], [b'vra', b"Vera'a"], [b'vro', 'V\xf5ro'], [b'vrs', b'Varisi'], [b'vrt', b'Burmbar'], [b'vsi', b'Moldova Sign Language'], [b'vsl', b'Venezuelan Sign Language'], [b'vsv', b'Valencian Sign Language'], [b'vto', b'Vitou'], [b'vum', b'Vumbu'], [b'vun', b'Vunjo'], [b'vut', b'Vute'], [b'vwa', b'Awa (China)'], [b'waa', b'Walla Walla'], [b'wab', b'Wab'], [b'wac', b'Wasco-Wishram'], [b'wad', b'Wandamen'], [b'wae', b'Walser'], [b'waf', 'Wakon\xe1'], [b'wag', b"Wa'ema"], [b'wah', b'Watubela'], [b'wai', b'Wares'], [b'waj', b'Waffa'], [b'wal', b'Wolaytta'], [b'wam', b'Wampanoag'], [b'wan', b'Wan'], [b'wao', b'Wappo'], [b'wap', b'Wapishana'], [b'waq', b'Wageman'], [b'war', b'Waray (Philippines)'], [b'was', b'Washo'], [b'wat', b'Kaninuwa'], [b'wau', 'Waur\xe1'], [b'wav', b'Waka'], [b'waw', b'Waiwai'], [b'wax', b'Watam'], [b'way', b'Wayana'], [b'waz', b'Wampur'], [b'wba', b'Warao'], [b'wbb', b'Wabo'], [b'wbe', b'Waritai'], [b'wbf', b'Wara'], [b'wbh', b'Wanda'], [b'wbi', b'Vwanji'], [b'wbj', b'Alagwa'], [b'wbk', b'Waigali'], [b'wbl', b'Wakhi'], [b'wbm', b'Wa'], [b'wbp', b'Warlpiri'], [b'wbq', b'Waddar'], [b'wbr', b'Wagdi'], [b'wbt', b'Wanman'], [b'wbv', b'Wajarri'], [b'wbw', b'Woi'], [b'wca', 'Yanom\xe1mi'], [b'wci', b'Gbe, Waci'], [b'wdd', b'Wandji'], [b'wdg', b'Wadaginam'], [b'wdj', b'Wadjiginy'], [b'wdk', b'Wadikali'], [b'wdu', b'Wadjigu'], [b'wdy', b'Wadjabangayi'], [b'wea', b'Wewaw'], [b'wec', 'W\xe8 Western'], [b'wed', b'Wedau'], [b'weg', b'Wergaia'], [b'weh', b'Weh'], [b'wei', b'Kiunum'], [b'wem', b'Gbe, Weme'], [b'weo', b'Wemale'], [b'wep', b'Westphalien'], [b'wer', b'Weri'], [b'wes', b'Pidgin, Cameroon'], [b'wet', b'Perai'], [b'weu', b'Chin, Rawngtu'], [b'wew', b'Wejewa'], [b'wfg', b'Yafi'], [b'wga', b'Wagaya'], [b'wgb', b'Wagawaga'], [b'wgg', b'Wangganguru'], [b'wgi', b'Wahgi'], [b'wgo', b'Waigeo'], [b'wgu', b'Wirangu'], [b'wgy', b'Warrgamay'], [b'wha', b'Manusela'], [b'whg', b'Wahgi, North'], [b'whk', b'Kenyah, Wahau'], [b'whu', b'Kayan, Wahau'], [b'wib', b'Toussian, Southern'], [b'wic', b'Wichita'], [b'wie', b'Wik-Epa'], [b'wif', b'Wik-Keyangan'], [b'wig', b'Wik-Ngathana'], [b'wih', b"Wik-Me'anha"], [b'wii', b'Minidien'], [b'wij', b'Wik-Iiyanh'], [b'wik', b'Wikalkan'], [b'wil', b'Wilawila'], [b'wim', b'Wik-Mungkan'], [b'win', b'Ho-Chunk'], [b'wir', 'Wiraf\xe9d'], [b'wiu', b'Wiru'], [b'wiv', b'Vitu'], [b'wiy', b'Wiyot'], [b'wja', b'Waja'], [b'wji', b'Warji'], [b'wka', b"Kw'adza"], [b'wkb', b'Kumbaran'], [b'wkd', b'Wakde'], [b'wkl', b'Kalanadi'], [b'wku', b'Kunduvadi'], [b'wkw', b'Wakawaka'], [b'wky', b'Wangkayutyuru'], [b'wla', b'Walio'], [b'wlc', b'Comorian, Mwali'], [b'wle', b'Wolane'], [b'wlg', b'Kunbarlang'], [b'wli', b'Waioli'], [b'wlk', b'Wailaki'], [b'wll', b'Wali (Sudan)'], [b'wlm', b'Welsh, Middle'], [b'wln', b'Walloon'], [b'wlo', b'Wolio'], [b'wlr', b'Wailapa'], [b'wls', b'Wallisian'], [b'wlu', b'Wuliwuli'], [b'wlv', 'Wich\xed Lhamt\xe9s Vejoz'], [b'wlw', b'Walak'], [b'wlx', b'Wali (Ghana)'], [b'wly', b'Waling'], [b'wma', b'Mawa (Nigeria)'], [b'wmb', b'Wambaya'], [b'wmc', b'Wamas'], [b'wmd', 'Mamaind\xe9'], [b'wme', b'Wambule'], [b'wmh', b"Waima'a"], [b'wmi', b'Wamin'], [b'wmm', b'Maiwa (Indonesia)'], [b'wmn', b'Waamwang'], [b'wmo', b'Wom (Papua New Guinea)'], [b'wms', b'Wambon'], [b'wmt', b'Walmajarri'], [b'wmw', b'Mwani'], [b'wmx', b'Womo'], [b'wnb', b'Wanambre'], [b'wnc', b'Wantoat'], [b'wnd', b'Wandarang'], [b'wne', b'Waneci'], [b'wng', b'Wanggom'], [b'wni', b'Comorian, Ndzwani'], [b'wnk', b'Wanukaka'], [b'wnm', b'Wanggamala'], [b'wnn', b'Wunumara'], [b'wno', b'Wano'], [b'wnp', b'Wanap'], [b'wnu', b'Usan'], [b'wnw', b'Wintu'], [b'wny', b'Wanyi'], [b'woa', b'Tyaraity'], [b'wob', 'W\xe8 Northern'], [b'woc', b'Wogeo'], [b'wod', b'Wolani'], [b'woe', b'Woleaian'], [b'wof', b'Wolof, Gambian'], [b'wog', b'Wogamusin'], [b'woi', b'Kamang'], [b'wok', b'Longto'], [b'wol', b'Wolof'], [b'wom', b'Wom (Nigeria)'], [b'won', b'Wongo'], [b'woo', b'Manombai'], [b'wor', b'Woria'], [b'wos', b'Hanga Hundi'], [b'wow', b'Wawonii'], [b'woy', b'Weyto'], [b'wpc', b'Maco'], [b'wra', b'Warapu'], [b'wrb', b'Warluwara'], [b'wrd', b'Warduji'], [b'wrg', b'Warungu'], [b'wrh', b'Wiradhuri'], [b'wri', b'Wariyangga'], [b'wrk', b'Garrwa'], [b'wrl', b'Warlmanpa'], [b'wrm', b'Warumungu'], [b'wrn', b'Warnang'], [b'wro', b'Worrorra'], [b'wrp', b'Waropen'], [b'wrr', b'Wardaman'], [b'wrs', b'Waris'], [b'wru', b'Waru'], [b'wrv', b'Waruna'], [b'wrw', b'Gugu Warra'], [b'wrx', b'Wae Rana'], [b'wry', b'Merwari'], [b'wrz', b'Waray (Australia)'], [b'wsa', b'Warembori'], [b'wsi', b'Wusi'], [b'wsk', b'Waskia'], [b'wsr', b'Owenia'], [b'wss', b'Wasa'], [b'wsu', b'Wasu'], [b'wsv', b'Wotapuri-Katarqalai'], [b'wtf', b'Watiwa'], [b'wth', b'Wathawurrung'], [b'wti', b'Berta'], [b'wtk', b'Watakataui'], [b'wtm', b'Mewati'], [b'wtw', b'Wotu'], [b'wua', b'Wikngenchera'], [b'wub', b'Wunambal'], [b'wud', b'Wudu'], [b'wuh', b'Wutunhua'], [b'wul', b'Silimo'], [b'wum', b'Wumbvu'], [b'wun', b'Bungu'], [b'wur', b'Wurrugu'], [b'wut', b'Wutung'], [b'wuu', b'Chinese, Wu'], [b'wuv', b'Wuvulu-Aua'], [b'wux', b'Wulna'], [b'wuy', b'Wauyai'], [b'wwa', b'Waama'], [b'wwb', b'Wakabunga'], [b'wwo', b'Wetamut'], [b'wwr', b'Warrwa'], [b'www', b'Wawa'], [b'wxa', b'Waxianghua'], [b'wxw', b'Wardandi'], [b'wya', b'Wyandot'], [b'wyb', b'Wangaaybuwan-Ngiyambaa'], [b'wyi', b'Woiwurrung'], [b'wym', b'Wymysorys'], [b'wyr', 'Wayor\xf3'], [b'wyy', b'Fijian, Western'], [b'xaa', b'Arabic, Andalusian'], [b'xab', b'Sambe'], [b'xac', b'Kachari'], [b'xad', b'Adai'], [b'xae', b'Aequian'], [b'xag', b'Aghwan'], [b'xai', 'Kaimb\xe9'], [b'xal', b'Kalmyk'], [b'xam', b'/Xam'], [b'xan', b'Xamtanga'], [b'xao', b'Khao'], [b'xap', b'Apalachee'], [b'xaq', b'Aquitanian'], [b'xar', b'Karami'], [b'xas', b'Kamas'], [b'xat', b'Katawixi'], [b'xau', b'Kauwera'], [b'xav', 'Xav\xe1nte'], [b'xaw', b'Kawaiisu'], [b'xay', b'Kayan Mahakam'], [b'xba', b'Kamba (Brazil)'], [b'xbb', b'Burdekin, Lower'], [b'xbc', b'Bactrian'], [b'xbd', b'Bindal'], [b'xbe', b'Bigambal'], [b'xbg', b'Bunganditj'], [b'xbi', b'Kombio'], [b'xbj', b'Birrpayi'], [b'xbm', b'Breton, Middle'], [b'xbn', b'Kenaboi'], [b'xbo', b'Bolgarian'], [b'xbp', b'Bibbulman'], [b'xbr', b'Kambera'], [b'xbw', 'Kambiw\xe1'], [b'xbx', 'Kabix\xed'], [b'xby', b'Batyala'], [b'xcb', b'Cumbric'], [b'xcc', b'Camunic'], [b'xce', b'Celtiberian'], [b'xcg', b'Gaulish, Cisalpine'], [b'xch', b'Chemakum'], [b'xcl', b'Armenian, Classical'], [b'xcm', b'Comecrudo'], [b'xcn', b'Cotoname'], [b'xco', b'Chorasmian'], [b'xcr', b'Carian'], [b'xct', b'Tibetan, Classical'], [b'xcu', b'Curonian'], [b'xcv', b'Chuvantsy'], [b'xcw', b'Coahuilteco'], [b'xcy', b'Cayuse'], [b'xda', b'Darkinyung'], [b'xdc', b'Dacian'], [b'xdk', b'Dharuk'], [b'xdm', b'Edomite'], [b'xdy', b'Dayak, Malayic'], [b'xeb', b'Eblan'], [b'xed', b'Hdi'], [b'xeg', b'//Xegwi'], [b'xel', b'Kelo'], [b'xem', b'Kembayan'], [b'xep', b'Epi-Olmec'], [b'xer', 'Xer\xe9nte'], [b'xes', b'Kesawai'], [b'xet', 'Xet\xe1'], [b'xeu', b'Keoru-Ahia'], [b'xfa', b'Faliscan'], [b'xga', b'Galatian'], [b'xgb', b'Gbin'], [b'xgd', b'Gudang'], [b'xgf', 'Gabrielino-Fernande\xf1o'], [b'xgg', b'Goreng'], [b'xgi', b'Garingbal'], [b'xgl', b'Galindan'], [b'xgm', b'Guwinmal'], [b'xgr', b'Garza'], [b'xgu', b'Unggumi'], [b'xgw', b'Guwa'], [b'xha', b'Harami'], [b'xhc', b'Hunnic'], [b'xhd', b'Hadrami'], [b'xhe', b'Khetrani'], [b'xho', b'Xhosa'], [b'xhr', b'Hernican'], [b'xht', b'Hattic'], [b'xhu', b'Hurrian'], [b'xhv', b'Khua'], [b'xib', b'Iberian'], [b'xii', b'Xiri'], [b'xil', b'Illyrian'], [b'xin', b'Xinca'], [b'xip', 'Xipin\xe1wa'], [b'xir', 'Xiri\xe2na'], [b'xiv', b'Indus Valley Language'], [b'xiy', b'Xipaya'], [b'xjb', b'Minjungbal'], [b'xjt', b'Jaitmatang'], [b'xka', b'Kalkoti'], [b'xkb', b'Nago, Northern'], [b'xkc', b"Kho'ini"], [b'xkd', b'Kayan, Mendalam'], [b'xke', b'Kereho'], [b'xkf', b'Khengkha'], [b'xkg', b'Kagoro'], [b'xkh', b'Karahawyana'], [b'xki', b'Kenyan Sign Language'], [b'xkj', b'Kajali'], [b'xkk', b"Kaco'"], [b'xkl', b'Mainstream Kenyah'], [b'xkn', b'Kayan, Kayan River'], [b'xko', b'Kiorr'], [b'xkp', b'Kabatei'], [b'xkq', b'Koroni'], [b'xkr', 'Xakriab\xe1'], [b'xks', b'Kumbewaha'], [b'xkt', b'Kantosi'], [b'xku', b'Kaamba'], [b'xkv', b'Kgalagadi'], [b'xkw', b'Kembra'], [b'xkx', b'Karore'], [b'xky', b"Uma' Lasan"], [b'xkz', b'Kurtokha'], [b'xla', b'Kamula'], [b'xlb', b'Loup B'], [b'xlc', b'Lycian'], [b'xld', b'Lydian'], [b'xle', b'Lemnian'], [b'xlg', b'Ligurian (Ancient)'], [b'xli', b'Liburnian'], [b'xln', b'Alanic'], [b'xlo', b'Loup A'], [b'xlp', b'Lepontic'], [b'xls', b'Lusitanian'], [b'xlu', b'Luwian, Cuneiform'], [b'xly', b'Elymian'], [b'xma', b'Mushungulu'], [b'xmb', b'Mbonga'], [b'xmc', b'Makhuwa-Marrevone'], [b'xmd', b'Mbudum'], [b'xme', b'Median'], [b'xmf', b'Mingrelian'], [b'xmg', b'Mengaka'], [b'xmh', b'Kuku-Muminh'], [b'xmj', b'Majera'], [b'xmk', b'Macedonian, Ancient'], [b'xml', b'Malaysian Sign Language'], [b'xmm', b'Malay, Manado'], [b'xmn', b'Persian, Manichaean Middle'], [b'xmo', b'Morerebi'], [b'xmp', b"Kuku-Mu'inh"], [b'xmq', b'Kuku-Mangk'], [b'xmr', b'Meroitic'], [b'xms', b'Moroccan Sign Language'], [b'xmt', b'Matbat'], [b'xmu', b'Kamu'], [b'xmv', b'Malagasy, Antankarana'], [b'xmw', b'Malagasy, Tsimihety'], [b'xmx', b'Maden'], [b'xmy', b'Mayaguduna'], [b'xmz', b'Mori Bawah'], [b'xna', b'North Arabian, Ancient'], [b'xnb', b'Kanakanabu'], [b'xng', b'Mongolian, Middle'], [b'xnh', b'Kuanhua'], [b'xni', b'Ngarigu'], [b'xnk', b'Nganakarti'], [b'xnn', b'Kankanay, Northern'], [b'xno', b'Anglo-Norman'], [b'xnr', b'Kangri'], [b'xns', b'Kanashi'], [b'xnt', b'Narragansett'], [b'xnu', b'Nukunul'], [b'xny', b'Nyiyaparli'], [b'xnz', b'Kenzi'], [b'xoc', b"O'chi'chi'"], [b'xod', b'Kokoda'], [b'xog', b'Soga'], [b'xoi', b'Kominimung'], [b'xok', b'Xokleng'], [b'xom', b'Komo (Sudan)'], [b'xon', b'Konkomba'], [b'xoo', 'Xukur\xfa'], [b'xop', b'Kopar'], [b'xor', b'Korubo'], [b'xow', b'Kowaki'], [b'xpa', b'Pirriya'], [b'xpc', b'Pecheneg'], [b'xpe', b'Kpelle, Liberia'], [b'xpg', b'Phrygian'], [b'xpi', b'Pictish'], [b'xpj', b'Mpalitjanh'], [b'xpk', b'Pano, Kulina'], [b'xpm', b'Pumpokol'], [b'xpn', 'Kapinaw\xe1'], [b'xpo', b'Pochutec'], [b'xpp', b'Puyo-Paekche'], [b'xpq', b'Mohegan-Pequot'], [b'xpr', b'Parthian'], [b'xps', b'Pisidian'], [b'xpt', b'Punthamara'], [b'xpu', b'Punic'], [b'xpy', b'Puyo'], [b'xqa', b'Karakhanid'], [b'xqt', b'Qatabanian'], [b'xra', 'Krah\xf4'], [b'xrb', b'Karaboro, Eastern'], [b'xrd', b'Gundungurra'], [b'xre', b'Kreye'], [b'xrg', b'Minang'], [b'xri', b'Krikati-Timbira'], [b'xrm', b'Armazic'], [b'xrn', b'Arin'], [b'xrq', b'Karranga'], [b'xrr', b'Raetic'], [b'xrt', b'Aranama-Tamique'], [b'xru', b'Marriammu'], [b'xrw', b'Karawa'], [b'xsa', b'Sabaean'], [b'xsb', b'Sambal'], [b'xsc', b'Scythian'], [b'xsd', b'Sidetic'], [b'xse', b'Sempan'], [b'xsh', b'Shamang'], [b'xsi', b'Sio'], [b'xsj', b'Subi'], [b'xsl', b'Slavey, South'], [b'xsm', b'Kasem'], [b'xsn', b'Sanga (Nigeria)'], [b'xso', b'Solano'], [b'xsp', b'Silopi'], [b'xsq', b'Makhuwa-Saka'], [b'xsr', b'Sherpa'], [b'xss', b'Assan'], [b'xsu', 'Sanum\xe1'], [b'xsv', b'Sudovian'], [b'xsy', b'Saisiyat'], [b'xta', b'Mixtec, Alcozauca'], [b'xtb', b'Mixtec, Chazumba'], [b'xtc', b'Katcha-Kadugli-Miri'], [b'xtd', b'Mixtec, Diuxi-Tilantongo'], [b'xte', b'Ketengban'], [b'xtg', b'Gaulish, Transalpine'], [b'xth', b'Yitha Yitha'], [b'xti', b'Mixtec, Sinicahua'], [b'xtj', b'Mixtec, San Juan Teita'], [b'xtl', b'Mixtec, Tijaltepec'], [b'xtm', 'Mixtec, Magdalena Pe\xf1asco'], [b'xtn', b'Mixtec, Northern Tlaxiaco'], [b'xto', b'Tokharian A'], [b'xtp', b'Mixtec, San Miguel Piedras'], [b'xtq', b'Tumshuqese'], [b'xtr', b'Tripuri, Early'], [b'xts', b'Mixtec, Sindihui'], [b'xtt', b'Mixtec, Tacahua'], [b'xtu', b'Mixtec, Cuyamecalco'], [b'xtv', b'Thawa'], [b'xtw', 'Tawand\xea'], [b'xty', b'Mixtec, Yoloxochitl'], [b'xtz', b'Tasmanian'], [b'xua', b'Kurumba, Alu'], [b'xub', b'Kurumba, Betta'], [b'xud', b'Umiida'], [b'xug', b'Kunigami'], [b'xuj', b'Kurumba, Jennu'], [b'xul', b'Ngunawal'], [b'xum', b'Umbrian'], [b'xun', b'Unggaranggu'], [b'xuo', b'Kuo'], [b'xup', b'Umpqua, Upper'], [b'xur', b'Urartian'], [b'xut', b'Kuthant'], [b'xuu', b'Kxoe'], [b'xve', b'Venetic'], [b'xvi', b'Kamviri'], [b'xvn', b'Vandalic'], [b'xvo', b'Volscian'], [b'xvs', b'Vestinian'], [b'xwa', b'Kwaza'], [b'xwc', b'Woccon'], [b'xwd', b'Wadi Wadi'], [b'xwe', b'Gbe, Xwela'], [b'xwg', b'Kwegu'], [b'xwj', b'Wajuk'], [b'xwk', b'Wangkumara'], [b'xwl', b'Gbe, Western Xwla'], [b'xwo', b'Oirat, Written'], [b'xwr', b'Kwerba Mamberamo'], [b'xwt', b'Wotjobaluk'], [b'xww', b'Wemba Wemba'], [b'xxb', b'Boro (Ghana)'], [b'xxk', b"Ke'o"], [b'xxm', b'Minkin'], [b'xxr', 'Korop\xf3'], [b'xxt', b'Tambora'], [b'xya', b'Yaygir'], [b'xyb', b'Yandjibara'], [b'xyj', b'Mayi-Yapi'], [b'xyk', b'Mayi-Kulan'], [b'xyl', b'Yalakalore'], [b'xyt', b'Mayi-Thakurti'], [b'xyy', b'Yorta Yorta'], [b'xzh', b'Zhang-Zhung'], [b'xzm', b'Zemgalian'], [b'xzp', b'Zapotec, Ancient'], [b'yaa', b'Yaminahua'], [b'yab', b'Yuhup'], [b'yac', b'Yali, Pass Valley'], [b'yad', b'Yagua'], [b'yae', 'Pum\xe9'], [b'yaf', b'Yaka (Democratic Republic of Congo)'], [b'yag', 'Y\xe1mana'], [b'yah', b'Yazgulyam'], [b'yai', b'Yagnobi'], [b'yaj', b'Banda-Yangere'], [b'yak', b'Yakama'], [b'yal', b'Yalunka'], [b'yam', b'Yamba'], [b'yan', b'Mayangna'], [b'yao', b'Yao'], [b'yap', b'Yapese'], [b'yaq', b'Yaqui'], [b'yar', b'Yabarana'], [b'yas', b'Nugunu (Cameroon)'], [b'yat', b'Yambeta'], [b'yau', b'Yuwana'], [b'yav', b'Yangben'], [b'yaw', 'Yawalapit\xed'], [b'yax', b'Yauma'], [b'yay', b'Agwagwune'], [b'yaz', b'Lokaa'], [b'yba', b'Yala'], [b'ybb', b'Yemba'], [b'ybe', b'Yugur, West'], [b'ybh', b'Yakha'], [b'ybi', b'Yamphu'], [b'ybj', b'Hasha'], [b'ybk', b'Bokha'], [b'ybl', b'Yukuben'], [b'ybm', b'Yaben'], [b'ybn', 'Yaba\xe2na'], [b'ybo', b'Yabong'], [b'ybx', b'Yawiyo'], [b'yby', b'Yaweyuha'], [b'ych', b'Chesu'], [b'ycl', b'Lolopo'], [b'ycn', b'Yucuna'], [b'ycp', b'Chepya'], [b'yda', b'Yanda'], [b'ydd', b'Yiddish, Eastern'], [b'yde', b'Yangum Dey'], [b'ydg', b'Yidgha'], [b'ydk', b'Yoidik'], [b'yds', b'Yiddish Sign Language'], [b'yea', b'Ravula'], [b'yec', b'Yeniche'], [b'yee', b'Yimas'], [b'yei', b'Yeni'], [b'yej', b'Yevanic'], [b'yel', b'Yela'], [b'yer', b'Tarok'], [b'yes', b'Nyankpa'], [b'yet', b'Yetfa'], [b'yeu', b'Yerukula'], [b'yev', b'Yapunda'], [b'yey', b'Yeyi'], [b'yga', b'Malyangapa'], [b'ygi', b'Yiningayi'], [b'ygl', b'Yangum Gel'], [b'ygm', b'Yagomi'], [b'ygp', b'Gepo'], [b'ygr', b'Yagaria'], [b'ygu', b'Yugul'], [b'ygw', b'Yagwoia'], [b'yha', b'Buyang, Baha'], [b'yhd', b'Arabic, Judeo-Iraqi'], [b'yhl', b'Phowa, Hlepho'], [b'yia', b'Yinggarda'], [b'yid', b'Yiddish'], [b'yif', b'Ache'], [b'yig', b'Nasu, Wusa'], [b'yih', b'Yiddish, Western'], [b'yii', b'Yidiny'], [b'yij', b'Yindjibarndi'], [b'yik', b'Lalo, Dongshanba'], [b'yil', b'Yindjilandji'], [b'yim', b'Naga, Yimchungru'], [b'yin', b'Yinchia'], [b'yip', b'Pholo'], [b'yiq', b'Miqie'], [b'yir', b'Awyu, North'], [b'yis', b'Yis'], [b'yit', b'Lalu, Eastern'], [b'yiu', b'Awu'], [b'yiv', b'Nisu, Northern'], [b'yix', b'Yi, Axi'], [b'yiz', b'Azhe'], [b'yka', b'Yakan'], [b'ykg', b'Yukaghir, Northern'], [b'yki', b'Yoke'], [b'ykk', b'Yakaikeke'], [b'ykl', b'Khlula'], [b'ykm', b'Kap'], [b'ykn', b'Kua-nsi'], [b'yko', b'Yasa'], [b'ykr', b'Yekora'], [b'ykt', b'Kathu'], [b'yku', b'Kuamasi'], [b'yky', b'Yakoma'], [b'yla', b'Yaul'], [b'ylb', b'Yaleba'], [b'yle', b'Yele'], [b'ylg', b'Yelogu'], [b'yli', b'Yali, Angguruk'], [b'yll', b'Yil'], [b'ylm', b'Limi'], [b'yln', b'Buyang, Langnian'], [b'ylo', b'Yi, Naluo'], [b'ylr', b'Yalarnnga'], [b'ylu', b'Aribwaung'], [b'yly', 'Ny\xe2layu'], [b'ymb', b'Yambes'], [b'ymc', b'Muji, Southern'], [b'ymd', b'Muda'], [b'yme', b'Yameo'], [b'ymg', b'Yamongeri'], [b'ymh', b'Mili'], [b'ymi', b'Moji'], [b'ymk', b'Makwe'], [b'yml', b'Iamalele'], [b'ymm', b'Maay'], [b'ymn', b'Yamna'], [b'ymo', b'Yangum Mon'], [b'ymp', b'Yamap'], [b'ymq', b'Muji, Qila'], [b'ymr', b'Malasar'], [b'yms', b'Mysian'], [b'ymt', b'Mator-Taygi-Karagas'], [b'ymx', b'Muji, Northern'], [b'ymz', b'Muzi'], [b'yna', b'Aluo'], [b'ynd', b'Yandruwandha'], [b'yne', b"Lang'e"], [b'yng', b'Yango'], [b'ynh', b'Yangho'], [b'ynk', b'Yupik, Naukan'], [b'ynl', b'Yangulam'], [b'ynn', b'Yana'], [b'yno', b'Yong'], [b'ynq', b'Yendang'], [b'yns', b'Yansi'], [b'ynu', b'Yahuna'], [b'yob', b'Yoba'], [b'yog', b'Yogad'], [b'yoi', b'Yonaguni'], [b'yok', b'Yokuts'], [b'yol', b'Yola'], [b'yom', b'Yombe'], [b'yon', b'Yongkom'], [b'yor', b'Yoruba'], [b'yot', b'Yotti'], [b'yox', b'Yoron'], [b'yoy', b'Yoy'], [b'ypa', b'Phala'], [b'ypb', b'Phowa, Labo'], [b'ypg', b'Phola'], [b'yph', b'Phupha'], [b'ypm', b'Phuma'], [b'ypn', b'Phowa, Ani'], [b'ypo', b'Phola, Alo'], [b'ypp', b'Phupa'], [b'ypz', b'Phuza'], [b'yra', b'Yerakai'], [b'yrb', b'Yareba'], [b'yre', 'Yaour\xe9'], [b'yri', 'Yar\xed'], [b'yrk', b'Nenets'], [b'yrl', b'Nhengatu'], [b'yrm', b'Yirrk-Mel'], [b'yrn', b'Yerong'], [b'yrs', b'Yarsun'], [b'yrw', b'Yarawata'], [b'yry', b'Yarluyandi'], [b'ysc', b'Yassic'], [b'ysd', b'Samatao'], [b'ysg', b'Sonaga'], [b'ysl', b'Yugoslavian Sign Language'], [b'ysn', b'Sani'], [b'yso', b'Nisi (China)'], [b'ysp', b'Lolopo, Southern'], [b'ysr', b'Yupik, Sirenik'], [b'yss', b'Yessan-Mayo'], [b'ysy', b'Sanie'], [b'yta', b'Talu'], [b'ytl', b'Tanglang'], [b'ytp', b'Thopho'], [b'ytw', b'Yout Wam'], [b'yty', b'Yatay'], [b'yua', b'Yucateco'], [b'yub', b'Yugambal'], [b'yuc', b'Yuchi'], [b'yud', b'Arabic, Judeo-Tripolitanian'], [b'yue', b'Chinese, Yue'], [b'yuf', b'Havasupai-Walapai-Yavapai'], [b'yug', b'Yug'], [b'yui', 'Yurut\xed'], [b'yuj', b'Karkar-Yuri'], [b'yuk', b'Yuki'], [b'yul', b'Yulu'], [b'yum', b'Quechan'], [b'yun', b'Bena (Nigeria)'], [b'yup', b'Yukpa'], [b'yuq', b'Yuqui'], [b'yur', b'Yurok'], [b'yut', b'Yopno'], [b'yuu', b'Yugh'], [b'yuw', b'Yau (Morobe Province)'], [b'yux', b'Yukaghir, Southern'], [b'yuy', b'Yugur, East'], [b'yuz', b'Yuracare'], [b'yva', b'Yawa'], [b'yvt', b'Yavitero'], [b'ywa', b'Kalou'], [b'ywg', b'Yinhawangka'], [b'ywl', b'Lalu, Western'], [b'ywn', b'Yawanawa'], [b'ywq', b'Yi, Wuding-Luquan'], [b'ywr', b'Yawuru'], [b'ywt', b'Lalo, Xishanba'], [b'ywu', b'Nasu, Wumeng'], [b'yww', b'Yawarawarga'], [b'yxa', b'Mayawali'], [b'yxg', b'Yagara'], [b'yxl', b'Yardliyawarra'], [b'yxm', b'Yinwum'], [b'yxu', b'Yuyu'], [b'yxy', b'Yabula Yabula'], [b'yyr', b'Yir Yoront'], [b'yyu', b'Yau (Sandaun Province)'], [b'yyz', b'Ayizi'], [b'yzg', b"Buyang, E'ma"], [b'yzk', b'Zokhuo'], [b'zaa', 'Zapotec, Sierra de Ju\xe1rez'], [b'zab', 'Zapotec, San Juan Guelav\xeda'], [b'zac', 'Zapotec, Ocotl\xe1n'], [b'zad', b'Zapotec, Cajonos'], [b'zae', b'Zapotec, Yareni'], [b'zaf', b'Zapotec, Ayoquesco'], [b'zag', b'Zaghawa'], [b'zah', b'Zangwal'], [b'zai', b'Zapotec, Isthmus'], [b'zaj', b'Zaramo'], [b'zak', b'Zanaki'], [b'zal', b'Zauzou'], [b'zam', 'Zapotec, Miahuatl\xe1n'], [b'zao', b'Zapotec, Ozolotepec'], [b'zap', b'Zapotec'], [b'zaq', 'Zapotec, Alo\xe1pam'], [b'zar', 'Zapotec, Rinc\xf3n'], [b'zas', b'Zapotec, Santo Domingo Albarradas'], [b'zat', b'Zapotec, Tabaa'], [b'zau', b'Zangskari'], [b'zav', b'Zapotec, Yatzachi'], [b'zaw', b'Zapotec, Mitla'], [b'zax', b'Zapotec, Xadani'], [b'zay', b'Zayse-Zergulla'], [b'zaz', b'Zari'], [b'zbc', b'Berawan, Central'], [b'zbe', b'Berawan, East'], [b'zbl', b'Blissymbols'], [b'zbt', b'Batui'], [b'zbw', b'Berawan, West'], [b'zca', b'Zapotec, Coatecas Altas'], [b'zch', b'Zhuang, Central Hongshuihe'], [b'zdj', b'Comorian, Ngazidja'], [b'zea', b'Zeeuws'], [b'zeg', b'Zenag'], [b'zeh', b'Zhuang, Eastern Hongshuihe'], [b'zen', b'Zenaga'], [b'zga', b'Kinga'], [b'zgb', b'Zhuang, Guibei'], [b'zgh', b'Tamazight, Standard Moroccan'], [b'zgm', b'Zhuang, Minz'], [b'zgn', b'Zhuang, Guibian'], [b'zgr', b'Magori'], [b'zha', b'Zhuang'], [b'zhb', b'Zhaba'], [b'zhd', b'Zhuang, Dai'], [b'zhi', b'Zhire'], [b'zhn', b'Zhuang, Nong'], [b'zho', b'Chinese'], [b'zhw', b'Zhoa'], [b'zia', b'Zia'], [b'zib', b'Zimbabwe Sign Language'], [b'zik', b'Zimakani'], [b'zil', b'Zialo'], [b'zim', b'Mesme'], [b'zin', b'Zinza'], [b'zir', b'Ziriya'], [b'ziw', b'Zigula'], [b'ziz', b'Zizilivakan'], [b'zka', b'Kaimbulawa'], [b'zkb', b'Koibal'], [b'zkd', b'Kadu'], [b'zkg', b'Koguryo'], [b'zkh', b'Khorezmian'], [b'zkk', b'Karankawa'], [b'zkn', b'Kanan'], [b'zko', b'Kott'], [b'zkp', 'Kaing\xe1ng, S\xe3o Paulo'], [b'zkr', b'Zakhring'], [b'zkt', b'Kitan'], [b'zku', b'Kaurna'], [b'zkv', b'Krevinian'], [b'zkz', b'Khazar'], [b'zlj', b'Zhuang, Liujiang'], [b'zlm', b'Malay (individual language)'], [b'zln', b'Zhuang, Lianshan'], [b'zlq', b'Zhuang, Liuqian'], [b'zma', b'Manda (Australia)'], [b'zmb', b'Zimba'], [b'zmc', b'Margany'], [b'zmd', b'Maridan'], [b'zme', b'Mangerr'], [b'zmf', b'Mfinu'], [b'zmg', b'Marti Ke'], [b'zmh', b'Makolkol'], [b'zmi', b'Negeri Sembilan Malay'], [b'zmj', b'Maridjabin'], [b'zmk', b'Mandandanyi'], [b'zml', b'Madngele'], [b'zmm', b'Marimanindji'], [b'zmn', b'Mbangwe'], [b'zmo', b'Molo'], [b'zmp', b'Mpuono'], [b'zmq', b'Mituku'], [b'zmr', b'Maranunggu'], [b'zms', b'Mbesa'], [b'zmt', b'Maringarr'], [b'zmu', b'Muruwari'], [b'zmv', b'Mbariman-Gudhinma'], [b'zmw', b'Mbo (Democratic Republic of Congo)'], [b'zmx', b'Bomitaba'], [b'zmy', b'Mariyedi'], [b'zmz', b'Mbandja'], [b'zna', b'Zan Gula'], [b'zne', b'Zande (individual language)'], [b'zng', b'Mang'], [b'znk', b'Manangkari'], [b'zns', b'Mangas'], [b'zoc', 'Zoque, Copainal\xe1'], [b'zoh', b'Zoque, Chimalapa'], [b'zom', b'Zou'], [b'zoo', 'Zapotec, Asunci\xf3n Mixtepec'], [b'zoq', b'Zoque, Tabasco'], [b'zor', 'Zoque, Ray\xf3n'], [b'zos', 'Zoque, Francisco Le\xf3n'], [b'zpa', b'Zapotec, Lachiguiri'], [b'zpb', b'Zapotec, Yautepec'], [b'zpc', b'Zapotec, Choapan'], [b'zpd', 'Zapotec, Southeastern Ixtl\xe1n'], [b'zpe', b'Zapotec, Petapa'], [b'zpf', b'Zapotec, San Pedro Quiatoni'], [b'zpg', b'Zapotec, Guevea De Humboldt'], [b'zph', b'Zapotec, Totomachapan'], [b'zpi', 'Zapotec, Santa Mar\xeda Quiegolani'], [b'zpj', b'Zapotec, Quiavicuzas'], [b'zpk', b'Zapotec, Tlacolulita'], [b'zpl', 'Zapotec, Lachix\xedo'], [b'zpm', b'Zapotec, Mixtepec'], [b'zpn', 'Zapotec, Santa In\xe9s Yatzechi'], [b'zpo', 'Zapotec, Amatl\xe1n'], [b'zpp', b'Zapotec, El Alto'], [b'zpq', b'Zapotec, Zoogocho'], [b'zpr', b'Zapotec, Santiago Xanica'], [b'zps', 'Zapotec, Coatl\xe1n'], [b'zpt', 'Zapotec, San Vicente Coatl\xe1n'], [b'zpu', 'Zapotec, Yal\xe1lag'], [b'zpv', b'Zapotec, Chichicapan'], [b'zpw', b'Zapotec, Zaniza'], [b'zpx', b'Zapotec, San Baltazar Loxicha'], [b'zpy', b'Zapotec, Mazaltepec'], [b'zpz', b'Zapotec, Texmelucan'], [b'zqe', b'Zhuang, Qiubei'], [b'zra', b'Kara (Korea)'], [b'zrg', b'Mirgan'], [b'zrn', b'Zerenkel'], [b'zro', 'Z\xe1paro'], [b'zrp', b'Zarphatic'], [b'zrs', b'Mairasi'], [b'zsa', b'Sarasira'], [b'zsk', b'Kaskean'], [b'zsl', b'Zambian Sign Language'], [b'zsm', b'Malay, Standard'], [b'zsr', b'Zapotec, Southern Rincon'], [b'zsu', b'Sukurum'], [b'zte', b'Zapotec, Elotepec'], [b'ztg', 'Zapotec, Xanagu\xeda'], [b'ztl', 'Zapotec, Lapagu\xeda-Guivini'], [b'ztm', 'Zapotec, San Agust\xedn Mixtepec'], [b'ztn', b'Zapotec, Santa Catarina Albarradas'], [b'ztp', b'Zapotec, Loxicha'], [b'ztq', 'Zapotec, Quioquitani-Quier\xed'], [b'zts', b'Zapotec, Tilquiapan'], [b'ztt', b'Zapotec, Tejalapan'], [b'ztu', 'Zapotec, G\xfcil\xe1'], [b'ztx', b'Zapotec, Zaachila'], [b'zty', b'Zapotec, Yatee'], [b'zua', b'Zeem'], [b'zuh', b'Tokano'], [b'zul', b'Zulu'], [b'zum', b'Kumzari'], [b'zun', b'Zuni'], [b'zuy', b'Zumaya'], [b'zwa', b'Zay'], [b'zxx', b'No linguistic content'], [b'zyb', b'Zhuang, Yongbei'], [b'zyg', b'Zhuang, Yang'], [b'zyj', b'Zhuang, Youjiang'], [b'zyn', b'Zhuang, Yongnan'], [b'zyp', b'Chin, Zyphe'], [b'zza', b'Zaza'], [b'zzj', b'Zhuang, Zuojiang']]), + field=models.CharField( + default=b'eng', max_length=8, verbose_name='Language', + blank=True, choices=[ + [b'aaa', b'Ghotuo'], + [b'aab', b'Alumu-Tesu'], + [b'aac', b'Ari'], + [b'aad', b'Amal'], + [b'aae', 'Albanian, Arb\xebresh\xeb'], + [b'aaf', b'Aranadan'], + [b'aag', b'Ambrak'], + [b'aah', b"Arapesh, Abu'"], + [b'aai', b'Arifama-Miniafia'], + [b'aak', b'Ankave'], + [b'aal', b'Afade'], + [b'aam', b'Aramanik'], + [b'aan', 'Anamb\xe9'], + [b'aao', b'Arabic, Algerian Saharan'], + [b'aap', 'Ar\xe1ra, Par\xe1'], + [b'aaq', b'Abnaki, Eastern'], + [b'aar', b'Afar'], + [b'aas', 'Aas\xe1x'], + [b'aat', b'Albanian, Arvanitika'], + [b'aau', b'Abau'], + [b'aaw', b'Solong'], + [b'aax', b'Mandobo Atas'], + [b'aaz', b'Amarasi'], + [b'aba', 'Ab\xe9'], + [b'abb', b'Bankon'], + [b'abc', b'Ayta, Ambala'], + [b'abd', b'Manide'], + [b'abe', b'Abnaki, Western'], + [b'abf', b'Abai Sungai'], + [b'abg', b'Abaga'], + [b'abh', b'Arabic, Tajiki'], + [b'abi', b'Abidji'], + [b'abj', b'Aka-Bea'], + [b'abk', b'Abkhazian'], + [b'abl', b'Lampung Nyo'], + [b'abm', b'Abanyom'], + [b'abn', b'Abua'], + [b'abo', b'Abon'], + [b'abp', b'Ayta, Abellen'], + [b'abq', b'Abaza'], + [b'abr', b'Abron'], + [b'abs', b'Malay, Ambonese'], + [b'abt', b'Ambulas'], + [b'abu', b'Abure'], + [b'abv', b'Arabic, Baharna'], + [b'abw', b'Pal'], + [b'abx', b'Inabaknon'], + [b'aby', b'Aneme Wake'], + [b'abz', b'Abui'], + [b'aca', b'Achagua'], + [b'acb', '\xc1nc\xe1'], + [b'acd', b'Gikyode'], + [b'ace', b'Achinese'], + [b'acf', b'Creole French, Saint Lucian'], + [b'ach', b'Acoli'], + [b'aci', b'Aka-Cari'], + [b'ack', b'Aka-Kora'], + [b'acl', b'Akar-Bale'], + [b'acm', b'Arabic, Mesopotamian'], + [b'acn', b'Achang'], + [b'acp', b'Acipa, Eastern'], + [b'acq', b"Arabic, Ta'izzi-Adeni"], + [b'acr', b'Achi'], + [b'acs', 'Acro\xe1'], + [b'act', b'Achterhoeks'], + [b'acu', b'Achuar-Shiwiar'], + [b'acv', b'Achumawi'], + [b'acw', b'Arabic, Hijazi'], + [b'acx', b'Arabic, Omani'], + [b'acy', b'Arabic, Cypriot'], + [b'acz', b'Acheron'], + [b'ada', b'Adangme'], + [b'adb', b'Adabe'], + [b'add', b'Dzodinka'], + [b'ade', b'Adele'], + [b'adf', b'Arabic, Dhofari'], + [b'adg', b'Andegerebinha'], + [b'adh', b'Adhola'], + [b'adi', b'Adi'], + [b'adj', b'Adioukrou'], + [b'adl', b'Galo'], + [b'adn', b'Adang'], + [b'ado', b'Abu'], + [b'adp', b'Adap'], + [b'adq', b'Adangbe'], + [b'adr', b'Adonara'], + [b'ads', b'Adamorobe Sign Language'], + [b'adt', b'Adnyamathanha'], + [b'adu', b'Aduge'], + [b'adw', b'Amundava'], + [b'adx', b'Tibetan, Amdo'], + [b'ady', b'Adyghe'], + [b'adz', b'Adzera'], + [b'aea', b'Areba'], + [b'aeb', b'Arabic, Tunisian'], + [b'aec', b'Arabic, Saidi'], + [b'aed', b'Argentine Sign Language'], + [b'aee', b'Pashayi, Northeast'], + [b'aek', b'Haeke'], + [b'ael', b'Ambele'], + [b'aem', b'Arem'], + [b'aen', b'Armenian Sign Language'], + [b'aeq', b'Aer'], + [b'aer', b'Arrernte, Eastern'], + [b'aes', b'Alsea'], + [b'aeu', b'Akeu'], + [b'aew', b'Ambakich'], + [b'aey', b'Amele'], + [b'aez', b'Aeka'], + [b'afb', b'Arabic, Gulf'], + [b'afd', b'Andai'], + [b'afe', b'Putukwam'], + [b'afg', b'Afghan Sign Language'], + [b'afh', b'Afrihili'], + [b'afi', b'Akrukay'], + [b'afk', b'Nanubae'], + [b'afn', b'Defaka'], + [b'afo', b'Eloyi'], + [b'afp', b'Tapei'], + [b'afr', b'Afrikaans'], + [b'afs', b'Creole, Afro-Seminole'], + [b'aft', b'Afitti'], + [b'afu', b'Awutu'], + [b'afz', b'Obokuitai'], + [b'aga', b'Aguano'], + [b'agb', b'Legbo'], + [b'agc', b'Agatu'], + [b'agd', b'Agarabi'], + [b'age', b'Angal'], + [b'agf', b'Arguni'], + [b'agg', b'Angor'], + [b'agh', b'Ngelima'], + [b'agi', b'Agariya'], + [b'agj', b'Argobba'], + [b'agk', b'Agta, Isarog'], + [b'agl', b'Fembe'], + [b'agm', b'Angaataha'], + [b'agn', b'Agutaynen'], + [b'ago', b'Tainae'], + [b'agq', b'Aghem'], + [b'agr', b'Aguaruna'], + [b'ags', b'Esimbi'], + [b'agt', b'Agta, Central Cagayan'], + [b'agu', b'Aguacateco'], + [b'agv', b'Dumagat, Remontado'], + [b'agw', b'Kahua'], + [b'agx', b'Aghul'], + [b'agy', b'Alta, Southern'], + [b'agz', b'Agta, Mt. Iriga'], + [b'aha', b'Ahanta'], + [b'ahb', b'Axamb'], + [b'ahg', b'Qimant'], + [b'ahh', b'Aghu'], + [b'ahi', b'Aizi, Tiagbamrin'], + [b'ahk', b'Akha'], + [b'ahl', b'Igo'], + [b'ahm', b'Aizi, Mobumrin'], + [b'ahn', '\xc0h\xe0n'], + [b'aho', b'Ahom'], + [b'ahp', b'Aizi, Aproumu'], + [b'ahr', b'Ahirani'], + [b'ahs', b'Ashe'], + [b'aht', b'Ahtena'], + [b'aia', b'Arosi'], + [b'aib', b'Ainu (China)'], + [b'aic', b'Ainbai'], + [b'aid', b'Alngith'], + [b'aie', b'Amara'], + [b'aif', b'Agi'], + [b'aig', b'Creole English, Antigua and Barbuda'], + [b'aih', b'Ai-Cham'], + [b'aii', b'Neo-Aramaic, Assyrian'], + [b'aij', b'Lishanid Noshan'], + [b'aik', b'Ake'], + [b'ail', b'Aimele'], + [b'aim', b'Aimol'], + [b'ain', b'Ainu (Japan)'], + [b'aio', b'Aiton'], + [b'aip', b'Burumakok'], + [b'aiq', b'Aimaq'], + [b'air', b'Airoran'], + [b'ais', b'Amis, Nataoran'], + [b'ait', b'Arikem'], + [b'aiw', b'Aari'], + [b'aix', b'Aighon'], + [b'aiy', b'Ali'], + [b'aja', b'Aja (Sudan)'], + [b'ajg', b'Aja (Benin)'], + [b'aji', 'Aji\xeb'], + [b'ajn', b'Andajin'], + [b'ajp', b'Arabic, South Levantine'], + [b'ajt', b'Arabic, Judeo-Tunisian'], + [b'aju', b'Arabic, Judeo-Moroccan'], + [b'ajw', b'Ajawa'], + [b'ajz', b'Karbi, Amri'], + [b'aka', b'Akan'], + [b'akb', b'Batak Angkola'], + [b'akc', b'Mpur'], + [b'akd', b'Ukpet-Ehom'], + [b'ake', b'Akawaio'], + [b'akf', b'Akpa'], + [b'akg', b'Anakalangu'], + [b'akh', b'Angal Heneng'], + [b'aki', b'Aiome'], + [b'akj', b'Aka-Jeru'], + [b'akk', b'Akkadian'], + [b'akl', b'Aklanon'], + [b'akm', b'Aka-Bo'], + [b'ako', b'Akurio'], + [b'akp', b'Siwu'], + [b'akq', b'Ak'], + [b'akr', b'Araki'], + [b'aks', b'Akaselem'], + [b'akt', b'Akolet'], + [b'aku', b'Akum'], + [b'akv', b'Akhvakh'], + [b'akw', b'Akwa'], + [b'akx', b'Aka-Kede'], + [b'aky', b'Aka-Kol'], + [b'akz', b'Alabama'], + [b'ala', b'Alago'], + [b'alc', b'Qawasqar'], + [b'ald', b'Alladian'], + [b'ale', b'Aleut'], + [b'alf', b'Alege'], + [b'alh', b'Alawa'], + [b'ali', b'Amaimon'], + [b'alj', b'Alangan'], + [b'alk', b'Alak'], + [b'all', b'Allar'], + [b'alm', b'Amblong'], + [b'aln', b'Albanian, Gheg'], + [b'alo', b'Larike-Wakasihu'], + [b'alp', b'Alune'], + [b'alq', b'Algonquin'], + [b'alr', b'Alutor'], + [b'als', b'Albanian, Tosk'], + [b'alt', b'Altai, Southern'], + [b'alu', b"'Are'are"], + [b'alw', 'Alaba-K\u2019abeena'], + [b'alx', b'Amol'], + [b'aly', b'Alyawarr'], + [b'alz', b'Alur'], + [b'ama', 'Amanay\xe9'], + [b'amb', b'Ambo'], + [b'amc', b'Amahuaca'], + [b'ame', b"Yanesha'"], + [b'amf', b'Hamer-Banna'], + [b'amg', b'Amurdak'], + [b'amh', b'Amharic'], + [b'ami', b'Amis'], + [b'amj', b'Amdang'], + [b'amk', b'Ambai'], + [b'aml', b'War-Jaintia'], + [b'amm', b'Ama (Papua New Guinea)'], + [b'amn', b'Amanab'], + [b'amo', b'Amo'], + [b'amp', b'Alamblak'], + [b'amq', b'Amahai'], + [b'amr', b'Amarakaeri'], + [b'ams', b'Amami-Oshima, Southern'], + [b'amt', b'Amto'], + [b'amu', b'Amuzgo, Guerrero'], + [b'amv', b'Ambelau'], + [b'amw', b'Neo-Aramaic, Western'], + [b'amx', b'Anmatyerre'], + [b'amy', b'Ami'], + [b'amz', b'Atampaya'], + [b'ana', b'Andaqui'], + [b'anb', b'Andoa'], + [b'anc', b'Ngas'], + [b'and', b'Ansus'], + [b'ane', 'X\xe2r\xe2c\xf9\xf9'], + [b'anf', b'Animere'], + [b'ang', b'English, Old (ca. 450-1100)'], + [b'anh', b'Nend'], + [b'ani', b'Andi'], + [b'anj', b'Anor'], + [b'ank', b'Goemai'], + [b'anl', b'Chin, Anu-Hkongso'], + [b'anm', b'Anal'], + [b'ann', b'Obolo'], + [b'ano', b'Andoque'], + [b'anp', b'Angika'], + [b'anq', b'Jarawa (India)'], + [b'anr', b'Andh'], + [b'ans', b'Anserma'], + [b'ant', b'Antakarinya'], + [b'anu', b'Anuak'], + [b'anv', b'Denya'], + [b'anw', b'Anaang'], + [b'anx', b'Andra-Hus'], + [b'any', b'Anyin'], + [b'anz', b'Anem'], + [b'aoa', b'Angolar'], + [b'aob', b'Abom'], + [b'aoc', b'Pemon'], + [b'aod', b'Andarum'], + [b'aoe', b'Angal Enen'], + [b'aof', b'Bragat'], + [b'aog', b'Angoram'], + [b'aoh', b'Arma'], + [b'aoi', b'Anindilyakwa'], + [b'aoj', b'Mufian'], + [b'aok', 'Arh\xf6'], + [b'aol', b'Alor'], + [b'aom', '\xd6mie'], + [b'aon', b'Arapesh, Bumbita'], + [b'aor', b'Aore'], + [b'aos', b'Taikat'], + [b'aot', b"A'tong"], + [b'aou', b"A'ou"], + [b'aox', b'Atorada'], + [b'aoz', b'Uab Meto'], + [b'apb', b"Sa'a"], + [b'apc', b'Arabic, North Levantine'], + [b'apd', b'Arabic, Sudanese'], + [b'ape', b'Bukiyip'], + [b'apf', b'Agta, Pahanan'], + [b'apg', b'Ampanang'], + [b'aph', b'Athpariya'], + [b'api', 'Apiak\xe1'], + [b'apj', b'Apache, Jicarilla'], + [b'apk', b'Apache, Kiowa'], + [b'apl', b'Apache, Lipan'], + [b'apm', b'Apache, Mescalero-Chiricahua'], + [b'apn', 'Apinay\xe9'], + [b'apo', b'Ambul'], + [b'app', b'Apma'], + [b'apq', b'A-Pucikwar'], + [b'apr', b'Arop-Lokep'], + [b'aps', b'Arop-Sissano'], + [b'apt', b'Apatani'], + [b'apu', 'Apurin\xe3'], + [b'apv', b'Alapmunte'], + [b'apw', b'Apache, Western'], + [b'apx', b'Aputai'], + [b'apy', 'Apala\xed'], + [b'apz', b'Safeyoka'], + [b'aqc', b'Archi'], + [b'aqd', b'Dogon, Ampari'], + [b'aqg', b'Arigidi'], + [b'aqm', b'Atohwaim'], + [b'aqn', b'Alta, Northern'], + [b'aqp', b'Atakapa'], + [b'aqr', 'Arh\xe2'], + [b'aqz', b'Akuntsu'], + [b'ara', b'Arabic'], + [b'arb', b'Arabic, Standard'], + [b'arc', b'Aramaic, Official (700-300 BCE)'], + [b'ard', b'Arabana'], + [b'are', b'Arrarnta, Western'], + [b'arg', b'Aragonese'], + [b'arh', b'Arhuaco'], + [b'ari', b'Arikara'], + [b'arj', b'Arapaso'], + [b'ark', 'Arikap\xfa'], + [b'arl', b'Arabela'], + [b'arn', b'Mapudungun'], + [b'aro', b'Araona'], + [b'arp', b'Arapaho'], + [b'arq', b'Arabic, Algerian'], + [b'arr', b'Karo (Brazil)'], + [b'ars', b'Arabic, Najdi'], + [b'aru', 'Aru\xe1 (Amazonas State)'], + [b'arv', b'Arbore'], + [b'arw', b'Arawak'], + [b'arx', 'Aru\xe1 (Rodonia State)'], + [b'ary', b'Arabic, Moroccan'], + [b'arz', b'Arabic, Egyptian'], + [b'asa', b'Asu (Tanzania)'], + [b'asb', b'Assiniboine'], + [b'asc', b'Asmat, Casuarina Coast'], + [b'asd', b'Asas'], + [b'ase', b'American Sign Language'], + [b'asf', b'Australian Sign Language'], + [b'asg', b'Cishingini'], + [b'ash', b'Abishira'], + [b'asi', b'Buruwai'], + [b'asj', b'Sari'], + [b'ask', b'Ashkun'], + [b'asl', b'Asilulu'], + [b'asm', b'Assamese'], + [b'asn', 'Asurin\xed, Xing\xfa'], + [b'aso', b'Dano'], + [b'asp', b'Algerian Sign Language'], + [b'asq', b'Austrian Sign Language'], + [b'asr', b'Asuri'], + [b'ass', b'Ipulo'], + [b'ast', b'Asturian'], + [b'asu', b'Asurini, Tocantins'], + [b'asv', b'Asoa'], + [b'asw', b'Australian Aborigines Sign Language'], + [b'asx', b'Muratayak'], + [b'asy', b'Asmat, Yaosakor'], + [b'asz', b'As'], + [b'ata', b'Pele-Ata'], + [b'atb', b'Zaiwa'], + [b'atc', b'Atsahuaca'], + [b'atd', b'Manobo, Ata'], + [b'ate', b'Atemble'], + [b'atg', b'Ivbie North-Okpela-Arhe'], + [b'ati', 'Atti\xe9'], + [b'atj', b'Atikamekw'], + [b'atk', b'Ati'], + [b'atl', b'Agta, Mt. Iraya'], + [b'atm', b'Ata'], + [b'atn', b'Ashtiani'], + [b'ato', b'Atong'], + [b'atp', b'Atta, Pudtol'], + [b'atq', b'Aralle-Tabulahan'], + [b'atr', b'Waimiri-Atroari'], + [b'ats', b'Gros Ventre'], + [b'att', b'Atta, Pamplona'], + [b'atu', b'Reel'], + [b'atv', b'Altai, Northern'], + [b'atw', b'Atsugewi'], + [b'atx', b'Arutani'], + [b'aty', b'Aneityum'], + [b'atz', b'Arta'], + [b'aua', b'Asumboa'], + [b'aub', b'Alugu'], + [b'auc', b'Waorani'], + [b'aud', b'Anuta'], + [b'aue', b"=/Kx'au//'ein"], + [b'aug', b'Aguna'], + [b'auh', b'Aushi'], + [b'aui', b'Anuki'], + [b'auj', b'Awjilah'], + [b'auk', b'Heyo'], + [b'aul', b'Aulua'], + [b'aum', b'Asu (Nigeria)'], + [b'aun', b'One, Molmo'], + [b'auo', b'Auyokawa'], + [b'aup', b'Makayam'], + [b'auq', b'Anus'], + [b'aur', b'Aruek'], + [b'aut', b'Austral'], + [b'auu', b'Auye'], + [b'auw', b'Awyi'], + [b'aux', 'Aur\xe1'], + [b'auy', b'Awiyaana'], + [b'auz', b'Arabic, Uzbeki'], + [b'ava', b'Avaric'], + [b'avb', b'Avau'], + [b'avd', b'Alviri-Vidari'], + [b'ave', b'Avestan'], + [b'avi', b'Avikam'], + [b'avk', b'Kotava'], + [b'avl', b'Arabic, Eastern Egyptian Bedawi'], + [b'avm', b'Angkamuthi'], + [b'avn', b'Avatime'], + [b'avo', b'Agavotaguerra'], + [b'avs', b'Aushiri'], + [b'avt', b'Au'], + [b'avu', b'Avokaya'], + [b'avv', 'Av\xe1-Canoeiro'], + [b'awa', b'Awadhi'], + [b'awb', b'Awa (Papua New Guinea)'], + [b'awc', b'Cicipu'], + [b'awe', 'Awet\xed'], + [b'awg', b'Anguthimri'], + [b'awh', b'Awbono'], + [b'awi', b'Aekyom'], + [b'awk', b'Awabakal'], + [b'awm', b'Arawum'], + [b'awn', b'Awngi'], + [b'awo', b'Awak'], + [b'awr', b'Awera'], + [b'aws', b'Awyu, South'], + [b'awt', 'Arawet\xe9'], + [b'awu', b'Awyu, Central'], + [b'awv', b'Awyu, Jair'], + [b'aww', b'Awun'], + [b'awx', b'Awara'], + [b'awy', b'Awyu, Edera'], + [b'axb', b'Abipon'], + [b'axe', b'Ayerrerenge'], + [b'axg', 'Ar\xe1ra, Mato Grosso'], + [b'axk', b'Yaka (Central African Republic)'], + [b'axl', b'Aranda, Lower Southern'], + [b'axm', b'Armenian, Middle'], + [b'axx', 'X\xe2r\xe2gur\xe8'], + [b'aya', b'Awar'], + [b'ayb', b'Gbe, Ayizo'], + [b'ayc', b'Aymara, Southern'], + [b'ayd', b'Ayabadhu'], + [b'aye', b'Ayere'], + [b'ayg', b'Ginyanga'], + [b'ayh', b'Arabic, Hadrami'], + [b'ayi', b'Leyigha'], + [b'ayk', b'Akuku'], + [b'ayl', b'Arabic, Libyan'], + [b'aym', b'Aymara'], + [b'ayn', b'Arabic, Sanaani'], + [b'ayo', b'Ayoreo'], + [b'ayp', b'Arabic, North Mesopotamian'], + [b'ayq', b'Ayi (Papua New Guinea)'], + [b'ayr', b'Aymara, Central'], + [b'ays', b'Ayta, Sorsogon'], + [b'ayt', b'Ayta, Magbukun'], + [b'ayu', b'Ayu'], + [b'ayy', b'Ayta, Tayabas'], + [b'ayz', b'Mai Brat'], + [b'aza', b'Azha'], + [b'azb', b'Azerbaijani, South'], + [b'azd', b'Nahuatl, Eastern Durango'], + [b'aze', b'Azerbaijani'], + [b'azg', b'Amuzgo, San Pedro Amuzgos'], + [b'azj', b'Azerbaijani, North'], + [b'azm', b'Amuzgo, Ipalapa'], + [b'azn', b'Nahuatl, Western Durango'], + [b'azo', b'Awing'], + [b'azt', b'Atta, Faire'], + [b'azz', b'Nahuatl, Highland Puebla'], + [b'baa', b'Babatana'], + [b'bab', 'Bainouk-Gunyu\xf1o'], + [b'bac', b'Badui'], + [b'bae', 'Bar\xe9'], + [b'baf', b'Nubaca'], + [b'bag', b'Tuki'], + [b'bah', b'Creole English, Bahamas'], + [b'baj', b'Barakai'], + [b'bak', b'Bashkir'], + [b'bal', b'Baluchi'], + [b'bam', b'Bambara'], + [b'ban', b'Balinese'], + [b'bao', b'Waimaha'], + [b'bap', b'Bantawa'], + [b'bar', b'Bavarian'], + [b'bas', b'Basa (Cameroon)'], + [b'bau', b'Bada (Nigeria)'], + [b'bav', b'Vengo'], + [b'baw', b'Bambili-Bambui'], + [b'bax', b'Bamun'], + [b'bay', b'Batuley'], + [b'bba', b'Baatonum'], + [b'bbb', b'Barai'], + [b'bbc', b'Batak Toba'], + [b'bbd', b'Bau'], + [b'bbe', b'Bangba'], + [b'bbf', b'Baibai'], + [b'bbg', b'Barama'], + [b'bbh', b'Bugan'], + [b'bbi', b'Barombi'], + [b'bbj', "Ghom\xe1l\xe1'"], + [b'bbk', b'Babanki'], + [b'bbl', b'Bats'], + [b'bbm', b'Babango'], + [b'bbn', b'Uneapa'], + [b'bbo', 'Bobo Madar\xe9, Northern'], + [b'bbp', b'Banda, West Central'], + [b'bbq', b'Bamali'], + [b'bbr', b'Girawa'], + [b'bbs', b'Bakpinka'], + [b'bbt', b'Mburku'], + [b'bbu', b'Kulung (Nigeria)'], + [b'bbv', b'Karnai'], + [b'bbw', b'Baba'], + [b'bbx', b'Bubia'], + [b'bby', b'Befang'], + [b'bbz', b'Creole Arabic, Babalia'], + [b'bca', b'Bai, Central'], + [b'bcb', b'Bainouk-Samik'], + [b'bcc', b'Balochi, Southern'], + [b'bcd', b'Babar, North'], + [b'bce', b'Bamenyam'], + [b'bcf', b'Bamu'], + [b'bcg', b'Baga Binari'], + [b'bch', b'Bariai'], + [b'bci', 'Baoul\xe9'], + [b'bcj', b'Bardi'], + [b'bck', b'Bunaba'], + [b'bcl', b'Bikol, Central'], + [b'bcm', b'Bannoni'], + [b'bcn', b'Bali (Nigeria)'], + [b'bco', b'Kaluli'], + [b'bcp', b'Bali (Democratic Republic of Congo)'], + [b'bcq', b'Bench'], + [b'bcr', b'Babine'], + [b'bcs', b'Kohumono'], + [b'bct', b'Bendi'], + [b'bcu', b'Awad Bing'], + [b'bcv', b'Shoo-Minda-Nye'], + [b'bcw', b'Bana'], + [b'bcy', b'Bacama'], + [b'bcz', b'Bainouk-Gunyaamolo'], + [b'bda', b'Bayot'], + [b'bdb', b'Basap'], + [b'bdc', 'Ember\xe1-Baud\xf3'], + [b'bdd', b'Bunama'], + [b'bde', b'Bade'], + [b'bdf', b'Biage'], + [b'bdg', b'Bonggi'], + [b'bdh', b'Baka (Sudan)'], + [b'bdi', b'Burun'], + [b'bdj', b'Bai'], + [b'bdk', b'Budukh'], + [b'bdl', b'Bajau, Indonesian'], + [b'bdm', b'Buduma'], + [b'bdn', b'Baldemu'], + [b'bdo', b'Morom'], + [b'bdp', b'Bende'], + [b'bdq', b'Bahnar'], + [b'bdr', b'Bajau, West Coast'], + [b'bds', b'Burunge'], + [b'bdt', b'Bokoto'], + [b'bdu', b'Oroko'], + [b'bdv', b'Bodo Parja'], + [b'bdw', b'Baham'], + [b'bdx', b'Budong-Budong'], + [b'bdy', b'Bandjalang'], + [b'bdz', b'Badeshi'], + [b'bea', b'Beaver'], + [b'beb', b'Bebele'], + [b'bec', b'Iceve-Maci'], + [b'bed', b'Bedoanas'], + [b'bee', b'Byangsi'], + [b'bef', b'Benabena'], + [b'beg', b'Belait'], + [b'beh', b'Biali'], + [b'bei', b"Bekati'"], + [b'bej', b'Beja'], + [b'bek', b'Bebeli'], + [b'bel', b'Belarusian'], + [b'bem', b'Bemba (Zambia)'], + [b'ben', b'Bengali'], + [b'beo', b'Beami'], + [b'bep', b'Besoa'], + [b'beq', b'Beembe'], + [b'bes', b'Besme'], + [b'bet', 'B\xe9te, Guiberoua'], + [b'beu', b'Blagar'], + [b'bev', 'B\xe9t\xe9, Daloa'], + [b'bew', b'Betawi'], + [b'bex', b'Jur Modo'], + [b'bey', b'Beli (Papua New Guinea)'], + [b'bez', b'Bena (Tanzania)'], + [b'bfa', b'Bari'], + [b'bfb', b'Bareli, Pauri'], + [b'bfc', b'Bai, Northern'], + [b'bfd', b'Bafut'], + [b'bfe', b'Betaf'], + [b'bff', b'Bofi'], + [b'bfg', b'Kayan, Busang'], + [b'bfh', b'Blafe'], + [b'bfi', b'British Sign Language'], + [b'bfj', b'Bafanji'], + [b'bfk', b'Ban Khor Sign Language'], + [b'bfl', 'Banda-Nd\xe9l\xe9'], + [b'bfm', b'Mmen'], + [b'bfn', b'Bunak'], + [b'bfo', b'Birifor, Malba'], + [b'bfp', b'Beba'], + [b'bfq', b'Badaga'], + [b'bfr', b'Bazigar'], + [b'bfs', b'Bai, Southern'], + [b'bft', b'Balti'], + [b'bfu', b'Gahri'], + [b'bfw', b'Bondo'], + [b'bfx', b'Bantayanon'], + [b'bfy', b'Bagheli'], + [b'bfz', b'Pahari, Mahasu'], + [b'bga', b'Gwamhi-Wuri'], + [b'bgb', b'Bobongko'], + [b'bgc', b'Haryanvi'], + [b'bgd', b'Bareli, Rathwi'], + [b'bge', b'Bauria'], + [b'bgf', b'Bangandu'], + [b'bgg', b'Bugun'], + [b'bgi', b'Giangan'], + [b'bgj', b'Bangolan'], + [b'bgk', b'Bit'], + [b'bgl', b'Bo (Laos)'], + [b'bgm', b'Baga Mboteni'], + [b'bgn', b'Balochi, Western'], + [b'bgo', b'Baga Koga'], + [b'bgp', b'Balochi, Eastern'], + [b'bgq', b'Bagri'], + [b'bgr', b'Chin, Bawm'], + [b'bgs', b'Tagabawa'], + [b'bgt', b'Bughotu'], + [b'bgu', b'Mbongno'], + [b'bgv', b'Warkay-Bipim'], + [b'bgw', b'Bhatri'], + [b'bgx', b'Turkish, Balkan Gagauz'], + [b'bgy', b'Benggoi'], + [b'bgz', b'Banggai'], + [b'bha', b'Bharia'], + [b'bhb', b'Bhili'], + [b'bhc', b'Biga'], + [b'bhd', b'Bhadrawahi'], + [b'bhe', b'Bhaya'], + [b'bhf', b'Odiai'], + [b'bhg', b'Binandere'], + [b'bhh', b'Bukharic'], + [b'bhi', b'Bhilali'], + [b'bhj', b'Bahing'], + [b'bhl', b'Bimin'], + [b'bhm', b'Bathari'], + [b'bhn', b'Neo-Aramaic, Bohtan'], + [b'bho', b'Bhojpuri'], + [b'bhp', b'Bima'], + [b'bhq', b'Tukang Besi South'], + [b'bhr', b'Malagasy, Bara'], + [b'bhs', b'Buwal'], + [b'bht', b'Bhattiyali'], + [b'bhu', b'Bhunjia'], + [b'bhv', b'Bahau'], + [b'bhw', b'Biak'], + [b'bhx', b'Bhalay'], + [b'bhy', b'Bhele'], + [b'bhz', b'Bada (Indonesia)'], + [b'bia', b'Badimaya'], + [b'bib', b'Bissa'], + [b'bic', b'Bikaru'], + [b'bid', b'Bidiyo'], + [b'bie', b'Bepour'], + [b'bif', b'Biafada'], + [b'big', b'Biangai'], + [b'bij', b'Vaghat-Ya-Bijim-Legeri'], + [b'bik', b'Bikol'], + [b'bil', b'Bile'], + [b'bim', b'Bimoba'], + [b'bin', b'Bini'], + [b'bio', b'Nai'], + [b'bip', b'Bila'], + [b'biq', b'Bipi'], + [b'bir', b'Bisorio'], + [b'bis', b'Bislama'], + [b'bit', b'Berinomo'], + [b'biu', b'Biete'], + [b'biv', b'Birifor, Southern'], + [b'biw', b'Kol (Cameroon)'], + [b'bix', b'Bijori'], + [b'biy', b'Birhor'], + [b'biz', b'Baloi'], + [b'bja', b'Budza'], + [b'bjb', b'Banggarla'], + [b'bjc', b'Bariji'], + [b'bje', b'Mien, Biao-Jiao'], + [b'bjf', b'Neo-Aramaic, Barzani Jewish'], + [b'bjg', b'Bidyogo'], + [b'bjh', b'Bahinemo'], + [b'bji', b'Burji'], + [b'bjj', b'Kanauji'], + [b'bjk', b'Barok'], + [b'bjl', b'Bulu (Papua New Guinea)'], + [b'bjm', b'Bajelani'], + [b'bjn', b'Banjar'], + [b'bjo', b'Banda, Mid-Southern'], + [b'bjp', b'Fanamaket'], + [b'bjr', b'Binumarien'], + [b'bjs', b'Bajan'], + [b'bjt', b'Balanta-Ganja'], + [b'bju', b'Busuu'], + [b'bjv', b'Bedjond'], + [b'bjw', 'Bakw\xe9'], + [b'bjx', b'Itneg, Banao'], + [b'bjy', b'Bayali'], + [b'bjz', b'Baruga'], + [b'bka', b'Kyak'], + [b'bkc', b'Baka (Cameroon)'], + [b'bkd', b'Binukid'], + [b'bkf', b'Beeke'], + [b'bkg', b'Buraka'], + [b'bkh', b'Bakoko'], + [b'bki', b'Baki'], + [b'bkj', b'Pande'], + [b'bkk', b'Brokskat'], + [b'bkl', b'Berik'], + [b'bkm', b'Kom (Cameroon)'], + [b'bkn', b'Bukitan'], + [b'bko', b"Kwa'"], + [b'bkp', b'Boko (Democratic Republic of Congo)'], + [b'bkq', 'Bakair\xed'], + [b'bkr', b'Bakumpai'], + [b'bks', b'Sorsoganon, Northern'], + [b'bkt', b'Boloki'], + [b'bku', b'Buhid'], + [b'bkv', b'Bekwarra'], + [b'bkw', b'Bekwel'], + [b'bkx', b'Baikeno'], + [b'bky', b'Bokyi'], + [b'bkz', b'Bungku'], + [b'bla', b'Siksika'], + [b'blb', b'Bilua'], + [b'blc', b'Bella Coola'], + [b'bld', b'Bolango'], + [b'ble', b'Balanta-Kentohe'], + [b'blf', b'Buol'], + [b'blg', b'Balau'], + [b'blh', b'Kuwaa'], + [b'bli', b'Bolia'], + [b'blj', b'Bolongan'], + [b'blk', b"Karen, Pa'o"], + [b'bll', b'Biloxi'], + [b'blm', b'Beli (Sudan)'], + [b'bln', b'Bikol, Southern Catanduanes'], + [b'blo', b'Anii'], + [b'blp', b'Blablanga'], + [b'blq', b'Baluan-Pam'], + [b'blr', b'Blang'], + [b'bls', b'Balaesang'], + [b'blt', b'Tai Dam'], + [b'blv', b'Bolo'], + [b'blw', b'Balangao'], + [b'blx', b'Ayta, Mag-Indi'], + [b'bly', b'Notre'], + [b'blz', b'Balantak'], + [b'bma', b'Lame'], + [b'bmb', b'Bembe'], + [b'bmc', b'Biem'], + [b'bmd', b'Manduri, Baga'], + [b'bme', b'Limassa'], + [b'bmf', b'Bom'], + [b'bmg', b'Bamwe'], + [b'bmh', b'Kein'], + [b'bmi', b'Bagirmi'], + [b'bmj', b'Bote-Majhi'], + [b'bmk', b'Ghayavi'], + [b'bml', b'Bomboli'], + [b'bmm', b'Malagasy, Northern Betsimisaraka'], + [b'bmn', b'Bina (Papua New Guinea)'], + [b'bmo', b'Bambalang'], + [b'bmp', b'Bulgebi'], + [b'bmq', b'Bomu'], + [b'bmr', b'Muinane'], + [b'bms', b'Kanuri, Bilma'], + [b'bmt', b'Biao Mon'], + [b'bmu', b'Somba-Siawari'], + [b'bmv', b'Bum'], + [b'bmw', b'Bomwali'], + [b'bmx', b'Baimak'], + [b'bmy', b'Bemba (Democratic Republic of Congo)'], + [b'bmz', b'Baramu'], + [b'bna', b'Bonerate'], + [b'bnb', b'Bookan'], + [b'bnc', b'Bontok'], + [b'bnd', b'Banda (Indonesia)'], + [b'bne', b'Bintauna'], + [b'bnf', b'Masiwang'], + [b'bng', b'Benga'], + [b'bni', b'Bangi'], + [b'bnj', b'Tawbuid, Eastern'], + [b'bnk', b'Bierebo'], + [b'bnl', b'Boon'], + [b'bnm', b'Batanga'], + [b'bnn', b'Bunun'], + [b'bno', b'Bantoanon'], + [b'bnp', b'Bola'], + [b'bnq', b'Bantik'], + [b'bnr', b'Butmas-Tur'], + [b'bns', b'Bundeli'], + [b'bnu', b'Bentong'], + [b'bnv', b'Bonerif'], + [b'bnw', b'Bisis'], + [b'bnx', b'Bangubangu'], + [b'bny', b'Bintulu'], + [b'bnz', b'Beezen'], + [b'boa', b'Bora'], + [b'bob', b'Aweer'], + [b'bod', b'Tibetan'], + [b'boe', b'Mundabli'], + [b'bof', b'Bolon'], + [b'bog', b'Bamako Sign Language'], + [b'boh', b'Boma'], + [b'boi', 'Barbare\xf1o'], + [b'boj', b'Anjam'], + [b'bok', b'Bonjo'], + [b'bol', b'Bole'], + [b'bom', b'Berom'], + [b'bon', b'Bine'], + [b'boo', 'Bozo, Tiemac\xe8w\xe8'], + [b'bop', b'Bonkiman'], + [b'boq', b'Bogaya'], + [b'bor', 'Bor\xf4ro'], + [b'bos', b'Bosnian'], + [b'bot', b'Bongo'], + [b'bou', b'Bondei'], + [b'bov', b'Tuwuli'], + [b'bow', b'Rema'], + [b'box', b'Buamu'], + [b'boy', b'Bodo (Central African Republic)'], + [b'boz', 'Bozo, Ti\xe9yaxo'], + [b'bpa', b'Daakaka'], + [b'bpb', b'Barbacoas'], + [b'bpd', b'Banda-Banda'], + [b'bpg', b'Bonggo'], + [b'bph', b'Botlikh'], + [b'bpi', b'Bagupi'], + [b'bpj', b'Binji'], + [b'bpk', b'Orowe'], + [b'bpl', b'Broome Pearling Lugger Pidgin'], + [b'bpm', b'Biyom'], + [b'bpn', b'Dzao Min'], + [b'bpo', b'Anasi'], + [b'bpp', b'Kaure'], + [b'bpq', b'Malay, Banda'], + [b'bpr', b'Blaan, Koronadal'], + [b'bps', b'Blaan, Sarangani'], + [b'bpt', b'Barrow Point'], + [b'bpu', b'Bongu'], + [b'bpv', b'Marind, Bian'], + [b'bpw', b'Bo (Papua New Guinea)'], + [b'bpx', b'Bareli, Palya'], + [b'bpy', b'Bishnupriya'], + [b'bpz', b'Bilba'], + [b'bqa', b'Tchumbuli'], + [b'bqb', b'Bagusa'], + [b'bqc', b'Boko (Benin)'], + [b'bqd', b'Bung'], + [b'bqf', b'Baga Kaloum'], + [b'bqg', b'Bago-Kusuntu'], + [b'bqh', b'Baima'], + [b'bqi', b'Bakhtiari'], + [b'bqj', b'Bandial'], + [b'bqk', 'Banda-Mbr\xe8s'], + [b'bql', b'Bilakura'], + [b'bqm', b'Wumboko'], + [b'bqn', b'Bulgarian Sign Language'], + [b'bqo', b'Balo'], + [b'bqp', b'Busa'], + [b'bqq', b'Biritai'], + [b'bqr', b'Burusu'], + [b'bqs', b'Bosngun'], + [b'bqt', b'Bamukumbit'], + [b'bqu', b'Boguru'], + [b'bqv', b'Koro Wachi'], + [b'bqw', b'Buru (Nigeria)'], + [b'bqx', b'Baangi'], + [b'bqy', b'Bengkala Sign Language'], + [b'bqz', b'Bakaka'], + [b'bra', b'Braj'], + [b'brb', b'Lave'], + [b'brc', b'Creole Dutch, Berbice'], + [b'brd', b'Baraamu'], + [b'bre', b'Breton'], + [b'brf', b'Bera'], + [b'brg', b'Baure'], + [b'brh', b'Brahui'], + [b'bri', b'Mokpwe'], + [b'brj', b'Bieria'], + [b'brk', b'Birked'], + [b'brl', b'Birwa'], + [b'brm', b'Barambu'], + [b'brn', b'Boruca'], + [b'bro', b'Brokkat'], + [b'brp', b'Barapasi'], + [b'brq', b'Breri'], + [b'brr', b'Birao'], + [b'brs', b'Baras'], + [b'brt', b'Bitare'], + [b'bru', b'Bru, Eastern'], + [b'brv', b'Bru, Western'], + [b'brw', b'Bellari'], + [b'brx', b'Bodo (India)'], + [b'bry', b'Burui'], + [b'brz', b'Bilbil'], + [b'bsa', b'Abinomn'], + [b'bsb', b'Bisaya, Brunei'], + [b'bsc', b'Bassari'], + [b'bse', b'Wushi'], + [b'bsf', b'Bauchi'], + [b'bsg', b'Bashkardi'], + [b'bsh', b'Kati'], + [b'bsi', b'Bassossi'], + [b'bsj', b'Bangwinji'], + [b'bsk', b'Burushaski'], + [b'bsl', b'Basa-Gumna'], + [b'bsm', b'Busami'], + [b'bsn', b'Barasana-Eduria'], + [b'bso', b'Buso'], + [b'bsp', b'Baga Sitemu'], + [b'bsq', b'Bassa'], + [b'bsr', b'Bassa-Kontagora'], + [b'bss', b'Akoose'], + [b'bst', b'Basketo'], + [b'bsu', b'Bahonsuai'], + [b'bsv', 'Baga Soban\xe9'], + [b'bsw', b'Baiso'], + [b'bsx', b'Yangkam'], + [b'bsy', b'Bisaya, Sabah'], + [b'bta', b'Bata'], + [b'btc', b'Bati (Cameroon)'], + [b'btd', b'Batak Dairi'], + [b'bte', b'Gamo-Ningi'], + [b'btf', b'Birgit'], + [b'btg', 'B\xe9t\xe9, Gagnoa'], + [b'bth', b'Bidayuh, Biatah'], + [b'bti', b'Burate'], + [b'btj', b'Malay, Bacanese'], + [b'btl', b'Bhatola'], + [b'btm', b'Batak Mandailing'], + [b'btn', b'Ratagnon'], + [b'bto', b'Bikol, Rinconada'], + [b'btp', b'Budibud'], + [b'btq', b'Batek'], + [b'btr', b'Baetora'], + [b'bts', b'Batak Simalungun'], + [b'btt', b'Bete-Bendi'], + [b'btu', b'Batu'], + [b'btv', b'Bateri'], + [b'btw', b'Butuanon'], + [b'btx', b'Batak Karo'], + [b'bty', b'Bobot'], + [b'btz', b'Batak Alas-Kluet'], + [b'bua', b'Buriat'], + [b'bub', b'Bua'], + [b'buc', b'Bushi'], + [b'bud', b'Ntcham'], + [b'bue', b'Beothuk'], + [b'buf', b'Bushoong'], + [b'bug', b'Buginese'], + [b'buh', b'Bunu, Younuo'], + [b'bui', b'Bongili'], + [b'buj', b'Basa-Gurmana'], + [b'buk', b'Bugawac'], + [b'bul', b'Bulgarian'], + [b'bum', b'Bulu (Cameroon)'], + [b'bun', b'Sherbro'], + [b'buo', b'Terei'], + [b'bup', b'Busoa'], + [b'buq', b'Brem'], + [b'bus', b'Bokobaru'], + [b'but', b'Bungain'], + [b'buu', b'Budu'], + [b'buv', b'Bun'], + [b'buw', b'Bubi'], + [b'bux', b'Boghom'], + [b'buy', b'Bullom So'], + [b'buz', b'Bukwen'], + [b'bva', b'Barein'], + [b'bvb', b'Bube'], + [b'bvc', b'Baelelea'], + [b'bvd', b'Baeggu'], + [b'bve', b'Malay, Berau'], + [b'bvf', b'Boor'], + [b'bvg', b'Bonkeng'], + [b'bvh', b'Bure'], + [b'bvi', b'Belanda Viri'], + [b'bvj', b'Baan'], + [b'bvk', b'Bukat'], + [b'bvl', b'Bolivian Sign Language'], + [b'bvm', b'Bamunka'], + [b'bvn', b'Buna'], + [b'bvo', b'Bolgo'], + [b'bvp', b'Bumang'], + [b'bvq', b'Birri'], + [b'bvr', b'Burarra'], + [b'bvt', b'Bati (Indonesia)'], + [b'bvu', b'Malay, Bukit'], + [b'bvv', b'Baniva'], + [b'bvw', b'Boga'], + [b'bvx', b'Dibole'], + [b'bvy', b'Baybayanon'], + [b'bvz', b'Bauzi'], + [b'bwa', b'Bwatoo'], + [b'bwb', b'Namosi-Naitasiri-Serua'], + [b'bwc', b'Bwile'], + [b'bwd', b'Bwaidoka'], + [b'bwe', b'Karen, Bwe'], + [b'bwf', b'Boselewa'], + [b'bwg', b'Barwe'], + [b'bwh', b'Bishuo'], + [b'bwi', b'Baniwa'], + [b'bwj', 'Bwamu, L\xe1\xe1 L\xe1\xe1'], + [b'bwk', b'Bauwaki'], + [b'bwl', b'Bwela'], + [b'bwm', b'Biwat'], + [b'bwn', b'Bunu, Wunai'], + [b'bwo', b'Boro (Ethiopia)'], + [b'bwp', b'Mandobo Bawah'], + [b'bwq', 'Bobo Madar\xe9, Southern'], + [b'bwr', b'Bura-Pabir'], + [b'bws', b'Bomboma'], + [b'bwt', b'Bafaw-Balong'], + [b'bwu', b'Buli (Ghana)'], + [b'bww', b'Bwa'], + [b'bwx', b'Bunu, Bu-Nao'], + [b'bwy', b'Bwamu, Cwi'], + [b'bwz', b'Bwisi'], + [b'bxa', b'Tairaha'], + [b'bxb', b'Bor, Belanda'], + [b'bxc', b'Molengue'], + [b'bxd', b'Pela'], + [b'bxe', b'Birale'], + [b'bxf', b'Bilur'], + [b'bxg', b'Bangala'], + [b'bxh', b'Buhutu'], + [b'bxi', b'Pirlatapa'], + [b'bxj', b'Bayungu'], + [b'bxk', b'Bukusu'], + [b'bxl', b'Jalkunan'], + [b'bxm', b'Buriat, Mongolia'], + [b'bxn', b'Burduna'], + [b'bxo', b'Barikanchi'], + [b'bxp', b'Bebil'], + [b'bxq', b'Beele'], + [b'bxr', b'Buriat, Russia'], + [b'bxs', b'Busam'], + [b'bxu', b'Buriat, China'], + [b'bxv', b'Berakou'], + [b'bxw', b'Bankagooma'], + [b'bxx', b'Borna (Democratic Republic of Congo)'], + [b'bxz', b'Binahari'], + [b'bya', b'Batak'], + [b'byb', b'Bikya'], + [b'byc', b'Ubaghara'], + [b'byd', b"Benyadu'"], + [b'bye', b'Pouye'], + [b'byf', b'Bete'], + [b'byg', b'Baygo'], + [b'byh', b'Bhujel'], + [b'byi', b'Buyu'], + [b'byj', b'Bina (Nigeria)'], + [b'byk', b'Biao'], + [b'byl', b'Bayono'], + [b'bym', b'Bidyara'], + [b'byn', b'Bilin'], + [b'byo', b'Biyo'], + [b'byp', b'Bumaji'], + [b'byq', b'Basay'], + [b'byr', b'Baruya'], + [b'bys', b'Burak'], + [b'byt', b'Berti'], + [b'byv', b'Medumba'], + [b'byw', b'Belhariya'], + [b'byx', b'Qaqet'], + [b'byy', b'Buya'], + [b'byz', b'Banaro'], + [b'bza', b'Bandi'], + [b'bzb', b'Andio'], + [b'bzc', b'Malagasy, Southern Betsimisaraka'], + [b'bzd', b'Bribri'], + [b'bze', b'Bozo, Jenaama'], + [b'bzf', b'Boikin'], + [b'bzg', b'Babuza'], + [b'bzh', b'Buang, Mapos'], + [b'bzi', b'Bisu'], + [b'bzj', b'Kriol English, Belize'], + [b'bzk', b'Creole English, Nicaragua'], + [b'bzl', b'Boano (Sulawesi)'], + [b'bzm', b'Bolondo'], + [b'bzn', b'Boano (Maluku)'], + [b'bzo', b'Bozaba'], + [b'bzp', b'Kemberano'], + [b'bzq', b'Buli (Indonesia)'], + [b'bzr', b'Biri'], + [b'bzs', b'Brazilian Sign Language'], + [b'bzt', b'Brithenig'], + [b'bzu', b'Burmeso'], + [b'bzv', b'Naami'], + [b'bzw', b'Basa (Nigeria)'], + [b'bzx', 'Bozo, K\u025bl\u025bngaxo'], + [b'bzy', b'Obanliku'], + [b'bzz', b'Evant'], + [b'caa', 'Chort\xed'], + [b'cab', b'Garifuna'], + [b'cac', b'Chuj'], + [b'cad', b'Caddo'], + [b'cae', b'Lehar'], + [b'caf', b'Carrier, Southern'], + [b'cag', 'Nivacl\xe9'], + [b'cah', b'Cahuarano'], + [b'caj', 'Chan\xe9'], + [b'cak', b'Kaqchikel'], + [b'cal', b'Carolinian'], + [b'cam', 'Cemuh\xee'], + [b'can', b'Chambri'], + [b'cao', 'Ch\xe1cobo'], + [b'cap', b'Chipaya'], + [b'caq', b'Nicobarese, Car'], + [b'car', b'Carib, Galibi'], + [b'cas', 'Tsiman\xe9'], + [b'cat', b'Catalan'], + [b'cav', 'Cavine\xf1a'], + [b'caw', b'Callawalla'], + [b'cax', b'Chiquitano'], + [b'cay', b'Cayuga'], + [b'caz', b'Canichana'], + [b'cbb', 'Cabiyar\xed'], + [b'cbc', b'Carapana'], + [b'cbd', b'Carijona'], + [b'cbe', b'Chipiajes'], + [b'cbg', b'Chimila'], + [b'cbh', b'Cagua'], + [b'cbi', b'Chachi'], + [b'cbj', b'Ede Cabe'], + [b'cbk', b'Chavacano'], + [b'cbl', b'Chin, Bualkhaw'], + [b'cbn', b'Nyahkur'], + [b'cbo', b'Izora'], + [b'cbr', b'Cashibo-Cacataibo'], + [b'cbs', b'Cashinahua'], + [b'cbt', b'Chayahuita'], + [b'cbu', b'Candoshi-Shapra'], + [b'cbv', b'Cacua'], + [b'cbw', b'Kinabalian'], + [b'cby', b'Carabayo'], + [b'cca', b'Cauca'], + [b'ccc', b'Chamicuro'], + [b'ccd', b'Creole, Cafundo'], + [b'cce', b'Chopi'], + [b'ccg', b'Daka, Samba'], + [b'cch', b'Atsam'], + [b'ccj', b'Kasanga'], + [b'ccl', b'Cutchi-Swahili'], + [b'ccm', b'Creole Malay, Malaccan'], + [b'cco', b'Chinantec, Comaltepec'], + [b'ccp', b'Chakma'], + [b'ccr', b'Cacaopera'], + [b'cda', b'Choni'], + [b'cde', b'Chenchu'], + [b'cdf', b'Chiru'], + [b'cdg', b'Chamari'], + [b'cdh', b'Chambeali'], + [b'cdi', b'Chodri'], + [b'cdj', b'Churahi'], + [b'cdm', b'Chepang'], + [b'cdn', b'Chaudangsi'], + [b'cdo', b'Chinese, Min Dong'], + [b'cdr', b'Cinda-Regi-Tiyal'], + [b'cds', b'Chadian Sign Language'], + [b'cdy', b'Chadong'], + [b'cdz', b'Koda'], + [b'cea', b'Chehalis, Lower'], + [b'ceb', b'Cebuano'], + [b'ceg', b'Chamacoco'], + [b'cek', b'Chin, Eastern Khumi'], + [b'cen', b'Cen'], + [b'ces', b'Czech'], + [b'cet', 'Cent\xfa\xfam'], + [b'cfa', b'Dijim-Bwilim'], + [b'cfd', b'Cara'], + [b'cfg', b'Como Karim'], + [b'cfm', b'Chin, Falam'], + [b'cga', b'Changriwa'], + [b'cgc', b'Kagayanen'], + [b'cgg', b'Chiga'], + [b'cgk', b'Chocangacakha'], + [b'cha', b'Chamorro'], + [b'chb', b'Chibcha'], + [b'chc', b'Catawba'], + [b'chd', b'Chontal, Highland Oaxaca'], + [b'che', b'Chechen'], + [b'chf', b'Chontal, Tabasco'], + [b'chg', b'Chagatai'], + [b'chh', b'Chinook'], + [b'chj', 'Chinantec, Ojitl\xe1n'], + [b'chk', b'Chuukese'], + [b'chl', b'Cahuilla'], + [b'chm', b'Mari (Russia)'], + [b'chn', b'Chinook jargon'], + [b'cho', b'Choctaw'], + [b'chp', b'Chipewyan'], + [b'chq', b'Chinantec, Quiotepec'], + [b'chr', b'Cherokee'], + [b'cht', 'Chol\xf3n'], + [b'chu', b'Slavic, Church'], + [b'chv', b'Chuvash'], + [b'chw', b'Chuwabu'], + [b'chx', b'Chantyal'], + [b'chy', b'Cheyenne'], + [b'chz', 'Chinantec, Ozumac\xedn'], + [b'cia', b'Cia-Cia'], + [b'cib', b'Gbe, Ci'], + [b'cic', b'Chickasaw'], + [b'cid', b'Chimariko'], + [b'cie', b'Cineni'], + [b'cih', b'Chinali'], + [b'cik', b'Kinnauri, Chitkuli'], + [b'cim', b'Cimbrian'], + [b'cin', b'Cinta Larga'], + [b'cip', b'Chiapanec'], + [b'cir', b'Tiri'], + [b'ciw', b'Chippewa'], + [b'ciy', b'Chaima'], + [b'cja', b'Cham, Western'], + [b'cje', b'Chru'], + [b'cjh', b'Chehalis, Upper'], + [b'cji', b'Chamalal'], + [b'cjk', b'Chokwe'], + [b'cjm', b'Cham, Eastern'], + [b'cjn', b'Chenapian'], + [b'cjo', 'Ash\xe9ninka Pajonal'], + [b'cjp', 'Cab\xe9car'], + [b'cjs', b'Shor'], + [b'cjv', b'Chuave'], + [b'cjy', b'Chinese, Jinyu'], + [b'ckb', b'Kurdish, Central'], + [b'ckh', b'Chak'], + [b'ckl', b'Cibak'], + [b'ckn', b'Chin, Kaang'], + [b'cko', b'Anufo'], + [b'ckq', b'Kajakse'], + [b'ckr', b'Kairak'], + [b'cks', b'Tayo'], + [b'ckt', b'Chukot'], + [b'cku', b'Koasati'], + [b'ckv', b'Kavalan'], + [b'ckx', b'Caka'], + [b'cky', b'Cakfem-Mushere'], + [b'ckz', 'Cakchiquel-Quich\xe9 Mixed Language'], + [b'cla', b'Ron'], + [b'clc', b'Chilcotin'], + [b'cld', b'Neo-Aramaic, Chaldean'], + [b'cle', b'Chinantec, Lealao'], + [b'clh', b'Chilisso'], + [b'cli', b'Chakali'], + [b'clj', b'Chin, Laitu'], + [b'clk', b'Idu-Mishmi'], + [b'cll', b'Chala'], + [b'clm', b'Clallam'], + [b'clo', b'Chontal, Lowland Oaxaca'], + [b'clt', b'Chin, Lautu'], + [b'clu', b'Caluyanun'], + [b'clw', b'Chulym'], + [b'cly', b'Chatino, Eastern Highland'], + [b'cma', b'Maa'], + [b'cme', b'Cerma'], + [b'cmg', b'Mongolian, Classical'], + [b'cmi', 'Ember\xe1-Cham\xed'], + [b'cml', b'Campalagian'], + [b'cmm', b'Michigamea'], + [b'cmn', b'Chinese, Mandarin'], + [b'cmo', b'Mnong, Central'], + [b'cmr', b'Chin, Mro-Khimi'], + [b'cms', b'Messapic'], + [b'cmt', b'Camtho'], + [b'cna', b'Changthang'], + [b'cnb', b'Chin, Chinbon'], + [b'cnc', 'C\xf4\xf4ng'], + [b'cng', b'Qiang, Northern'], + [b'cnh', b'Chin, Haka'], + [b'cni', 'Ash\xe1ninka'], + [b'cnk', b'Chin, Khumi'], + [b'cnl', b'Chinantec, Lalana'], + [b'cno', b'Con'], + [b'cns', b'Asmat, Central'], + [b'cnt', b'Chinantec, Tepetotutla'], + [b'cnu', b'Chenoua'], + [b'cnw', b'Chin, Ngawn'], + [b'cnx', b'Cornish, Middle'], + [b'coa', b'Malay, Cocos Islands'], + [b'cob', b'Chicomuceltec'], + [b'coc', b'Cocopa'], + [b'cod', b'Cocama-Cocamilla'], + [b'coe', b'Koreguaje'], + [b'cof', b'Colorado'], + [b'cog', b'Chong'], + [b'coh', b'Chonyi-Dzihana-Kauma'], + [b'coj', b'Cochimi'], + [b'cok', b'Cora, Santa Teresa'], + [b'col', b'Columbia-Wenatchi'], + [b'com', b'Comanche'], + [b'con', 'Cof\xe1n'], + [b'coo', b'Comox'], + [b'cop', b'Coptic'], + [b'coq', b'Coquille'], + [b'cor', b'Cornish'], + [b'cos', b'Corsican'], + [b'cot', b'Caquinte'], + [b'cou', b'Wamey'], + [b'cov', b'Cao Miao'], + [b'cow', b'Cowlitz'], + [b'cox', b'Nanti'], + [b'coy', b'Coyaima'], + [b'coz', b'Chochotec'], + [b'cpa', b'Chinantec, Palantla'], + [b'cpb', 'Ash\xe9ninka, Ucayali-Yur\xfaa'], + [b'cpc', 'Ajy\xedninka Apurucayali'], + [b'cpg', b'Greek, Cappadocian'], + [b'cpi', b'Pidgin English, Chinese'], + [b'cpn', b'Cherepon'], + [b'cpo', b'Kpeego'], + [b'cps', b'Capiznon'], + [b'cpu', 'Ash\xe9ninka, Pichis'], + [b'cpx', b'Chinese, Pu-Xian'], + [b'cpy', 'Ash\xe9ninka, South Ucayali'], + [b'cqd', b'Miao, Chuanqiandian Cluster'], + [b'cqu', b'Quechua, Chilean'], + [b'cra', b'Chara'], + [b'crb', b'Carib, Island'], + [b'crc', b'Lonwolwol'], + [b'crd', b"Coeur d'Alene"], + [b'cre', b'Cree'], + [b'crf', b'Caramanta'], + [b'crg', b'Michif'], + [b'crh', b'Tatar, Crimean'], + [b'cri', 'S\xe3otomense'], + [b'crj', b'Cree, Southern East'], + [b'crk', b'Cree, Plains'], + [b'crl', b'Cree, Northern East'], + [b'crm', b'Cree, Moose'], + [b'crn', b'Cora, El Nayar'], + [b'cro', b'Crow'], + [b'crq', b"Chorote, Iyo'wujwa"], + [b'crr', b'Algonquian, Carolina'], + [b'crs', b'Creole French, Seselwa'], + [b'crt', b"Chorote, Iyojwa'ja"], + [b'crv', b'Chaura'], + [b'crw', b'Chrau'], + [b'crx', b'Carrier'], + [b'cry', b'Cori'], + [b'crz', 'Cruze\xf1o'], + [b'csa', b'Chinantec, Chiltepec'], + [b'csb', b'Kashubian'], + [b'csc', b'Catalan Sign Language'], + [b'csd', b'Chiangmai Sign Language'], + [b'cse', b'Czech Sign Language'], + [b'csf', b'Cuba Sign Language'], + [b'csg', b'Chilean Sign Language'], + [b'csh', b'Chin, Asho'], + [b'csi', b'Miwok, Coast'], + [b'csj', b'Chin, Songlai'], + [b'csk', b'Jola-Kasa'], + [b'csl', b'Chinese Sign Language'], + [b'csm', b'Miwok, Central Sierra'], + [b'csn', b'Colombian Sign Language'], + [b'cso', b'Chinantec, Sochiapam'], + [b'csq', b'Croatia Sign Language'], + [b'csr', b'Costa Rican Sign Language'], + [b'css', b'Ohlone, Southern'], + [b'cst', b'Ohlone, Northern'], + [b'csv', b'Chin, Sumtu'], + [b'csw', b'Cree, Swampy'], + [b'csy', b'Chin, Siyin'], + [b'csz', b'Coos'], + [b'cta', b'Chatino, Tataltepec'], + [b'ctc', b'Chetco'], + [b'ctd', b'Chin, Tedim'], + [b'cte', b'Chinantec, Tepinapa'], + [b'ctg', b'Chittagonian'], + [b'cth', b'Chin, Thaiphum'], + [b'ctl', b'Chinantec, Tlacoatzintepec'], + [b'ctm', b'Chitimacha'], + [b'ctn', b'Chhintange'], + [b'cto', 'Ember\xe1-Cat\xedo'], + [b'ctp', b'Chatino, Western Highland'], + [b'cts', b'Bikol, Northern Catanduanes'], + [b'ctt', b'Chetti, Wayanad'], + [b'ctu', b'Chol'], + [b'ctz', b'Chatino, Zacatepec'], + [b'cua', b'Cua'], + [b'cub', b'Cubeo'], + [b'cuc', b'Chinantec, Usila'], + [b'cug', b'Cung'], + [b'cuh', b'Chuka'], + [b'cui', b'Cuiba'], + [b'cuj', b'Mashco Piro'], + [b'cuk', b'Kuna, San Blas'], + [b'cul', b'Culina'], + [b'cum', b'Cumeral'], + [b'cuo', b'Cumanagoto'], + [b'cup', 'Cupe\xf1o'], + [b'cuq', b'Cun'], + [b'cur', b'Chhulung'], + [b'cut', b'Cuicatec, Teutila'], + [b'cuu', b'Tai Ya'], + [b'cuv', b'Cuvok'], + [b'cuw', b'Chukwa'], + [b'cux', b'Cuicatec, Tepeuxila'], + [b'cvg', b'Chug'], + [b'cvn', b'Chinantec, Valle Nacional'], + [b'cwa', b'Kabwa'], + [b'cwb', b'Maindo'], + [b'cwd', b'Cree, Woods'], + [b'cwe', b'Kwere'], + [b'cwg', b'Chewong'], + [b'cwt', b'Kuwaataay'], + [b'cya', b'Chatino, Nopala'], + [b'cyb', b'Cayubaba'], + [b'cym', b'Welsh'], + [b'cyo', b'Cuyonon'], + [b'czh', b'Chinese, Huizhou'], + [b'czk', b'Knaanic'], + [b'czn', b'Chatino, Zenzontepec'], + [b'czo', b'Chinese, Min Zhong'], + [b'czt', b'Chin, Zotung'], + [b'daa', 'Dangal\xe9at'], + [b'dac', b'Dambi'], + [b'dad', b'Marik'], + [b'dae', b'Duupa'], + [b'dag', b'Dagbani'], + [b'dah', b'Gwahatike'], + [b'dai', b'Day'], + [b'daj', b'Daju, Dar Fur'], + [b'dak', b'Dakota'], + [b'dal', b'Dahalo'], + [b'dam', b'Damakawa'], + [b'dan', b'Danish'], + [b'dao', b'Chin, Daai'], + [b'daq', b'Maria, Dandami'], + [b'dar', b'Dargwa'], + [b'das', b'Daho-Doo'], + [b'dau', b'Daju, Dar Sila'], + [b'dav', b'Taita'], + [b'daw', b'Davawenyo'], + [b'dax', b'Dayi'], + [b'daz', b'Dao'], + [b'dba', b'Bangime'], + [b'dbb', b'Deno'], + [b'dbd', b'Dadiya'], + [b'dbe', b'Dabe'], + [b'dbf', b'Edopi'], + [b'dbg', b'Dogon, Dogul Dom'], + [b'dbi', b'Doka'], + [b'dbj', b"Ida'an"], + [b'dbl', b'Dyirbal'], + [b'dbm', b'Duguri'], + [b'dbn', b'Duriankere'], + [b'dbo', b'Dulbu'], + [b'dbp', b'Duwai'], + [b'dbq', b'Daba'], + [b'dbr', b'Dabarre'], + [b'dbt', b'Dogon, Ben Tey'], + [b'dbu', b'Dogon, Bondum Dom'], + [b'dbv', b'Dungu'], + [b'dbw', b'Dogon, Bankan Tey'], + [b'dby', b'Dibiyaso'], + [b'dcc', b'Deccan'], + [b'dcr', b'Negerhollands'], + [b'dda', b'Dadi Dadi'], + [b'ddd', b'Dongotono'], + [b'dde', b'Doondo'], + [b'ddg', b'Fataluku'], + [b'ddi', b'Goodenough, West'], + [b'ddj', b'Jaru'], + [b'ddn', b'Dendi (Benin)'], + [b'ddo', b'Dido'], + [b'ddr', b'Dhudhuroa'], + [b'dds', b'Dogon, Donno So'], + [b'ddw', b'Dawera-Daweloor'], + [b'dec', b'Dagik'], + [b'ded', b'Dedua'], + [b'dee', b'Dewoin'], + [b'def', b'Dezfuli'], + [b'deg', b'Degema'], + [b'deh', b'Dehwari'], + [b'dei', b'Demisa'], + [b'dek', b'Dek'], + [b'del', b'Delaware'], + [b'dem', b'Dem'], + [b'den', b'Slave (Athapascan)'], + [b'dep', b'Delaware, Pidgin'], + [b'deq', b'Dendi (Central African Republic)'], + [b'der', b'Deori'], + [b'des', b'Desano'], + [b'deu', b'German'], + [b'dev', b'Domung'], + [b'dez', b'Dengese'], + [b'dga', b'Dagaare, Southern'], + [b'dgb', b'Dogon, Bunoge'], + [b'dgc', b'Agta, Casiguran Dumagat'], + [b'dgd', b'Dagaari Dioula'], + [b'dge', b'Degenan'], + [b'dgg', b'Doga'], + [b'dgh', b'Dghwede'], + [b'dgi', b'Dagara, Northern'], + [b'dgk', b'Dagba'], + [b'dgl', b'Andaandi'], + [b'dgn', b'Dagoman'], + [b'dgo', b'Dogri (individual language)'], + [b'dgr', b'Dogrib'], + [b'dgs', b'Dogoso'], + [b'dgt', b"Ndra'ngith"], + [b'dgu', b'Degaru'], + [b'dgw', b'Daungwurrung'], + [b'dgx', b'Doghoro'], + [b'dgz', b'Daga'], + [b'dhd', b'Dhundari'], + [b'dhg', b'Djangu'], + [b'dhi', b'Dhimal'], + [b'dhl', b'Dhalandji'], + [b'dhm', b'Zemba'], + [b'dhn', b'Dhanki'], + [b'dho', b'Dhodia'], + [b'dhr', b'Dhargari'], + [b'dhs', b'Dhaiso'], + [b'dhu', b'Dhurga'], + [b'dhv', b'Dehu'], + [b'dhw', b'Dhanwar (Nepal)'], + [b'dhx', b'Dhungaloo'], + [b'dia', b'Dia'], + [b'dib', b'Dinka, South Central'], + [b'dic', b'Dida, Lakota'], + [b'did', b'Didinga'], + [b'dif', b'Dieri'], + [b'dig', b'Digo'], + [b'dih', b'Kumiai'], + [b'dii', b'Dimbong'], + [b'dij', b'Dai'], + [b'dik', b'Dinka, Southwestern'], + [b'dil', b'Dilling'], + [b'dim', b'Dime'], + [b'din', b'Dinka'], + [b'dio', b'Dibo'], + [b'dip', b'Dinka, Northeastern'], + [b'diq', b'Dimli (individual language)'], + [b'dir', b'Dirim'], + [b'dis', b'Dimasa'], + [b'dit', b'Dirari'], + [b'diu', b'Diriku'], + [b'div', b'Dhivehi'], + [b'diw', b'Dinka, Northwestern'], + [b'dix', b'Dixon Reef'], + [b'diy', b'Diuwe'], + [b'diz', b'Ding'], + [b'dja', b'Djadjawurrung'], + [b'djb', b'Djinba'], + [b'djc', b'Daju, Dar Daju'], + [b'djd', b'Djamindjung'], + [b'dje', b'Zarma'], + [b'djf', b'Djangun'], + [b'dji', b'Djinang'], + [b'djj', b'Djeebbana'], + [b'djk', b'Eastern Maroon Creole'], + [b'djm', b'Dogon, Jamsay'], + [b'djn', b'Djauan'], + [b'djo', b'Jangkang'], + [b'djr', b'Djambarrpuyngu'], + [b'dju', b'Kapriman'], + [b'djw', b'Djawi'], + [b'dka', b'Dakpakha'], + [b'dkk', b'Dakka'], + [b'dkr', b'Kuijau'], + [b'dks', b'Dinka, Southeastern'], + [b'dkx', b'Mazagway'], + [b'dlg', b'Dolgan'], + [b'dlk', b'Dahalik'], + [b'dlm', b'Dalmatian'], + [b'dln', b'Darlong'], + [b'dma', b'Duma'], + [b'dmb', b'Dogon, Mombo'], + [b'dmc', b'Gavak'], + [b'dmd', b'Madhi Madhi'], + [b'dme', b'Dugwor'], + [b'dmg', b'Kinabatangan, Upper'], + [b'dmk', b'Domaaki'], + [b'dml', b'Dameli'], + [b'dmm', b'Dama'], + [b'dmo', b'Kemedzung'], + [b'dmr', b'Damar, East'], + [b'dms', b'Dampelas'], + [b'dmu', b'Dubu'], + [b'dmv', b'Dumpas'], + [b'dmw', b'Mudburra'], + [b'dmx', b'Dema'], + [b'dmy', b'Demta'], + [b'dna', b'Dani, Upper Grand Valley'], + [b'dnd', b'Daonda'], + [b'dne', b'Ndendeule'], + [b'dng', b'Dungan'], + [b'dni', b'Dani, Lower Grand Valley'], + [b'dnj', b'Dan'], + [b'dnk', b'Dengka'], + [b'dnn', 'Dz\xf9\xf9ngoo'], + [b'dnr', b'Danaru'], + [b'dnt', b'Dani, Mid Grand Valley'], + [b'dnu', b'Danau'], + [b'dnv', b'Danu'], + [b'dnw', b'Dani, Western'], + [b'dny', 'Den\xed'], + [b'doa', b'Dom'], + [b'dob', b'Dobu'], + [b'doc', b'Dong, Northern'], + [b'doe', b'Doe'], + [b'dof', b'Domu'], + [b'doh', b'Dong'], + [b'doi', b'Dogri (macrolanguage)'], + [b'dok', b'Dondo'], + [b'dol', b'Doso'], + [b'don', b'Toura (Papua New Guinea)'], + [b'doo', b'Dongo'], + [b'dop', b'Lukpa'], + [b'doq', b'Dominican Sign Language'], + [b'dor', b"Dori'o"], + [b'dos', 'Dogos\xe9'], + [b'dot', b'Dass'], + [b'dov', b'Dombe'], + [b'dow', b'Doyayo'], + [b'dox', b'Bussa'], + [b'doy', b'Dompo'], + [b'doz', b'Dorze'], + [b'dpp', b'Papar'], + [b'drb', b'Dair'], + [b'drc', b'Minderico'], + [b'drd', b'Darmiya'], + [b'dre', b'Dolpo'], + [b'drg', b'Rungus'], + [b'dri', b"C'lela"], + [b'drl', b'Paakantyi'], + [b'drn', b'Damar, West'], + [b'dro', b'Melanau, Daro-Matu'], + [b'drq', b'Dura'], + [b'drr', b'Dororo'], + [b'drs', b'Gedeo'], + [b'drt', b'Drents'], + [b'dru', b'Rukai'], + [b'dry', b'Darai'], + [b'dsb', b'Sorbian, Lower'], + [b'dse', b'Dutch Sign Language'], + [b'dsh', b'Daasanach'], + [b'dsi', b'Disa'], + [b'dsl', b'Danish Sign Language'], + [b'dsn', b'Dusner'], + [b'dso', b'Desiya'], + [b'dsq', b'Tadaksahak'], + [b'dta', b'Daur'], + [b'dtb', b'Kadazan, Labuk-Kinabatangan'], + [b'dtd', b'Ditidaht'], + [b'dth', b'Adithinngithigh'], + [b'dti', b'Dogon, Ana Tinga'], + [b'dtk', b'Dogon, Tene Kan'], + [b'dtm', b'Dogon, Tomo Kan'], + [b'dto', b'Dogon, Tommo So'], + [b'dtp', b'Dusun, Central'], + [b'dtr', b'Lotud'], + [b'dts', b'Dogon, Toro So'], + [b'dtt', b'Dogon, Toro Tegu'], + [b'dtu', b'Dogon, Tebul Ure'], + [b'dty', b'Dotyali'], + [b'dua', b'Duala'], + [b'dub', b'Dubli'], + [b'duc', b'Duna'], + [b'dud', b'Hun-Saare'], + [b'due', b'Agta, Umiray Dumaget'], + [b'duf', b'Dumbea'], + [b'dug', b'Duruma'], + [b'duh', b'Dungra Bhil'], + [b'dui', b'Dumun'], + [b'duj', b'Dhuwal'], + [b'duk', b'Uyajitaya'], + [b'dul', b'Agta, Alabat Island'], + [b'dum', b'Dutch, Middle (ca. 1050-1350)'], + [b'dun', b'Dusun Deyah'], + [b'duo', b'Agta, Dupaninan'], + [b'dup', b'Duano'], + [b'duq', b'Dusun Malang'], + [b'dur', b'Dii'], + [b'dus', b'Dumi'], + [b'duu', b'Drung'], + [b'duv', b'Duvle'], + [b'duw', b'Dusun Witu'], + [b'dux', b'Duungooma'], + [b'duy', b'Agta, Dicamay'], + [b'duz', b'Duli'], + [b'dva', b'Duau'], + [b'dwa', b'Diri'], + [b'dwr', b'Dawro'], + [b'dws', b'Dutton World Speedwords'], + [b'dww', b'Dawawa'], + [b'dya', b'Dyan'], + [b'dyb', b'Dyaberdyaber'], + [b'dyd', b'Dyugun'], + [b'dyg', b'Agta, Villa Viciosa'], + [b'dyi', b'Senoufo, Djimini'], + [b'dym', b'Dogon, Yanda Dom'], + [b'dyn', b'Dyangadi'], + [b'dyo', b'Jola-Fonyi'], + [b'dyu', b'Dyula'], + [b'dyy', b'Dyaabugay'], + [b'dza', b'Tunzu'], + [b'dzd', b'Daza'], + [b'dze', b'Djiwarli'], + [b'dzg', b'Dazaga'], + [b'dzl', b'Dzalakha'], + [b'dzn', b'Dzando'], + [b'dzo', b'Dzongkha'], + [b'eaa', b'Karenggapa'], + [b'ebg', b'Ebughu'], + [b'ebk', b'Bontok, Eastern'], + [b'ebo', b'Teke-Ebo'], + [b'ebr', 'Ebri\xe9'], + [b'ebu', b'Embu'], + [b'ecr', b'Eteocretan'], + [b'ecs', b'Ecuadorian Sign Language'], + [b'ecy', b'Eteocypriot'], + [b'eee', b'E'], + [b'efa', b'Efai'], + [b'efe', b'Efe'], + [b'efi', b'Efik'], + [b'ega', b'Ega'], + [b'egl', b'Emilian'], + [b'ego', b'Eggon'], + [b'egy', b'Egyptian (Ancient)'], + [b'ehu', b'Ehueun'], + [b'eip', b'Eipomek'], + [b'eit', b'Eitiep'], + [b'eiv', b'Askopan'], + [b'eja', b'Ejamat'], + [b'eka', b'Ekajuk'], + [b'ekc', b'Karnic, Eastern'], + [b'eke', b'Ekit'], + [b'ekg', b'Ekari'], + [b'eki', b'Eki'], + [b'ekk', b'Estonian, Standard'], + [b'ekl', b'Kol (Bangladesh)'], + [b'ekm', b'Elip'], + [b'eko', b'Koti'], + [b'ekp', b'Ekpeye'], + [b'ekr', b'Yace'], + [b'eky', b'Kayah, Eastern'], + [b'ele', b'Elepi'], + [b'elh', b'El Hugeirat'], + [b'eli', b'Nding'], + [b'elk', b'Elkei'], + [b'ell', b'Greek, Modern (1453-)'], + [b'elm', b'Eleme'], + [b'elo', b'El Molo'], + [b'elu', b'Elu'], + [b'elx', b'Elamite'], + [b'ema', b'Emai-Iuleha-Ora'], + [b'emb', b'Embaloh'], + [b'eme', b'Emerillon'], + [b'emg', b'Meohang, Eastern'], + [b'emi', b'Mussau-Emira'], + [b'emk', b'Maninkakan, Eastern'], + [b'emm', b'Mamulique'], + [b'emn', b'Eman'], + [b'emo', b'Emok'], + [b'emp', 'Ember\xe1, Northern'], + [b'ems', b'Yupik, Pacific Gulf'], + [b'emu', b'Muria, Eastern'], + [b'emw', b'Emplawas'], + [b'emx', b'Erromintxela'], + [b'emy', b'Mayan, Epigraphic'], + [b'ena', b'Apali'], + [b'enb', b'Markweeta'], + [b'enc', b'En'], + [b'end', b'Ende'], + [b'enf', b'Enets, Forest'], + [b'eng', b'English'], + [b'enh', b'Enets, Tundra'], + [b'enm', b'English, Middle (1100-1500)'], + [b'enn', b'Engenni'], + [b'eno', b'Enggano'], + [b'enq', b'Enga'], + [b'enr', b'Emumu'], + [b'enu', b'Enu'], + [b'env', b'Enwan (Edu State)'], + [b'enw', b'Enwan (Akwa Ibom State)'], + [b'eot', "Beti (C\xf4te d'Ivoire)"], + [b'epi', b'Epie'], + [b'epo', b'Esperanto'], + [b'era', b'Eravallan'], + [b'erg', b'Sie'], + [b'erh', b'Eruwa'], + [b'eri', b'Ogea'], + [b'erk', b'Efate, South'], + [b'ero', b'Horpa'], + [b'err', b'Erre'], + [b'ers', b'Ersu'], + [b'ert', b'Eritai'], + [b'erw', b'Erokwanas'], + [b'ese', b'Ese Ejja'], + [b'esh', b'Eshtehardi'], + [b'esi', b'Inupiatun, North Alaskan'], + [b'esk', b'Inupiatun, Northwest Alaska'], + [b'esl', b'Egypt Sign Language'], + [b'esm', b'Esuma'], + [b'esn', b'Salvadoran Sign Language'], + [b'eso', b'Estonian Sign Language'], + [b'esq', b'Esselen'], + [b'ess', b'Yupik, Central Siberian'], + [b'est', b'Estonian'], + [b'esu', b'Yupik, Central'], + [b'etb', b'Etebi'], + [b'etc', b'Etchemin'], + [b'eth', b'Ethiopian Sign Language'], + [b'etn', b'Eton (Vanuatu)'], + [b'eto', b'Eton (Cameroon)'], + [b'etr', b'Edolo'], + [b'ets', b'Yekhee'], + [b'ett', b'Etruscan'], + [b'etu', b'Ejagham'], + [b'etx', b'Eten'], + [b'etz', b'Semimi'], + [b'eus', b'Basque'], + [b'eve', b'Even'], + [b'evh', b'Uvbie'], + [b'evn', b'Evenki'], + [b'ewe', b'Ewe'], + [b'ewo', b'Ewondo'], + [b'ext', b'Extremaduran'], + [b'eya', b'Eyak'], + [b'eyo', b'Keiyo'], + [b'eza', b'Ezaa'], + [b'eze', b'Uzekwe'], + [b'faa', b'Fasu'], + [b'fab', b"Fa d'Ambu"], + [b'fad', b'Wagi'], + [b'faf', b'Fagani'], + [b'fag', b'Finongan'], + [b'fah', b'Fali, Baissa'], + [b'fai', b'Faiwol'], + [b'faj', b'Faita'], + [b'fak', b'Fang (Cameroon)'], + [b'fal', b'Fali, South'], + [b'fam', b'Fam'], + [b'fan', b'Fang (Equatorial Guinea)'], + [b'fao', b'Faroese'], + [b'fap', b'Palor'], + [b'far', b'Fataleka'], + [b'fas', b'Persian'], + [b'fat', b'Fanti'], + [b'fau', b'Fayu'], + [b'fax', b'Fala'], + [b'fay', b'Fars, Southwestern'], + [b'faz', b'Fars, Northwestern'], + [b'fbl', b'Bikol, West Albay'], + [b'fcs', b'Quebec Sign Language'], + [b'fer', b'Feroge'], + [b'ffi', b'Foia Foia'], + [b'ffm', b'Fulfulde, Maasina'], + [b'fgr', b'Fongoro'], + [b'fia', b'Nobiin'], + [b'fie', b'Fyer'], + [b'fij', b'Fijian'], + [b'fil', b'Filipino'], + [b'fin', b'Finnish'], + [b'fip', b'Fipa'], + [b'fir', b'Firan'], + [b'fit', b'Finnish, Tornedalen'], + [b'fiw', b'Fiwaga'], + [b'fkk', 'Kirya-Konz\u0259l'], + [b'fkv', b'Finnish, Kven'], + [b'fla', b"Kalispel-Pend d'Oreille"], + [b'flh', b'Foau'], + [b'fli', b'Fali'], + [b'fll', b'Fali, North'], + [b'fln', b'Flinders Island'], + [b'flr', b'Fuliiru'], + [b'fly', b'Tsotsitaal'], + [b'fmp', b"Fe'fe'"], + [b'fmu', b'Muria, Far Western'], + [b'fng', b'Fanagalo'], + [b'fni', b'Fania'], + [b'fod', b'Foodo'], + [b'foi', b'Foi'], + [b'fom', b'Foma'], + [b'fon', b'Fon'], + [b'for', b'Fore'], + [b'fos', b'Siraya'], + [b'fpe', b'Creole English, Fernando Po'], + [b'fqs', b'Fas'], + [b'fra', b'French'], + [b'frc', b'French, Cajun'], + [b'frd', b'Fordata'], + [b'frk', b'Frankish'], + [b'frm', b'French, Middle (ca. 1400-1600)'], + [b'fro', b'French, Old (842-ca. 1400)'], + [b'frp', b'Arpitan'], + [b'frq', b'Forak'], + [b'frr', b'Frisian, Northern'], + [b'frs', b'Frisian, Eastern'], + [b'frt', b'Fortsenal'], + [b'fry', b'Frisian, Western'], + [b'fse', b'Finnish Sign Language'], + [b'fsl', b'French Sign Language'], + [b'fss', b'Finland-Swedish Sign Language'], + [b'fub', b'Fulfulde, Adamawa'], + [b'fuc', b'Pulaar'], + [b'fud', b'Futuna, East'], + [b'fue', b'Fulfulde, Borgu'], + [b'fuf', b'Pular'], + [b'fuh', b'Fulfulde, Western Niger'], + [b'fui', b'Fulfulde, Bagirmi'], + [b'fuj', b'Ko'], + [b'ful', b'Fulah'], + [b'fum', b'Fum'], + [b'fun', 'Fulni\xf4'], + [b'fuq', b'Fulfulde, Central-Eastern Niger'], + [b'fur', b'Friulian'], + [b'fut', b'Futuna-Aniwa'], + [b'fuu', b'Furu'], + [b'fuv', b'Fulfulde, Nigerian'], + [b'fuy', b'Fuyug'], + [b'fvr', b'Fur'], + [b'fwa', 'Fw\xe2i'], + [b'fwe', b'Fwe'], + [b'gaa', b'Ga'], + [b'gab', b'Gabri'], + [b'gac', b'Great Andamanese, Mixed'], + [b'gad', b'Gaddang'], + [b'gae', b'Guarequena'], + [b'gaf', b'Gende'], + [b'gag', b'Gagauz'], + [b'gah', b'Alekano'], + [b'gai', b'Borei'], + [b'gaj', b'Gadsup'], + [b'gak', b'Gamkonora'], + [b'gal', b'Galolen'], + [b'gam', b'Kandawo'], + [b'gan', b'Chinese, Gan'], + [b'gao', b'Gants'], + [b'gap', b'Gal'], + [b'gaq', b"Gata'"], + [b'gar', b'Galeya'], + [b'gas', b'Garasia, Adiwasi'], + [b'gat', b'Kenati'], + [b'gau', b'Gadaba, Mudhili'], + [b'gaw', b'Nobonob'], + [b'gax', b'Oromo, Borana-Arsi-Guji'], + [b'gay', b'Gayo'], + [b'gaz', b'Oromo, West Central'], + [b'gba', b'Gbaya (Central African Republic)'], + [b'gbb', b'Kaytetye'], + [b'gbd', b'Karadjeri'], + [b'gbe', b'Niksek'], + [b'gbf', b'Gaikundi'], + [b'gbg', b'Gbanziri'], + [b'gbh', b'Gbe, Defi'], + [b'gbi', b'Galela'], + [b'gbj', b'Gadaba, Bodo'], + [b'gbk', b'Gaddi'], + [b'gbl', b'Gamit'], + [b'gbm', b'Garhwali'], + [b'gbn', b"Mo'da"], + [b'gbo', b'Grebo, Northern'], + [b'gbp', b'Gbaya-Bossangoa'], + [b'gbq', b'Gbaya-Bozoum'], + [b'gbr', b'Gbagyi'], + [b'gbs', b'Gbe, Gbesi'], + [b'gbu', b'Gagadu'], + [b'gbv', b'Gbanu'], + [b'gbw', b'Gabi-Gabi'], + [b'gbx', b'Gbe, Eastern Xwla'], + [b'gby', b'Gbari'], + [b'gbz', b'Dari, Zoroastrian'], + [b'gcc', b'Mali'], + [b'gcd', b'Ganggalida'], + [b'gce', b'Galice'], + [b'gcf', b'Creole French, Guadeloupean'], + [b'gcl', b'Creole English, Grenadian'], + [b'gcn', b'Gaina'], + [b'gcr', b'Creole French, Guianese'], + [b'gct', b'German, Colonia Tovar'], + [b'gda', b'Lohar, Gade'], + [b'gdb', b'Gadaba, Pottangi Ollar'], + [b'gdc', b'Gugu Badhun'], + [b'gdd', b'Gedaged'], + [b'gde', b'Gude'], + [b'gdf', b'Guduf-Gava'], + [b'gdg', b"Ga'dang"], + [b'gdh', b'Gadjerawang'], + [b'gdi', b'Gundi'], + [b'gdj', b'Gurdjar'], + [b'gdk', b'Gadang'], + [b'gdl', b'Dirasha'], + [b'gdm', b'Laal'], + [b'gdn', b'Umanakaina'], + [b'gdo', b'Ghodoberi'], + [b'gdq', b'Mehri'], + [b'gdr', b'Wipi'], + [b'gds', b'Ghandruk Sign Language'], + [b'gdt', b'Kungardutyi'], + [b'gdu', b'Gudu'], + [b'gdx', b'Godwari'], + [b'gea', b'Geruma'], + [b'geb', b'Kire'], + [b'gec', b'Grebo, Gboloo'], + [b'ged', b'Gade'], + [b'geg', b'Gengle'], + [b'geh', b'German, Hutterite'], + [b'gei', b'Gebe'], + [b'gej', b'Gen'], + [b'gek', b'Yiwom'], + [b'gel', b"ut-Ma'in"], + [b'geq', b'Geme'], + [b'ges', b'Geser-Gorom'], + [b'gew', b'Gera'], + [b'gex', b'Garre'], + [b'gey', b'Enya'], + [b'gez', b'Geez'], + [b'gfk', b'Patpatar'], + [b'gft', b'Gafat'], + [b'gfx', b'!Xung, Mangetti Dune'], + [b'gga', b'Gao'], + [b'ggb', b'Gbii'], + [b'ggd', b'Gugadj'], + [b'gge', b'Guragone'], + [b'ggg', b'Gurgula'], + [b'ggk', b'Kungarakany'], + [b'ggl', b'Ganglau'], + [b'ggm', b'Gugu Mini'], + [b'ggn', b'Gurung, Eastern'], + [b'ggo', b'Gondi, Southern'], + [b'ggt', b'Gitua'], + [b'ggu', b'Gagu'], + [b'ggw', b'Gogodala'], + [b'gha', 'Ghadam\xe8s'], + [b'ghc', b'Gaelic, Hiberno-Scottish'], + [b'ghe', b'Ghale, Southern'], + [b'ghh', b'Ghale, Northern'], + [b'ghk', b'Karen, Geko'], + [b'ghl', b'Ghulfan'], + [b'ghn', b'Ghanongga'], + [b'gho', b'Ghomara'], + [b'ghr', b'Ghera'], + [b'ghs', b'Guhu-Samane'], + [b'ght', b'Kuke'], + [b'gia', b'Kitja'], + [b'gib', b'Gibanawa'], + [b'gic', b'Gail'], + [b'gid', b'Gidar'], + [b'gig', b'Goaria'], + [b'gih', b'Githabul'], + [b'gil', b'Gilbertese'], + [b'gim', b'Gimi (Eastern Highlands)'], + [b'gin', b'Hinukh'], + [b'gip', b'Gimi (West New Britain)'], + [b'giq', b'Gelao, Green'], + [b'gir', b'Gelao, Red'], + [b'gis', b'Giziga, North'], + [b'git', b'Gitxsan'], + [b'giu', b'Mulao'], + [b'giw', b'Gelao, White'], + [b'gix', b'Gilima'], + [b'giy', b'Giyug'], + [b'giz', b'Giziga, South'], + [b'gji', b'Geji'], + [b'gjk', b'Koli, Kachi'], + [b'gjm', b'Gunditjmara'], + [b'gjn', b'Gonja'], + [b'gju', b'Gujari'], + [b'gka', b'Guya'], + [b'gke', b'Ndai'], + [b'gkn', b'Gokana'], + [b'gko', b'Kok-Nar'], + [b'gkp', b'Kpelle, Guinea'], + [b'gla', b'Gaelic, Scottish'], + [b'glc', b'Bon Gula'], + [b'gld', b'Nanai'], + [b'gle', b'Irish'], + [b'glg', b'Galician'], + [b'glh', b'Pashayi, Northwest'], + [b'gli', b'Guliguli'], + [b'glj', b'Gula Iro'], + [b'glk', b'Gilaki'], + [b'gll', b'Garlali'], + [b'glo', b'Galambu'], + [b'glr', b'Glaro-Twabo'], + [b'glu', b'Gula (Chad)'], + [b'glv', b'Manx'], + [b'glw', b'Glavda'], + [b'gly', b'Gule'], + [b'gma', b'Gambera'], + [b'gmb', b"Gula'alaa"], + [b'gmd', 'M\xe1ghd\xec'], + [b'gmh', b'German, Middle High (ca. 1050-1500)'], + [b'gml', b'German, Middle Low'], + [b'gmm', b'Gbaya-Mbodomo'], + [b'gmn', b'Gimnime'], + [b'gmu', b'Gumalu'], + [b'gmv', b'Gamo'], + [b'gmx', b'Magoma'], + [b'gmy', b'Greek, Mycenaean'], + [b'gmz', b'Mgbolizhia'], + [b'gna', b'Kaansa'], + [b'gnb', b'Gangte'], + [b'gnc', b'Guanche'], + [b'gnd', b'Zulgo-Gemzek'], + [b'gne', b'Ganang'], + [b'gng', b'Ngangam'], + [b'gnh', b'Lere'], + [b'gni', b'Gooniyandi'], + [b'gnk', b'//Gana'], + [b'gnl', b'Gangulu'], + [b'gnm', b'Ginuman'], + [b'gnn', b'Gumatj'], + [b'gno', b'Gondi, Northern'], + [b'gnq', b'Gana'], + [b'gnr', b'Gureng Gureng'], + [b'gnt', b'Guntai'], + [b'gnu', b'Gnau'], + [b'gnw', 'Guaran\xed, Western Bolivian'], + [b'gnz', b'Ganzi'], + [b'goa', b'Guro'], + [b'gob', b'Playero'], + [b'goc', b'Gorakor'], + [b'god', 'Godi\xe9'], + [b'goe', b'Gongduk'], + [b'gof', b'Gofa'], + [b'gog', b'Gogo'], + [b'goh', b'German, Old High (ca. 750-1050)'], + [b'goi', b'Gobasi'], + [b'goj', b'Gowlan'], + [b'gok', b'Gowli'], + [b'gol', b'Gola'], + [b'gom', b'Konkani, Goan'], + [b'gon', b'Gondi'], + [b'goo', b'Gone Dau'], + [b'gop', b'Yeretuar'], + [b'goq', b'Gorap'], + [b'gor', b'Gorontalo'], + [b'gos', b'Gronings'], + [b'got', b'Gothic'], + [b'gou', b'Gavar'], + [b'gow', b'Gorowa'], + [b'gox', b'Gobu'], + [b'goy', b'Goundo'], + [b'goz', b'Gozarkhani'], + [b'gpa', b'Gupa-Abawa'], + [b'gpe', b'Pidgin English, Ghanaian'], + [b'gpn', b'Taiap'], + [b'gqa', b"Ga'anda"], + [b'gqi', b'Guiqiong'], + [b'gqn', b'Guana (Brazil)'], + [b'gqr', b'Gor'], + [b'gqu', b'Qau'], + [b'gra', b'Garasia, Rajput'], + [b'grb', b'Grebo'], + [b'grc', b'Greek, Ancient (to 1453)'], + [b'grd', b'Guruntum-Mbaaru'], + [b'grg', b'Madi'], + [b'grh', b'Gbiri-Niragu'], + [b'gri', b'Ghari'], + [b'grj', b'Grebo, Southern'], + [b'grm', b'Kota Marudu Talantang'], + [b'grn', b'Guarani'], + [b'gro', b'Groma'], + [b'grq', b'Gorovu'], + [b'grr', b'Taznatit'], + [b'grs', b'Gresi'], + [b'grt', b'Garo'], + [b'gru', b'Kistane'], + [b'grv', b'Grebo, Central'], + [b'grw', b'Gweda'], + [b'grx', b'Guriaso'], + [b'gry', b'Grebo, Barclayville'], + [b'grz', b'Guramalum'], + [b'gse', b'Ghanaian Sign Language'], + [b'gsg', b'German Sign Language'], + [b'gsl', b'Gusilay'], + [b'gsm', b'Guatemalan Sign Language'], + [b'gsn', b'Gusan'], + [b'gso', b'Gbaya, Southwest'], + [b'gsp', b'Wasembo'], + [b'gss', b'Greek Sign Language'], + [b'gsw', b'German, Swiss'], + [b'gta', 'Guat\xf3'], + [b'gti', b'Gbati-ri'], + [b'gtu', b'Aghu-Tharnggala'], + [b'gua', b'Shiki'], + [b'gub', 'Guajaj\xe1ra'], + [b'guc', b'Wayuu'], + [b'gud', 'Dida, Yocobou\xe9'], + [b'gue', b'Gurinji'], + [b'guf', b'Gupapuyngu'], + [b'gug', 'Guaran\xed, Paraguayan'], + [b'guh', b'Guahibo'], + [b'gui', 'Guaran\xed, Eastern Bolivian'], + [b'guj', b'Gujarati'], + [b'guk', b'Gumuz'], + [b'gul', b'Creole English, Sea Island'], + [b'gum', b'Guambiano'], + [b'gun', 'Guaran\xed, Mby\xe1'], + [b'guo', b'Guayabero'], + [b'gup', b'Gunwinggu'], + [b'guq', 'Ach\xe9'], + [b'gur', b'Farefare'], + [b'gus', b'Guinean Sign Language'], + [b'gut', 'Mal\xe9ku Ja\xedka'], + [b'guu', 'Yanomam\xf6'], + [b'guv', b'Gey'], + [b'guw', b'Gun'], + [b'gux', 'Gourmanch\xe9ma'], + [b'guz', b'Gusii'], + [b'gva', b'Guana (Paraguay)'], + [b'gvc', b'Guanano'], + [b'gve', b'Duwet'], + [b'gvf', b'Golin'], + [b'gvj', 'Guaj\xe1'], + [b'gvl', b'Gulay'], + [b'gvm', b'Gurmana'], + [b'gvn', b'Kuku-Yalanji'], + [b'gvo', 'Gavi\xe3o Do Jiparan\xe1'], + [b'gvp', 'Gavi\xe3o, Par\xe1'], + [b'gvr', b'Gurung, Western'], + [b'gvs', b'Gumawana'], + [b'gvy', b'Guyani'], + [b'gwa', b'Mbato'], + [b'gwb', b'Gwa'], + [b'gwc', b'Kalami'], + [b'gwd', b'Gawwada'], + [b'gwe', b'Gweno'], + [b'gwf', b'Gowro'], + [b'gwg', b'Moo'], + [b'gwi', 'Gwich\u02bcin'], + [b'gwj', b'/Gwi'], + [b'gwm', b'Awngthim'], + [b'gwn', b'Gwandara'], + [b'gwr', b'Gwere'], + [b'gwt', b'Gawar-Bati'], + [b'gwu', b'Guwamu'], + [b'gww', b'Kwini'], + [b'gwx', b'Gua'], + [b'gxx', 'W\xe8 Southern'], + [b'gya', b'Gbaya, Northwest'], + [b'gyb', b'Garus'], + [b'gyd', b'Kayardild'], + [b'gye', b'Gyem'], + [b'gyf', b'Gungabula'], + [b'gyg', b'Gbayi'], + [b'gyi', b'Gyele'], + [b'gyl', b'Gayil'], + [b'gym', 'Ng\xe4bere'], + [b'gyn', b'Creole English, Guyanese'], + [b'gyr', b'Guarayu'], + [b'gyy', b'Gunya'], + [b'gza', b'Ganza'], + [b'gzi', b'Gazi'], + [b'gzn', b'Gane'], + [b'haa', b'Han'], + [b'hab', b'Hanoi Sign Language'], + [b'hac', b'Gurani'], + [b'had', b'Hatam'], + [b'hae', b'Oromo, Eastern'], + [b'haf', b'Haiphong Sign Language'], + [b'hag', b'Hanga'], + [b'hah', b'Hahon'], + [b'hai', b'Haida'], + [b'haj', b'Hajong'], + [b'hak', b'Chinese, Hakka'], + [b'hal', b'Halang'], + [b'ham', b'Hewa'], + [b'han', b'Hangaza'], + [b'hao', 'Hak\xf6'], + [b'hap', b'Hupla'], + [b'haq', b'Ha'], + [b'har', b'Harari'], + [b'has', b'Haisla'], + [b'hat', b'Haitian'], + [b'hau', b'Hausa'], + [b'hav', b'Havu'], + [b'haw', b'Hawaiian'], + [b'hax', b'Haida, Southern'], + [b'hay', b'Haya'], + [b'haz', b'Hazaragi'], + [b'hba', b'Hamba'], + [b'hbb', b'Huba'], + [b'hbn', b'Heiban'], + [b'hbo', b'Hebrew, Ancient'], + [b'hbs', b'Serbo-Croatian'], + [b'hbu', b'Habu'], + [b'hca', b'Creole Hindi, Andaman'], + [b'hch', b'Huichol'], + [b'hdn', b'Haida, Northern'], + [b'hds', b'Honduras Sign Language'], + [b'hdy', b'Hadiyya'], + [b'hea', b'Miao, Northern Qiandong'], + [b'heb', b'Hebrew'], + [b'hed', 'Herd\xe9'], + [b'heg', b'Helong'], + [b'heh', b'Hehe'], + [b'hei', b'Heiltsuk'], + [b'hem', b'Hemba'], + [b'her', b'Herero'], + [b'hgm', b'Hai//om'], + [b'hgw', b'Haigwai'], + [b'hhi', b'Hoia Hoia'], + [b'hhr', b'Kerak'], + [b'hhy', b'Hoyahoya'], + [b'hia', b'Lamang'], + [b'hib', b'Hibito'], + [b'hid', b'Hidatsa'], + [b'hif', b'Hindi, Fiji'], + [b'hig', b'Kamwe'], + [b'hih', b'Pamosu'], + [b'hii', b'Hinduri'], + [b'hij', b'Hijuk'], + [b'hik', b'Seit-Kaitetu'], + [b'hil', b'Hiligaynon'], + [b'hin', b'Hindi'], + [b'hio', b'Tsoa'], + [b'hir', 'Himarim\xe3'], + [b'hit', b'Hittite'], + [b'hiw', b'Hiw'], + [b'hix', 'Hixkary\xe1na'], + [b'hji', b'Haji'], + [b'hka', b'Kahe'], + [b'hke', b'Hunde'], + [b'hkk', b'Hunjara-Kaina Ke'], + [b'hks', b'Hong Kong Sign Language'], + [b'hla', b'Halia'], + [b'hlb', b'Halbi'], + [b'hld', b'Halang Doan'], + [b'hle', b'Hlersu'], + [b'hlt', b'Chin, Matu'], + [b'hlu', b'Luwian, Hieroglyphic'], + [b'hma', b'Hmong, Southern Mashan'], + [b'hmb', b'Songhay, Humburi Senni'], + [b'hmc', b'Hmong, Central Huishui'], + [b'hmd', b'Miao, Large Flowery'], + [b'hme', b'Hmong, Eastern Huishui'], + [b'hmf', b'Hmong Don'], + [b'hmg', b'Hmong, Southwestern Guiyang'], + [b'hmh', b'Hmong, Southwestern Huishui'], + [b'hmi', b'Hmong, Northern Huishui'], + [b'hmj', b'Ge'], + [b'hmk', b'Maek'], + [b'hml', b'Hmong, Luopohe'], + [b'hmm', b'Hmong, Central Mashan'], + [b'hmn', b'Hmong'], + [b'hmo', b'Hiri Motu'], + [b'hmp', b'Hmong, Northern Mashan'], + [b'hmq', b'Miao, Eastern Qiandong'], + [b'hmr', b'Hmar'], + [b'hms', b'Miao, Southern Qiandong'], + [b'hmt', b'Hamtai'], + [b'hmu', b'Hamap'], + [b'hmv', 'Hmong D\xf4'], + [b'hmw', b'Hmong, Western Mashan'], + [b'hmy', b'Hmong, Southern Guiyang'], + [b'hmz', b'Hmong Shua'], + [b'hna', b'Mina (Cameroon)'], + [b'hnd', b'Hindko, Southern'], + [b'hne', b'Chhattisgarhi'], + [b'hnh', b'//Ani'], + [b'hni', b'Hani'], + [b'hnj', b'Hmong Njua'], + [b'hnn', b'Hanunoo'], + [b'hno', b'Hindko, Northern'], + [b'hns', b'Hindustani, Caribbean'], + [b'hnu', b'Hung'], + [b'hoa', b'Hoava'], + [b'hob', b'Mari (Madang Province)'], + [b'hoc', b'Ho'], + [b'hod', b'Holma'], + [b'hoe', b'Horom'], + [b'hoh', 'Hoby\xf3t'], + [b'hoi', b'Holikachuk'], + [b'hoj', b'Hadothi'], + [b'hol', b'Holu'], + [b'hom', b'Homa'], + [b'hoo', b'Holoholo'], + [b'hop', b'Hopi'], + [b'hor', b'Horo'], + [b'hos', b'Ho Chi Minh City Sign Language'], + [b'hot', b'Hote'], + [b'hov', b'Hovongan'], + [b'how', b'Honi'], + [b'hoy', b'Holiya'], + [b'hoz', b'Hozo'], + [b'hpo', b'Hpon'], + [b'hps', b"Hawai'i Pidgin Sign Language"], + [b'hra', b'Hrangkhol'], + [b'hrc', b'Niwer Mil'], + [b'hre', b'Hre'], + [b'hrk', b'Haruku'], + [b'hrm', b'Miao, Horned'], + [b'hro', b'Haroi'], + [b'hrp', b'Nhirrpi'], + [b'hrt', 'H\xe9rtevin'], + [b'hru', b'Hruso'], + [b'hrv', b'Croatian'], + [b'hrw', b'Warwar Feni'], + [b'hrx', b'Hunsrik'], + [b'hrz', b'Harzani'], + [b'hsb', b'Sorbian, Upper'], + [b'hsh', b'Hungarian Sign Language'], + [b'hsl', b'Hausa Sign Language'], + [b'hsn', b'Chinese, Xiang'], + [b'hss', b'Harsusi'], + [b'hti', b'Hoti'], + [b'hto', b'Huitoto, Minica'], + [b'hts', b'Hadza'], + [b'htu', b'Hitu'], + [b'htx', b'Hittite, Middle'], + [b'hub', b'Huambisa'], + [b'huc', b'=/Hua'], + [b'hud', b'Huaulu'], + [b'hue', b'Huave, San Francisco Del Mar'], + [b'huf', b'Humene'], + [b'hug', b'Huachipaeri'], + [b'huh', b'Huilliche'], + [b'hui', b'Huli'], + [b'huj', b'Hmong, Northern Guiyang'], + [b'huk', b'Hulung'], + [b'hul', b'Hula'], + [b'hum', b'Hungana'], + [b'hun', b'Hungarian'], + [b'huo', b'Hu'], + [b'hup', b'Hupa'], + [b'huq', b'Tsat'], + [b'hur', b'Halkomelem'], + [b'hus', b'Huastec'], + [b'hut', b'Humla'], + [b'huu', b'Huitoto, Murui'], + [b'huv', b'Huave, San Mateo Del Mar'], + [b'huw', b'Hukumina'], + [b'hux', 'Huitoto, N\xfcpode'], + [b'huy', 'Hulaul\xe1'], + [b'huz', b'Hunzib'], + [b'hvc', b'Haitian Vodoun Culture Language'], + [b'hve', b'Huave, San Dionisio Del Mar'], + [b'hvk', b'Haveke'], + [b'hvn', b'Sabu'], + [b'hvv', 'Huave, Santa Mar\xeda Del Mar'], + [b'hwa', 'Wan\xe9'], + [b'hwc', b"Creole English, Hawai'i"], + [b'hwo', b'Hwana'], + [b'hya', b'Hya'], + [b'hye', b'Armenian'], + [b'iai', b'Iaai'], + [b'ian', b'Iatmul'], + [b'iap', b'Iapama'], + [b'iar', b'Purari'], + [b'iba', b'Iban'], + [b'ibb', b'Ibibio'], + [b'ibd', b'Iwaidja'], + [b'ibe', b'Akpes'], + [b'ibg', b'Ibanag'], + [b'ibl', b'Ibaloi'], + [b'ibm', b'Agoi'], + [b'ibn', b'Ibino'], + [b'ibo', b'Igbo'], + [b'ibr', b'Ibuoro'], + [b'ibu', b'Ibu'], + [b'iby', b'Ibani'], + [b'ica', b'Ede Ica'], + [b'ich', b'Etkywan'], + [b'icl', b'Icelandic Sign Language'], + [b'icr', b'Creole English, Islander'], + [b'ida', b'Idakho-Isukha-Tiriki'], + [b'idb', b'Indo-Portuguese'], + [b'idc', b'Idon'], + [b'idd', b'Ede Idaca'], + [b'ide', b'Idere'], + [b'idi', b'Idi'], + [b'ido', b'Ido'], + [b'idr', b'Indri'], + [b'ids', b'Idesa'], + [b'idt', 'Idat\xe9'], + [b'idu', b'Idoma'], + [b'ifa', b'Ifugao, Amganad'], + [b'ifb', b'Ifugao, Batad'], + [b'ife', 'If\xe8'], + [b'iff', b'Ifo'], + [b'ifk', b'Ifugao, Tuwali'], + [b'ifm', b'Teke-Fuumu'], + [b'ifu', b'Ifugao, Mayoyao'], + [b'ify', b'Kallahan, Keley-I'], + [b'igb', b'Ebira'], + [b'ige', b'Igede'], + [b'igg', b'Igana'], + [b'igl', b'Igala'], + [b'igm', b'Kanggape'], + [b'ign', b'Ignaciano'], + [b'igo', b'Isebe'], + [b'igs', b'Interglossa'], + [b'igw', b'Igwe'], + [b'ihb', b'Iha Based Pidgin'], + [b'ihi', b'Ihievbe'], + [b'ihp', b'Iha'], + [b'ihw', b'Bidhawal'], + [b'iii', b'Yi, Sichuan'], + [b'iin', b'Thiin'], + [b'ijc', b'Izon'], + [b'ije', b'Biseni'], + [b'ijj', b'Ede Ije'], + [b'ijn', b'Kalabari'], + [b'ijs', b'Ijo, Southeast'], + [b'ike', b'Inuktitut, Eastern Canadian'], + [b'iki', b'Iko'], + [b'ikk', b'Ika'], + [b'ikl', b'Ikulu'], + [b'iko', b'Olulumo-Ikom'], + [b'ikp', b'Ikpeshi'], + [b'ikr', b'Ikaranggal'], + [b'ikt', b'Inuinnaqtun'], + [b'iku', b'Inuktitut'], + [b'ikv', b'Iku-Gora-Ankwa'], + [b'ikw', b'Ikwere'], + [b'ikx', b'Ik'], + [b'ikz', b'Ikizu'], + [b'ila', b'Ile Ape'], + [b'ilb', b'Ila'], + [b'ile', b'Interlingue'], + [b'ilg', b'Garig-Ilgar'], + [b'ili', b'Ili Turki'], + [b'ilk', b'Ilongot'], + [b'ill', b'Iranun'], + [b'ilo', b'Iloko'], + [b'ils', b'International Sign'], + [b'ilu', b"Ili'uun"], + [b'ilv', b'Ilue'], + [b'ima', b'Malasar, Mala'], + [b'ime', b'Imeraguen'], + [b'imi', b'Anamgura'], + [b'iml', b'Miluk'], + [b'imn', b'Imonda'], + [b'imo', b'Imbongu'], + [b'imr', b'Imroing'], + [b'ims', b'Marsian'], + [b'imy', b'Milyan'], + [ + b'ina', + b'Interlingua (International Auxiliary Language Association)' + ], + [b'inb', b'Inga'], + [b'ind', b'Indonesian'], + [b'ing', b"Degexit'an"], + [b'inh', b'Ingush'], + [b'inj', b'Inga, Jungle'], + [b'inl', b'Indonesian Sign Language'], + [b'inm', b'Minaean'], + [b'inn', b'Isinai'], + [b'ino', b'Inoke-Yate'], + [b'inp', 'I\xf1apari'], + [b'ins', b'Indian Sign Language'], + [b'int', b'Intha'], + [b'inz', 'Inese\xf1o'], + [b'ior', b'Inor'], + [b'iou', b'Tuma-Irumu'], + [b'iow', b'Iowa-Oto'], + [b'ipi', b'Ipili'], + [b'ipk', b'Inupiaq'], + [b'ipo', b'Ipiko'], + [b'iqu', b'Iquito'], + [b'iqw', b'Ikwo'], + [b'ire', b'Iresim'], + [b'irh', b'Irarutu'], + [b'iri', b'Irigwe'], + [b'irk', b'Iraqw'], + [b'irn', 'Ir\xe1ntxe'], + [b'irr', b'Ir'], + [b'iru', b'Irula'], + [b'irx', b'Kamberau'], + [b'iry', b'Iraya'], + [b'isa', b'Isabi'], + [b'isc', b'Isconahua'], + [b'isd', b'Isnag'], + [b'ise', b'Italian Sign Language'], + [b'isg', b'Irish Sign Language'], + [b'ish', b'Esan'], + [b'isi', b'Nkem-Nkum'], + [b'isk', b'Ishkashimi'], + [b'isl', b'Icelandic'], + [b'ism', b'Masimasi'], + [b'isn', b'Isanzu'], + [b'iso', b'Isoko'], + [b'isr', b'Israeli Sign Language'], + [b'ist', b'Istriot'], + [b'isu', b'Isu (Menchum Division)'], + [b'ita', b'Italian'], + [b'itb', b'Itneg, Binongan'], + [b'ite', b'Itene'], + [b'iti', b'Itneg, Inlaod'], + [b'itk', b'Judeo-Italian'], + [b'itl', b'Itelmen'], + [b'itm', b'Itu Mbon Uzo'], + [b'ito', b'Itonama'], + [b'itr', b'Iteri'], + [b'its', b'Isekiri'], + [b'itt', b'Itneg, Maeng'], + [b'itv', b'Itawit'], + [b'itw', b'Ito'], + [b'itx', b'Itik'], + [b'ity', b'Itneg, Moyadan'], + [b'itz', 'Itz\xe1'], + [b'ium', b'Mien, Iu'], + [b'ivb', b'Ibatan'], + [b'ivv', b'Ivatan'], + [b'iwk', b'I-Wak'], + [b'iwm', b'Iwam'], + [b'iwo', b'Iwur'], + [b'iws', b'Iwam, Sepik'], + [b'ixc', b'Ixcatec'], + [b'ixl', b'Ixil'], + [b'iya', b'Iyayu'], + [b'iyo', b'Mesaka'], + [b'iyx', b'Yaka (Congo)'], + [b'izh', b'Ingrian'], + [b'izr', b'Izere'], + [b'izz', b'Izii'], + [b'jaa', 'Jamamad\xed'], + [b'jab', b'Hyam'], + [b'jac', b"Popti'"], + [b'jad', b'Jahanka'], + [b'jae', b'Yabem'], + [b'jaf', b'Jara'], + [b'jah', b'Jah Hut'], + [b'jaj', b'Zazao'], + [b'jak', b'Jakun'], + [b'jal', b'Yalahatan'], + [b'jam', b'Creole English, Jamaican'], + [b'jan', b'Jandai'], + [b'jao', b'Yanyuwa'], + [b'jaq', b'Yaqay'], + [b'jas', b'Javanese, New Caledonian'], + [b'jat', b'Jakati'], + [b'jau', b'Yaur'], + [b'jav', b'Javanese'], + [b'jax', b'Malay, Jambi'], + [b'jay', b'Yan-nhangu'], + [b'jaz', b'Jawe'], + [b'jbe', b'Judeo-Berber'], + [b'jbi', b'Badjiri'], + [b'jbj', b'Arandai'], + [b'jbk', b'Barikewa'], + [b'jbn', b'Nafusi'], + [b'jbo', b'Lojban'], + [b'jbr', b'Jofotek-Bromnya'], + [b'jbt', 'Jabut\xed'], + [b'jbu', b'Jukun Takum'], + [b'jbw', b'Yawijibaya'], + [b'jcs', b'Jamaican Country Sign Language'], + [b'jct', b'Krymchak'], + [b'jda', b'Jad'], + [b'jdg', b'Jadgali'], + [b'jdt', b'Judeo-Tat'], + [b'jeb', b'Jebero'], + [b'jee', b'Jerung'], + [b'jeg', b'Jeng'], + [b'jeh', b'Jeh'], + [b'jei', b'Yei'], + [b'jek', b'Jeri Kuo'], + [b'jel', b'Yelmek'], + [b'jen', b'Dza'], + [b'jer', b'Jere'], + [b'jet', b'Manem'], + [b'jeu', b'Jonkor Bourmataguil'], + [b'jgb', b'Ngbee'], + [b'jge', b'Judeo-Georgian'], + [b'jgk', b'Gwak'], + [b'jgo', b'Ngomba'], + [b'jhi', b'Jehai'], + [b'jhs', b'Jhankot Sign Language'], + [b'jia', b'Jina'], + [b'jib', b'Jibu'], + [b'jic', b'Tol'], + [b'jid', b'Bu'], + [b'jie', b'Jilbe'], + [b'jig', b'Djingili'], + [b'jih', b'sTodsde'], + [b'jii', b'Jiiddu'], + [b'jil', b'Jilim'], + [b'jim', b'Jimi (Cameroon)'], + [b'jio', b'Jiamao'], + [b'jiq', b'Guanyinqiao'], + [b'jit', b'Jita'], + [b'jiu', b'Jinuo, Youle'], + [b'jiv', b'Shuar'], + [b'jiy', b'Jinuo, Buyuan'], + [b'jjr', b'Bankal'], + [b'jkm', b'Karen, Mobwa'], + [b'jko', b'Kubo'], + [b'jkp', b'Karen, Paku'], + [b'jkr', b'Koro (India)'], + [b'jku', b'Labir'], + [b'jle', b'Ngile'], + [b'jls', b'Jamaican Sign Language'], + [b'jma', b'Dima'], + [b'jmb', b'Zumbun'], + [b'jmc', b'Machame'], + [b'jmd', b'Yamdena'], + [b'jmi', b'Jimi (Nigeria)'], + [b'jml', b'Jumli'], + [b'jmn', b'Naga, Makuri'], + [b'jmr', b'Kamara'], + [b'jms', b'Mashi (Nigeria)'], + [b'jmw', b'Mouwase'], + [b'jmx', b'Mixtec, Western Juxtlahuaca'], + [b'jna', b'Jangshung'], + [b'jnd', b'Jandavra'], + [b'jng', b'Yangman'], + [b'jni', b'Janji'], + [b'jnj', b'Yemsa'], + [b'jnl', b'Rawat'], + [b'jns', b'Jaunsari'], + [b'job', b'Joba'], + [b'jod', b'Wojenaka'], + [b'jor', 'Jor\xe1'], + [b'jos', b'Jordanian Sign Language'], + [b'jow', b'Jowulu'], + [b'jpa', b'Aramaic, Jewish Palestinian'], + [b'jpn', b'Japanese'], + [b'jpr', b'Judeo-Persian'], + [b'jqr', b'Jaqaru'], + [b'jra', b'Jarai'], + [b'jrb', b'Judeo-Arabic'], + [b'jrr', b'Jiru'], + [b'jrt', b'Jorto'], + [b'jru', 'Japrer\xeda'], + [b'jsl', b'Japanese Sign Language'], + [b'jua', 'J\xfama'], + [b'jub', b'Wannu'], + [b'juc', b'Jurchen'], + [b'jud', b'Worodougou'], + [b'juh', 'H\xf5ne'], + [b'jui', b'Ngadjuri'], + [b'juk', b'Wapan'], + [b'jul', b'Jirel'], + [b'jum', b'Jumjum'], + [b'jun', b'Juang'], + [b'juo', b'Jiba'], + [b'jup', 'Hupd\xeb'], + [b'jur', 'Jur\xfana'], + [b'jus', b'Jumla Sign Language'], + [b'jut', b'Jutish'], + [b'juu', b'Ju'], + [b'juw', 'W\xe3pha'], + [b'juy', b'Juray'], + [b'jvd', b'Javindo'], + [b'jvn', b'Javanese, Caribbean'], + [b'jwi', b'Jwira-Pepesa'], + [b'jya', b'Jiarong'], + [b'jye', b'Arabic, Judeo-Yemeni'], + [b'jyy', b'Jaya'], + [b'kaa', b'Kara-Kalpak'], + [b'kab', b'Kabyle'], + [b'kac', b'Kachin'], + [b'kad', b'Adara'], + [b'kae', b'Ketangalan'], + [b'kaf', b'Katso'], + [b'kag', b'Kajaman'], + [b'kah', b'Kara (Central African Republic)'], + [b'kai', b'Karekare'], + [b'kaj', b'Jju'], + [b'kak', b'Kallahan, Kayapa'], + [b'kal', b'Kalaallisut'], + [b'kam', b'Kamba (Kenya)'], + [b'kan', b'Kannada'], + [b'kao', b'Xaasongaxango'], + [b'kap', b'Bezhta'], + [b'kaq', b'Capanahua'], + [b'kas', b'Kashmiri'], + [b'kat', b'Georgian'], + [b'kau', b'Kanuri'], + [b'kav', 'Katuk\xedna'], + [b'kaw', b'Kawi'], + [b'kax', b'Kao'], + [b'kay', 'Kamayur\xe1'], + [b'kaz', b'Kazakh'], + [b'kba', b'Kalarko'], + [b'kbb', 'Kaxui\xe2na'], + [b'kbc', 'Kadiw\xe9u'], + [b'kbd', b'Kabardian'], + [b'kbe', b'Kanju'], + [b'kbf', b'Kakauhua'], + [b'kbg', b'Khamba'], + [b'kbh', 'Cams\xe1'], + [b'kbi', b'Kaptiau'], + [b'kbj', b'Kari'], + [b'kbk', b'Koiari, Grass'], + [b'kbl', b'Kanembu'], + [b'kbm', b'Iwal'], + [b'kbn', b'Kare (Central African Republic)'], + [b'kbo', b'Keliko'], + [b'kbp', 'Kabiy\xe8'], + [b'kbq', b'Kamano'], + [b'kbr', b'Kafa'], + [b'kbs', b'Kande'], + [b'kbt', b'Abadi'], + [b'kbu', b'Kabutra'], + [b'kbv', b'Dera (Indonesia)'], + [b'kbw', b'Kaiep'], + [b'kbx', b'Ap Ma'], + [b'kby', b'Kanuri, Manga'], + [b'kbz', b'Duhwa'], + [b'kca', b'Khanty'], + [b'kcb', b'Kawacha'], + [b'kcc', b'Lubila'], + [b'kcd', 'Kanum, Ngk\xe2lmpw'], + [b'kce', b'Kaivi'], + [b'kcf', b'Ukaan'], + [b'kcg', b'Tyap'], + [b'kch', b'Vono'], + [b'kci', b'Kamantan'], + [b'kcj', b'Kobiana'], + [b'kck', b'Kalanga'], + [b'kcl', b'Kela (Papua New Guinea)'], + [b'kcm', b'Gula (Central African Republic)'], + [b'kcn', b'Nubi'], + [b'kco', b'Kinalakna'], + [b'kcp', b'Kanga'], + [b'kcq', b'Kamo'], + [b'kcr', b'Katla'], + [b'kcs', b'Koenoem'], + [b'kct', b'Kaian'], + [b'kcu', b'Kami (Tanzania)'], + [b'kcv', b'Kete'], + [b'kcw', b'Kabwari'], + [b'kcx', b'Kachama-Ganjule'], + [b'kcy', b'Korandje'], + [b'kcz', b'Konongo'], + [b'kda', b'Worimi'], + [b'kdc', b'Kutu'], + [b'kdd', b'Yankunytjatjara'], + [b'kde', b'Makonde'], + [b'kdf', b'Mamusi'], + [b'kdg', b'Seba'], + [b'kdh', b'Tem'], + [b'kdi', b'Kumam'], + [b'kdj', b'Karamojong'], + [b'kdk', 'Num\xe8\xe8'], + [b'kdl', b'Tsikimba'], + [b'kdm', b'Kagoma'], + [b'kdn', b'Kunda'], + [b'kdp', b'Kaningdon-Nindem'], + [b'kdq', b'Koch'], + [b'kdr', b'Karaim'], + [b'kdt', b'Kuy'], + [b'kdu', b'Kadaru'], + [b'kdw', b'Koneraw'], + [b'kdx', b'Kam'], + [b'kdy', b'Keder'], + [b'kdz', b'Kwaja'], + [b'kea', b'Kabuverdianu'], + [b'keb', 'K\xe9l\xe9'], + [b'kec', b'Keiga'], + [b'ked', b'Kerewe'], + [b'kee', b'Keres, Eastern'], + [b'kef', b'Kpessi'], + [b'keg', b'Tese'], + [b'keh', b'Keak'], + [b'kei', b'Kei'], + [b'kej', b'Kadar'], + [b'kek', 'Kekch\xed'], + [b'kel', b'Kela (Democratic Republic of Congo)'], + [b'kem', b'Kemak'], + [b'ken', b'Kenyang'], + [b'keo', b'Kakwa'], + [b'kep', b'Kaikadi'], + [b'keq', b'Kamar'], + [b'ker', b'Kera'], + [b'kes', b'Kugbo'], + [b'ket', b'Ket'], + [b'keu', b'Akebu'], + [b'kev', b'Kanikkaran'], + [b'kew', b'Kewa, West'], + [b'kex', b'Kukna'], + [b'key', b'Kupia'], + [b'kez', b'Kukele'], + [b'kfa', b'Kodava'], + [b'kfb', b'Kolami, Northwestern'], + [b'kfc', b'Konda-Dora'], + [b'kfd', b'Koraga, Korra'], + [b'kfe', b'Kota (India)'], + [b'kff', b'Koya'], + [b'kfg', b'Kudiya'], + [b'kfh', b'Kurichiya'], + [b'kfi', b'Kurumba, Kannada'], + [b'kfj', b'Kemiehua'], + [b'kfk', b'Kinnauri'], + [b'kfl', b'Kung'], + [b'kfm', b'Khunsari'], + [b'kfn', b'Kuk'], + [b'kfo', "Koro (C\xf4te d'Ivoire)"], + [b'kfp', b'Korwa'], + [b'kfq', b'Korku'], + [b'kfr', b'Kachchi'], + [b'kfs', b'Bilaspuri'], + [b'kft', b'Kanjari'], + [b'kfu', b'Katkari'], + [b'kfv', b'Kurmukar'], + [b'kfw', b'Naga, Kharam'], + [b'kfx', b'Pahari, Kullu'], + [b'kfy', b'Kumaoni'], + [b'kfz', 'Koromf\xe9'], + [b'kga', b'Koyaga'], + [b'kgb', b'Kawe'], + [b'kgc', b'Kasseng'], + [b'kgd', b'Kataang'], + [b'kge', b'Komering'], + [b'kgf', b'Kube'], + [b'kgg', b'Kusunda'], + [b'kgi', b'Selangor Sign Language'], + [b'kgj', b'Kham, Gamale'], + [b'kgk', 'Kaiw\xe1'], + [b'kgl', b'Kunggari'], + [b'kgm', 'Karip\xfana'], + [b'kgn', b'Karingani'], + [b'kgo', b'Krongo'], + [b'kgp', b'Kaingang'], + [b'kgq', b'Kamoro'], + [b'kgr', b'Abun'], + [b'kgs', b'Kumbainggar'], + [b'kgt', b'Somyev'], + [b'kgu', b'Kobol'], + [b'kgv', b'Karas'], + [b'kgw', b'Karon Dori'], + [b'kgx', b'Kamaru'], + [b'kgy', b'Kyerung'], + [b'kha', b'Khasi'], + [b'khb', 'L\xfc'], + [b'khc', b'Tukang Besi North'], + [b'khd', 'Kanum, B\xe4di'], + [b'khe', b'Korowai'], + [b'khf', b'Khuen'], + [b'khg', b'Tibetan, Khams'], + [b'khh', b'Kehu'], + [b'khj', b'Kuturmi'], + [b'khk', b'Mongolian, Halh'], + [b'khl', b'Lusi'], + [b'khm', b'Khmer, Central'], + [b'khn', b'Khandesi'], + [b'kho', b'Khotanese'], + [b'khp', b'Kapori'], + [b'khq', b'Songhay, Koyra Chiini'], + [b'khr', b'Kharia'], + [b'khs', b'Kasua'], + [b'kht', b'Khamti'], + [b'khu', b'Nkhumbi'], + [b'khv', b'Khvarshi'], + [b'khw', b'Khowar'], + [b'khx', b'Kanu'], + [b'khy', b'Kele (Democratic Republic of Congo)'], + [b'khz', b'Keapara'], + [b'kia', b'Kim'], + [b'kib', b'Koalib'], + [b'kic', b'Kickapoo'], + [b'kid', b'Koshin'], + [b'kie', b'Kibet'], + [b'kif', b'Kham, Eastern Parbate'], + [b'kig', b'Kimaama'], + [b'kih', b'Kilmeri'], + [b'kii', b'Kitsai'], + [b'kij', b'Kilivila'], + [b'kik', b'Kikuyu'], + [b'kil', b'Kariya'], + [b'kim', b'Karagas'], + [b'kin', b'Kinyarwanda'], + [b'kio', b'Kiowa'], + [b'kip', b'Kham, Sheshi'], + [b'kiq', b'Kosadle'], + [b'kir', b'Kirghiz'], + [b'kis', b'Kis'], + [b'kit', b'Agob'], + [b'kiu', b'Kirmanjki (individual language)'], + [b'kiv', b'Kimbu'], + [b'kiw', b'Kiwai, Northeast'], + [b'kix', b'Naga, Khiamniungan'], + [b'kiy', b'Kirikiri'], + [b'kiz', b'Kisi'], + [b'kja', b'Mlap'], + [b'kjb', b"Q'anjob'al"], + [b'kjc', b'Konjo, Coastal'], + [b'kjd', b'Kiwai, Southern'], + [b'kje', b'Kisar'], + [b'kjf', b'Khalaj'], + [b'kjg', b'Khmu'], + [b'kjh', b'Khakas'], + [b'kji', b'Zabana'], + [b'kjj', b'Khinalugh'], + [b'kjk', b'Konjo, Highland'], + [b'kjl', b'Kham, Western Parbate'], + [b'kjm', 'Kh\xe1ng'], + [b'kjn', b'Kunjen'], + [b'kjo', b'Kinnauri, Harijan'], + [b'kjp', b'Karen, Pwo Eastern'], + [b'kjq', b'Keres, Western'], + [b'kjr', b'Kurudu'], + [b'kjs', b'Kewa, East'], + [b'kjt', b'Karen, Phrae Pwo'], + [b'kju', b'Kashaya'], + [b'kjx', b'Ramopa'], + [b'kjy', b'Erave'], + [b'kjz', b'Bumthangkha'], + [b'kka', b'Kakanda'], + [b'kkb', b'Kwerisa'], + [b'kkc', b'Odoodee'], + [b'kkd', b'Kinuku'], + [b'kke', b'Kakabe'], + [b'kkf', b'Monpa, Kalaktang'], + [b'kkg', b'Kalinga, Mabaka Valley'], + [b'kkh', 'Kh\xfcn'], + [b'kki', b'Kagulu'], + [b'kkj', b'Kako'], + [b'kkk', b'Kokota'], + [b'kkl', b'Yale, Kosarek'], + [b'kkm', b'Kiong'], + [b'kkn', b'Kon Keu'], + [b'kko', b'Karko'], + [b'kkp', b'Gugubera'], + [b'kkq', b'Kaiku'], + [b'kkr', b'Kir-Balar'], + [b'kks', b'Giiwo'], + [b'kkt', b'Koi'], + [b'kku', b'Tumi'], + [b'kkv', b'Kangean'], + [b'kkw', b'Teke-Kukuya'], + [b'kkx', b'Kohin'], + [b'kky', b'Guguyimidjir'], + [b'kkz', b'Kaska'], + [b'kla', b'Klamath-Modoc'], + [b'klb', b'Kiliwa'], + [b'klc', b'Kolbila'], + [b'kld', b'Gamilaraay'], + [b'kle', b'Kulung (Nepal)'], + [b'klf', b'Kendeje'], + [b'klg', b'Tagakaulo'], + [b'klh', b'Weliki'], + [b'kli', b'Kalumpang'], + [b'klj', b'Khalaj, Turkic'], + [b'klk', b'Kono (Nigeria)'], + [b'kll', b'Kalagan, Kagan'], + [b'klm', b'Migum'], + [b'kln', b'Kalenjin'], + [b'klo', b'Kapya'], + [b'klp', b'Kamasa'], + [b'klq', b'Rumu'], + [b'klr', b'Khaling'], + [b'kls', b'Kalasha'], + [b'klt', b'Nukna'], + [b'klu', b'Klao'], + [b'klv', b'Maskelynes'], + [b'klw', b'Lindu'], + [b'klx', b'Koluwawa'], + [b'kly', b'Kalao'], + [b'klz', b'Kabola'], + [b'kma', b'Konni'], + [b'kmb', b'Kimbundu'], + [b'kmc', b'Dong, Southern'], + [b'kmd', b'Kalinga, Majukayang'], + [b'kme', b'Bakole'], + [b'kmf', b'Kare (Papua New Guinea)'], + [b'kmg', 'K\xe2te'], + [b'kmh', b'Kalam'], + [b'kmi', b'Kami (Nigeria)'], + [b'kmj', b'Kumarbhag Paharia'], + [b'kmk', b'Kalinga, Limos'], + [b'kml', b'Kalinga, Tanudan'], + [b'kmm', b'Kom (India)'], + [b'kmn', b'Awtuw'], + [b'kmo', b'Kwoma'], + [b'kmp', b'Gimme'], + [b'kmq', b'Kwama'], + [b'kmr', b'Kurdish, Northern'], + [b'kms', b'Kamasau'], + [b'kmt', b'Kemtuik'], + [b'kmu', b'Kanite'], + [b'kmv', 'Creole French, Karip\xfana'], + [b'kmw', b'Komo (Democratic Republic of Congo)'], + [b'kmx', b'Waboda'], + [b'kmy', b'Koma'], + [b'kmz', b'Khorasani Turkish'], + [b'kna', b'Dera (Nigeria)'], + [b'knb', b'Kalinga, Lubuagan'], + [b'knc', b'Kanuri, Central'], + [b'knd', b'Konda'], + [b'kne', b'Kankanaey'], + [b'knf', b'Mankanya'], + [b'kng', b'Koongo'], + [b'kni', b'Kanufi'], + [b'knj', b'Kanjobal, Western'], + [b'knk', b'Kuranko'], + [b'knl', b'Keninjal'], + [b'knm', 'Kanamar\xed'], + [b'knn', b'Konkani (individual language)'], + [b'kno', b'Kono (Sierra Leone)'], + [b'knp', b'Kwanja'], + [b'knq', b'Kintaq'], + [b'knr', b'Kaningra'], + [b'kns', b'Kensiu'], + [b'knt', 'Katuk\xedna, Panoan'], + [b'knu', b'Kono (Guinea)'], + [b'knv', b'Tabo'], + [b'knw', b'Kung-Ekoka'], + [b'knx', b'Kendayan'], + [b'kny', b'Kanyok'], + [b'knz', 'Kalams\xe9'], + [b'koa', b'Konomala'], + [b'koc', b'Kpati'], + [b'kod', b'Kodi'], + [b'koe', b'Kacipo-Balesi'], + [b'kof', b'Kubi'], + [b'kog', b'Cogui'], + [b'koh', b'Koyo'], + [b'koi', b'Komi-Permyak'], + [b'koj', b'Sara Dunjo'], + [b'kok', b'Konkani (macrolanguage)'], + [b'kol', b'Kol (Papua New Guinea)'], + [b'kom', b'Komi'], + [b'kon', b'Kongo'], + [b'koo', b'Konzo'], + [b'kop', b'Waube'], + [b'koq', b'Kota (Gabon)'], + [b'kor', b'Korean'], + [b'kos', b'Kosraean'], + [b'kot', b'Lagwan'], + [b'kou', b'Koke'], + [b'kov', b'Kudu-Camo'], + [b'kow', b'Kugama'], + [b'kox', b'Coxima'], + [b'koy', b'Koyukon'], + [b'koz', b'Korak'], + [b'kpa', b'Kutto'], + [b'kpb', b'Kurumba, Mullu'], + [b'kpc', b'Curripaco'], + [b'kpd', b'Koba'], + [b'kpe', b'Kpelle'], + [b'kpf', b'Komba'], + [b'kpg', b'Kapingamarangi'], + [b'kph', b'Kplang'], + [b'kpi', b'Kofei'], + [b'kpj', 'Karaj\xe1'], + [b'kpk', b'Kpan'], + [b'kpl', b'Kpala'], + [b'kpm', b'Koho'], + [b'kpn', 'Kepkiriw\xe1t'], + [b'kpo', b'Ikposo'], + [b'kpq', b'Korupun-Sela'], + [b'kpr', b'Korafe-Yegha'], + [b'kps', b'Tehit'], + [b'kpt', b'Karata'], + [b'kpu', b'Kafoa'], + [b'kpv', b'Komi-Zyrian'], + [b'kpw', b'Kobon'], + [b'kpx', b'Koiali, Mountain'], + [b'kpy', b'Koryak'], + [b'kpz', b'Kupsabiny'], + [b'kqa', b'Mum'], + [b'kqb', b'Kovai'], + [b'kqc', b'Doromu-Koki'], + [b'kqd', b'Koy Sanjaq Surat'], + [b'kqe', b'Kalagan'], + [b'kqf', b'Kakabai'], + [b'kqg', b'Khe'], + [b'kqh', b'Kisankasa'], + [b'kqi', b'Koitabu'], + [b'kqj', b'Koromira'], + [b'kqk', b'Gbe, Kotafon'], + [b'kql', b'Kyenele'], + [b'kqm', b'Khisa'], + [b'kqn', b'Kaonde'], + [b'kqo', b'Krahn, Eastern'], + [b'kqp', 'Kimr\xe9'], + [b'kqq', b'Krenak'], + [b'kqr', b'Kimaragang'], + [b'kqs', b'Kissi, Northern'], + [b'kqt', b'Kadazan, Klias River'], + [b'kqu', b'Seroa'], + [b'kqv', b'Okolod'], + [b'kqw', b'Kandas'], + [b'kqx', b'Mser'], + [b'kqy', b'Koorete'], + [b'kqz', b'Korana'], + [b'kra', b'Kumhali'], + [b'krb', b'Karkin'], + [b'krc', b'Karachay-Balkar'], + [b'krd', b'Kairui-Midiki'], + [b'kre', 'Panar\xe1'], + [b'krf', b'Koro (Vanuatu)'], + [b'krh', b'Kurama'], + [b'kri', b'Krio'], + [b'krj', b'Kinaray-A'], + [b'krk', b'Kerek'], + [b'krl', b'Karelian'], + [b'krm', b'Krim'], + [b'krn', b'Sapo'], + [b'krp', b'Korop'], + [b'krr', b"Kru'ng 2"], + [b'krs', b'Gbaya (Sudan)'], + [b'krt', b'Kanuri, Tumari'], + [b'kru', b'Kurukh'], + [b'krv', b'Kavet'], + [b'krw', b'Krahn, Western'], + [b'krx', b'Karon'], + [b'kry', b'Kryts'], + [b'krz', b'Kanum, Sota'], + [b'ksa', b'Shuwa-Zamani'], + [b'ksb', b'Shambala'], + [b'ksc', b'Kalinga, Southern'], + [b'ksd', b'Kuanua'], + [b'kse', b'Kuni'], + [b'ksf', b'Bafia'], + [b'ksg', b'Kusaghe'], + [b'ksh', 'K\xf6lsch'], + [b'ksi', b'Krisa'], + [b'ksj', b'Uare'], + [b'ksk', b'Kansa'], + [b'ksl', b'Kumalu'], + [b'ksm', b'Kumba'], + [b'ksn', b'Kasiguranin'], + [b'kso', b'Kofa'], + [b'ksp', b'Kaba'], + [b'ksq', b'Kwaami'], + [b'ksr', b'Borong'], + [b'kss', b'Kisi, Southern'], + [b'kst', 'Winy\xe9'], + [b'ksu', b'Khamyang'], + [b'ksv', b'Kusu'], + [b'ksw', b"Karen, S'gaw"], + [b'ksx', b'Kedang'], + [b'ksy', b'Kharia Thar'], + [b'ksz', b'Kodaku'], + [b'kta', b'Katua'], + [b'ktb', b'Kambaata'], + [b'ktc', b'Kholok'], + [b'ktd', b'Kokata'], + [b'kte', b'Nubri'], + [b'ktf', b'Kwami'], + [b'ktg', b'Kalkutung'], + [b'kth', b'Karanga'], + [b'kti', b'Muyu, North'], + [b'ktj', b'Krumen, Plapo'], + [b'ktk', b'Kaniet'], + [b'ktl', b'Koroshi'], + [b'ktm', b'Kurti'], + [b'ktn', 'Kariti\xe2na'], + [b'kto', b'Kuot'], + [b'ktp', b'Kaduo'], + [b'ktq', b'Katabaga'], + [b'ktr', b'Kota Marudu Tinagas'], + [b'kts', b'Muyu, South'], + [b'ktt', b'Ketum'], + [b'ktu', b'Kituba (Democratic Republic of Congo)'], + [b'ktv', b'Katu, Eastern'], + [b'ktw', b'Kato'], + [b'ktx', 'Kaxarar\xed'], + [b'kty', 'Kango (Bas-U\xe9l\xe9 District)'], + [b'ktz', b"Ju/'hoan"], + [b'kua', b'Kuanyama'], + [b'kub', b'Kutep'], + [b'kuc', b'Kwinsu'], + [b'kud', b"'Auhelawa"], + [b'kue', b'Kuman'], + [b'kuf', b'Katu, Western'], + [b'kug', b'Kupa'], + [b'kuh', b'Kushi'], + [b'kui', 'Kuik\xfaro-Kalap\xe1lo'], + [b'kuj', b'Kuria'], + [b'kuk', b"Kepo'"], + [b'kul', b'Kulere'], + [b'kum', b'Kumyk'], + [b'kun', b'Kunama'], + [b'kuo', b'Kumukio'], + [b'kup', b'Kunimaipa'], + [b'kuq', b'Karipuna'], + [b'kur', b'Kurdish'], + [b'kus', b'Kusaal'], + [b'kut', b'Kutenai'], + [b'kuu', b'Kuskokwim, Upper'], + [b'kuv', b'Kur'], + [b'kuw', b'Kpagua'], + [b'kux', b'Kukatja'], + [b'kuy', b"Kuuku-Ya'u"], + [b'kuz', b'Kunza'], + [b'kva', b'Bagvalal'], + [b'kvb', b'Kubu'], + [b'kvc', b'Kove'], + [b'kvd', b'Kui (Indonesia)'], + [b'kve', b'Kalabakan'], + [b'kvf', b'Kabalai'], + [b'kvg', b'Kuni-Boazi'], + [b'kvh', b'Komodo'], + [b'kvi', b'Kwang'], + [b'kvj', b'Psikye'], + [b'kvk', b'Korean Sign Language'], + [b'kvl', b'Kayaw'], + [b'kvm', b'Kendem'], + [b'kvn', b'Kuna, Border'], + [b'kvo', b'Dobel'], + [b'kvp', b'Kompane'], + [b'kvq', b'Karen, Geba'], + [b'kvr', b'Kerinci'], + [b'kvs', b'Kunggara'], + [b'kvt', b'Karen, Lahta'], + [b'kvu', b'Karen, Yinbaw'], + [b'kvv', b'Kola'], + [b'kvw', b'Wersing'], + [b'kvx', b'Koli, Parkari'], + [b'kvy', b'Karen, Yintale'], + [b'kvz', b'Tsakwambo'], + [b'kwa', 'D\xe2w'], + [b'kwb', b'Kwa'], + [b'kwc', b'Likwala'], + [b'kwd', b'Kwaio'], + [b'kwe', b'Kwerba'], + [b'kwf', b"Kwara'ae"], + [b'kwg', b'Sara Kaba Deme'], + [b'kwh', b'Kowiai'], + [b'kwi', b'Awa-Cuaiquer'], + [b'kwj', b'Kwanga'], + [b'kwk', b'Kwakiutl'], + [b'kwl', b'Kofyar'], + [b'kwm', b'Kwambi'], + [b'kwn', b'Kwangali'], + [b'kwo', b'Kwomtari'], + [b'kwp', b'Kodia'], + [b'kwq', b'Kwak'], + [b'kwr', b'Kwer'], + [b'kws', b'Kwese'], + [b'kwt', b'Kwesten'], + [b'kwu', b'Kwakum'], + [b'kwv', 'Sara Kaba N\xe1\xe0'], + [b'kww', b'Kwinti'], + [b'kwx', b'Khirwar'], + [b'kwy', b'Kongo, San Salvador'], + [b'kwz', b'Kwadi'], + [b'kxa', b'Kairiru'], + [b'kxb', b'Krobu'], + [b'kxc', b'Konso'], + [b'kxd', b'Brunei'], + [b'kxe', b'Kakihum'], + [b'kxf', b'Karen, Manumanaw'], + [b'kxh', b'Karo (Ethiopia)'], + [b'kxi', b'Murut, Keningau'], + [b'kxj', b'Kulfa'], + [b'kxk', b'Karen, Zayein'], + [b'kxl', b'Kurux, Nepali'], + [b'kxm', b'Khmer, Northern'], + [b'kxn', b'Melanau, Kanowit-Tanjong'], + [b'kxo', 'Kano\xe9'], + [b'kxp', b'Koli, Wadiyara'], + [b'kxq', 'Kanum, Sm\xe4rky'], + [b'kxr', b'Koro (Papua New Guinea)'], + [b'kxs', b'Kangjia'], + [b'kxt', b'Koiwat'], + [b'kxu', b'Kui (India)'], + [b'kxv', b'Kuvi'], + [b'kxw', b'Konai'], + [b'kxx', b'Likuba'], + [b'kxy', b'Kayong'], + [b'kxz', b'Kerewo'], + [b'kya', b'Kwaya'], + [b'kyb', b'Kalinga, Butbut'], + [b'kyc', b'Kyaka'], + [b'kyd', b'Karey'], + [b'kye', b'Krache'], + [b'kyf', b'Kouya'], + [b'kyg', b'Keyagana'], + [b'kyh', b'Karok'], + [b'kyi', b'Kiput'], + [b'kyj', b'Karao'], + [b'kyk', b'Kamayo'], + [b'kyl', b'Kalapuya'], + [b'kym', b'Kpatili'], + [b'kyn', b'Binukidnon, Northern'], + [b'kyo', b'Kelon'], + [b'kyp', b'Kang'], + [b'kyq', b'Kenga'], + [b'kyr', 'Kuru\xe1ya'], + [b'kys', b'Kayan, Baram'], + [b'kyt', b'Kayagar'], + [b'kyu', b'Kayah, Western'], + [b'kyv', b'Kayort'], + [b'kyw', b'Kudmali'], + [b'kyx', b'Rapoisi'], + [b'kyy', b'Kambaira'], + [b'kyz', 'Kayab\xed'], + [b'kza', b'Karaboro, Western'], + [b'kzb', b'Kaibobo'], + [b'kzc', b'Kulango, Bondoukou'], + [b'kzd', b'Kadai'], + [b'kze', b'Kosena'], + [b'kzf', b"Kaili, Da'a"], + [b'kzg', b'Kikai'], + [b'kzi', b'Kelabit'], + [b'kzj', b'Kadazan, Coastal'], + [b'kzk', b'Kazukuru'], + [b'kzl', b'Kayeli'], + [b'kzm', b'Kais'], + [b'kzn', b'Kokola'], + [b'kzo', b'Kaningi'], + [b'kzp', b'Kaidipang'], + [b'kzq', b'Kaike'], + [b'kzr', b'Karang'], + [b'kzs', b'Dusun, Sugut'], + [b'kzt', b'Dusun, Tambunan'], + [b'kzu', b'Kayupulau'], + [b'kzv', b'Komyandaret'], + [b'kzw', 'Karir\xed-Xoc\xf3'], + [b'kzx', b'Kamarian'], + [b'kzy', b'Kango (Tshopo District)'], + [b'kzz', b'Kalabra'], + [b'laa', b'Subanen, Southern'], + [b'lab', b'Linear A'], + [b'lac', b'Lacandon'], + [b'lad', b'Ladino'], + [b'lae', b'Pattani'], + [b'laf', b'Lafofa'], + [b'lag', b'Langi'], + [b'lah', b'Lahnda'], + [b'lai', b'Lambya'], + [b'laj', b'Lango (Uganda)'], + [b'lak', b'Laka (Nigeria)'], + [b'lal', b'Lalia'], + [b'lam', b'Lamba'], + [b'lan', b'Laru'], + [b'lao', b'Lao'], + [b'lap', b'Laka (Chad)'], + [b'laq', b'Qabiao'], + [b'lar', b'Larteh'], + [b'las', b'Lama (Togo)'], + [b'lat', b'Latin'], + [b'lau', b'Laba'], + [b'lav', b'Latvian'], + [b'law', b'Lauje'], + [b'lax', b'Tiwa'], + [b'lay', b'Lama (Myanmar)'], + [b'laz', b'Aribwatsa'], + [b'lba', b'Lui'], + [b'lbb', b'Label'], + [b'lbc', b'Lakkia'], + [b'lbe', b'Lak'], + [b'lbf', b'Tinani'], + [b'lbg', b'Laopang'], + [b'lbi', b"La'bi"], + [b'lbj', b'Ladakhi'], + [b'lbk', b'Bontok, Central'], + [b'lbl', b'Bikol, Libon'], + [b'lbm', b'Lodhi'], + [b'lbn', b'Lamet'], + [b'lbo', b'Laven'], + [b'lbq', b'Wampar'], + [b'lbr', b'Lohorung'], + [b'lbs', b'Libyan Sign Language'], + [b'lbt', b'Lachi'], + [b'lbu', b'Labu'], + [b'lbv', b'Lavatbura-Lamusong'], + [b'lbw', b'Tolaki'], + [b'lbx', b'Lawangan'], + [b'lby', b'Lamu-Lamu'], + [b'lbz', b'Lardil'], + [b'lcc', b'Legenyem'], + [b'lcd', b'Lola'], + [b'lce', b'Loncong'], + [b'lcf', b'Lubu'], + [b'lch', b'Luchazi'], + [b'lcl', b'Lisela'], + [b'lcm', b'Tungag'], + [b'lcp', b'Lawa, Western'], + [b'lcq', b'Luhu'], + [b'lcs', b'Lisabata-Nuniali'], + [b'lda', b'Kla-Dan'], + [b'ldb', 'Du\u0303ya'], + [b'ldd', b'Luri'], + [b'ldg', b'Lenyima'], + [b'ldh', b'Lamja-Dengsa-Tola'], + [b'ldi', b'Laari'], + [b'ldj', b'Lemoro'], + [b'ldk', b'Leelau'], + [b'ldl', b'Kaan'], + [b'ldm', b'Landoma'], + [b'ldn', 'L\xe1adan'], + [b'ldo', b'Loo'], + [b'ldp', b'Tso'], + [b'ldq', b'Lufu'], + [b'lea', b'Lega-Shabunda'], + [b'leb', b'Lala-Bisa'], + [b'lec', b'Leco'], + [b'led', b'Lendu'], + [b'lee', 'Ly\xe9l\xe9'], + [b'lef', b'Lelemi'], + [b'leg', b'Lengua'], + [b'leh', b'Lenje'], + [b'lei', b'Lemio'], + [b'lej', b'Lengola'], + [b'lek', b'Leipon'], + [b'lel', b'Lele (Democratic Republic of Congo)'], + [b'lem', b'Nomaande'], + [b'len', b'Lenca'], + [b'leo', b'Leti (Cameroon)'], + [b'lep', b'Lepcha'], + [b'leq', b'Lembena'], + [b'ler', b'Lenkau'], + [b'les', b'Lese'], + [b'let', b'Lesing-Gelimi'], + [b'leu', b'Kara (Papua New Guinea)'], + [b'lev', b'Lamma'], + [b'lew', b'Kaili, Ledo'], + [b'lex', b'Luang'], + [b'ley', b'Lemolang'], + [b'lez', b'Lezghian'], + [b'lfa', b'Lefa'], + [b'lfn', b'Lingua Franca Nova'], + [b'lga', b'Lungga'], + [b'lgb', b'Laghu'], + [b'lgg', b'Lugbara'], + [b'lgh', b'Laghuu'], + [b'lgi', b'Lengilu'], + [b'lgk', b'Lingarak'], + [b'lgl', b'Wala'], + [b'lgm', b'Lega-Mwenga'], + [b'lgn', b'Opuuo'], + [b'lgq', b'Logba'], + [b'lgr', b'Lengo'], + [b'lgt', b'Pahi'], + [b'lgu', b'Longgu'], + [b'lgz', b'Ligenza'], + [b'lha', b'Laha (Viet Nam)'], + [b'lhh', b'Laha (Indonesia)'], + [b'lhi', b'Lahu Shi'], + [b'lhl', b'Lohar, Lahul'], + [b'lhm', b'Lhomi'], + [b'lhn', b'Lahanan'], + [b'lhp', b'Lhokpu'], + [b'lhs', 'Mlahs\xf6'], + [b'lht', b'Lo-Toga'], + [b'lhu', b'Lahu'], + [b'lia', b'Limba, West-Central'], + [b'lib', b'Likum'], + [b'lic', b'Hlai'], + [b'lid', b'Nyindrou'], + [b'lie', b'Likila'], + [b'lif', b'Limbu'], + [b'lig', b'Ligbi'], + [b'lih', b'Lihir'], + [b'lii', b'Lingkhim'], + [b'lij', b'Ligurian'], + [b'lik', b'Lika'], + [b'lil', b'Lillooet'], + [b'lim', b'Limburgan'], + [b'lin', b'Lingala'], + [b'lio', b'Liki'], + [b'lip', b'Sekpele'], + [b'liq', b'Libido'], + [b'lir', b'English, Liberian'], + [b'lis', b'Lisu'], + [b'lit', b'Lithuanian'], + [b'liu', b'Logorik'], + [b'liv', b'Liv'], + [b'liw', b'Col'], + [b'lix', b'Liabuku'], + [b'liy', b'Banda-Bambari'], + [b'liz', b'Libinza'], + [b'lja', b'Golpa'], + [b'lje', b'Rampi'], + [b'lji', b'Laiyolo'], + [b'ljl', b"Li'o"], + [b'ljp', b'Lampung Api'], + [b'ljw', b'Yirandali'], + [b'ljx', b'Yuru'], + [b'lka', b'Lakalei'], + [b'lkb', b'Kabras'], + [b'lkc', b'Kucong'], + [b'lkd', 'Lakond\xea'], + [b'lke', b'Kenyi'], + [b'lkh', b'Lakha'], + [b'lki', b'Laki'], + [b'lkj', b'Remun'], + [b'lkl', b'Laeko-Libuat'], + [b'lkm', b'Kalaamaya'], + [b'lkn', b'Lakon'], + [b'lko', b'Khayo'], + [b'lkr', 'P\xe4ri'], + [b'lks', b'Kisa'], + [b'lkt', b'Lakota'], + [b'lku', b'Kungkari'], + [b'lky', b'Lokoya'], + [b'lla', b'Lala-Roba'], + [b'llb', b'Lolo'], + [b'llc', b'Lele (Guinea)'], + [b'lld', b'Ladin'], + [b'lle', b'Lele (Papua New Guinea)'], + [b'llf', b'Hermit'], + [b'llg', b'Lole'], + [b'llh', b'Lamu'], + [b'lli', b'Teke-Laali'], + [b'llj', b'Ladji Ladji'], + [b'llk', b'Lelak'], + [b'lll', b'Lilau'], + [b'llm', b'Lasalimu'], + [b'lln', b'Lele (Chad)'], + [b'llo', b'Khlor'], + [b'llp', b'Efate, North'], + [b'llq', b'Lolak'], + [b'lls', b'Lithuanian Sign Language'], + [b'llu', b'Lau'], + [b'llx', b'Lauan'], + [b'lma', b'Limba, East'], + [b'lmb', b'Merei'], + [b'lmc', b'Limilngan'], + [b'lmd', b'Lumun'], + [b'lme', 'P\xe9v\xe9'], + [b'lmf', b'Lembata, South'], + [b'lmg', b'Lamogai'], + [b'lmh', b'Lambichhong'], + [b'lmi', b'Lombi'], + [b'lmj', b'Lembata, West'], + [b'lmk', b'Lamkang'], + [b'lml', b'Hano'], + [b'lmm', b'Lamam'], + [b'lmn', b'Lambadi'], + [b'lmo', b'Lombard'], + [b'lmp', b'Limbum'], + [b'lmq', b'Lamatuka'], + [b'lmr', b'Lamalera'], + [b'lmu', b'Lamenu'], + [b'lmv', b'Lomaiviti'], + [b'lmw', b'Miwok, Lake'], + [b'lmx', b'Laimbue'], + [b'lmy', b'Lamboya'], + [b'lmz', b'Lumbee'], + [b'lna', b'Langbashe'], + [b'lnb', b'Mbalanhu'], + [b'lnd', b'Lundayeh'], + [b'lng', b'Langobardic'], + [b'lnh', b'Lanoh'], + [b'lni', b"Daantanai'"], + [b'lnj', b'Leningitij'], + [b'lnl', b'Banda, South Central'], + [b'lnm', b'Langam'], + [b'lnn', b'Lorediakarkar'], + [b'lno', b'Lango (Sudan)'], + [b'lns', b"Lamnso'"], + [b'lnu', b'Longuda'], + [b'lnw', b'Lanima'], + [b'lnz', b'Lonzo'], + [b'loa', b'Loloda'], + [b'lob', b'Lobi'], + [b'loc', b'Inonhan'], + [b'loe', b'Saluan'], + [b'lof', b'Logol'], + [b'log', b'Logo'], + [b'loh', b'Narim'], + [b'loi', "Loma (C\xf4te d'Ivoire)"], + [b'loj', b'Lou'], + [b'lok', b'Loko'], + [b'lol', b'Mongo'], + [b'lom', b'Loma (Liberia)'], + [b'lon', b'Lomwe, Malawi'], + [b'loo', b'Lombo'], + [b'lop', b'Lopa'], + [b'loq', b'Lobala'], + [b'lor', 'T\xe9\xe9n'], + [b'los', b'Loniu'], + [b'lot', b'Otuho'], + [b'lou', b'Creole French, Louisiana'], + [b'lov', b'Lopi'], + [b'low', b'Lobu, Tampias'], + [b'lox', b'Loun'], + [b'loy', b'Loke'], + [b'loz', b'Lozi'], + [b'lpa', b'Lelepa'], + [b'lpe', b'Lepki'], + [b'lpn', b'Naga, Long Phuri'], + [b'lpo', b'Lipo'], + [b'lpx', b'Lopit'], + [b'lra', b"Rara Bakati'"], + [b'lrc', b'Luri, Northern'], + [b'lre', b'Laurentian'], + [b'lrg', b'Laragia'], + [b'lri', b'Marachi'], + [b'lrk', b'Loarki'], + [b'lrl', b'Lari'], + [b'lrm', b'Marama'], + [b'lrn', b'Lorang'], + [b'lro', b'Laro'], + [b'lrr', b'Yamphu, Southern'], + [b'lrt', b'Malay, Larantuka'], + [b'lrv', b'Larevat'], + [b'lrz', b'Lemerig'], + [b'lsa', b'Lasgerdi'], + [b'lsd', b'Lishana Deni'], + [b'lse', b'Lusengo'], + [b'lsg', b'Lyons Sign Language'], + [b'lsh', b'Lish'], + [b'lsi', b'Lashi'], + [b'lsl', b'Latvian Sign Language'], + [b'lsm', b'Saamia'], + [b'lso', b'Laos Sign Language'], + [b'lsp', b'Panamanian Sign Language'], + [b'lsr', b'Aruop'], + [b'lss', b'Lasi'], + [b'lst', b'Trinidad and Tobago Sign Language'], + [b'lsy', b'Mauritian Sign Language'], + [b'ltc', b'Chinese, Late Middle'], + [b'ltg', b'Latgalian'], + [b'lti', b'Leti (Indonesia)'], + [b'ltn', 'Latund\xea'], + [b'lto', b'Tsotso'], + [b'lts', b'Tachoni'], + [b'ltu', b'Latu'], + [b'ltz', b'Luxembourgish'], + [b'lua', b'Luba-Lulua'], + [b'lub', b'Luba-Katanga'], + [b'luc', b'Aringa'], + [b'lud', b'Ludian'], + [b'lue', b'Luvale'], + [b'luf', b'Laua'], + [b'lug', b'Ganda'], + [b'lui', b'Luiseno'], + [b'luj', b'Luna'], + [b'luk', b'Lunanakha'], + [b'lul', b"Olu'bo"], + [b'lum', b'Luimbi'], + [b'lun', b'Lunda'], + [b'luo', b'Luo (Kenya and Tanzania)'], + [b'lup', b'Lumbu'], + [b'luq', b'Lucumi'], + [b'lur', b'Laura'], + [b'lus', b'Lushai'], + [b'lut', b'Lushootseed'], + [b'luu', b'Lumba-Yakkha'], + [b'luv', b'Luwati'], + [b'luw', b'Luo (Cameroon)'], + [b'luy', b'Luyia'], + [b'luz', b'Luri, Southern'], + [b'lva', b"Maku'a"], + [b'lvk', b'Lavukaleve'], + [b'lvs', b'Latvian, Standard'], + [b'lvu', b'Levuka'], + [b'lwa', b'Lwalu'], + [b'lwe', b'Lewo Eleng'], + [b'lwg', b'Wanga'], + [b'lwh', b'Lachi, White'], + [b'lwl', b'Lawa, Eastern'], + [b'lwm', b'Laomian'], + [b'lwo', b'Luwo'], + [b'lwt', b'Lewotobi'], + [b'lwu', b'Lawu'], + [b'lww', b'Lewo'], + [b'lya', b'Layakha'], + [b'lyg', b'Lyngngam'], + [b'lyn', b'Luyana'], + [b'lzh', b'Chinese, Literary'], + [b'lzl', b'Litzlitz'], + [b'lzn', b'Naga, Leinong'], + [b'lzz', b'Laz'], + [b'maa', 'Mazatec, San Jer\xf3nimo Tec\xf3atl'], + [b'mab', b'Mixtec, Yutanduchi'], + [b'mad', b'Madurese'], + [b'mae', b'Bo-Rukul'], + [b'maf', b'Mafa'], + [b'mag', b'Magahi'], + [b'mah', b'Marshallese'], + [b'mai', b'Maithili'], + [b'maj', 'Mazatec, Jalapa De D\xedaz'], + [b'mak', b'Makasar'], + [b'mal', b'Malayalam'], + [b'mam', b'Mam'], + [b'man', b'Mandingo'], + [b'maq', 'Mazatec, Chiquihuitl\xe1n'], + [b'mar', b'Marathi'], + [b'mas', b'Masai'], + [b'mat', b'Matlatzinca, San Francisco'], + [b'mau', b'Mazatec, Huautla'], + [b'mav', 'Sater\xe9-Maw\xe9'], + [b'maw', b'Mampruli'], + [b'max', b'Malay, North Moluccan'], + [b'maz', b'Mazahua, Central'], + [b'mba', b'Higaonon'], + [b'mbb', b'Manobo, Western Bukidnon'], + [b'mbc', b'Macushi'], + [b'mbd', b'Manobo, Dibabawon'], + [b'mbe', b'Molale'], + [b'mbf', b'Malay, Baba'], + [b'mbh', b'Mangseng'], + [b'mbi', b'Manobo, Ilianen'], + [b'mbj', 'Nad\xebb'], + [b'mbk', b'Malol'], + [b'mbl', 'Maxakal\xed'], + [b'mbm', b'Ombamba'], + [b'mbn', 'Macagu\xe1n'], + [b'mbo', b'Mbo (Cameroon)'], + [b'mbp', b'Malayo'], + [b'mbq', b'Maisin'], + [b'mbr', 'Nukak Mak\xfa'], + [b'mbs', b'Manobo, Sarangani'], + [b'mbt', b'Manobo, Matigsalug'], + [b'mbu', b'Mbula-Bwazza'], + [b'mbv', b'Mbulungish'], + [b'mbw', b'Maring'], + [b'mbx', b'Mari (East Sepik Province)'], + [b'mby', b'Memoni'], + [b'mbz', b'Mixtec, Amoltepec'], + [b'mca', b'Maca'], + [b'mcb', b'Machiguenga'], + [b'mcc', b'Bitur'], + [b'mcd', b'Sharanahua'], + [b'mce', b'Mixtec, Itundujia'], + [b'mcf', 'Mats\xe9s'], + [b'mcg', b'Mapoyo'], + [b'mch', b'Maquiritari'], + [b'mci', b'Mese'], + [b'mcj', b'Mvanip'], + [b'mck', b'Mbunda'], + [b'mcl', b'Macaguaje'], + [b'mcm', b'Creole Portuguese, Malaccan'], + [b'mcn', b'Masana'], + [b'mco', 'Mixe, Coatl\xe1n'], + [b'mcp', b'Makaa'], + [b'mcq', b'Ese'], + [b'mcr', b'Menya'], + [b'mcs', b'Mambai'], + [b'mct', b'Mengisa'], + [b'mcu', b'Mambila, Cameroon'], + [b'mcv', b'Minanibai'], + [b'mcw', b'Mawa (Chad)'], + [b'mcx', b'Mpiemo'], + [b'mcy', b'Watut, South'], + [b'mcz', b'Mawan'], + [b'mda', b'Mada (Nigeria)'], + [b'mdb', b'Morigi'], + [b'mdc', b'Male (Papua New Guinea)'], + [b'mdd', b'Mbum'], + [b'mde', b'Maba (Chad)'], + [b'mdf', b'Moksha'], + [b'mdg', b'Massalat'], + [b'mdh', b'Maguindanaon'], + [b'mdi', b'Mamvu'], + [b'mdj', b'Mangbetu'], + [b'mdk', b'Mangbutu'], + [b'mdl', b'Maltese Sign Language'], + [b'mdm', b'Mayogo'], + [b'mdn', b'Mbati'], + [b'mdp', b'Mbala'], + [b'mdq', b'Mbole'], + [b'mdr', b'Mandar'], + [b'mds', b'Maria (Papua New Guinea)'], + [b'mdt', b'Mbere'], + [b'mdu', b'Mboko'], + [b'mdv', 'Mixtec, Santa Luc\xeda Monteverde'], + [b'mdw', b'Mbosi'], + [b'mdx', b'Dizin'], + [b'mdy', b'Male (Ethiopia)'], + [b'mdz', 'Suru\xed Do Par\xe1'], + [b'mea', b'Menka'], + [b'meb', b'Ikobi'], + [b'mec', b'Mara'], + [b'med', b'Melpa'], + [b'mee', b'Mengen'], + [b'mef', b'Megam'], + [b'meh', b'Mixtec, Southwestern Tlaxiaco'], + [b'mei', b'Midob'], + [b'mej', b'Meyah'], + [b'mek', b'Mekeo'], + [b'mel', b'Melanau, Central'], + [b'mem', b'Mangala'], + [b'men', b'Mende (Sierra Leone)'], + [b'meo', b'Malay, Kedah'], + [b'mep', b'Miriwung'], + [b'meq', b'Merey'], + [b'mer', b'Meru'], + [b'mes', b'Masmaje'], + [b'met', b'Mato'], + [b'meu', b'Motu'], + [b'mev', b'Mano'], + [b'mew', b'Maaka'], + [b'mey', b'Hassaniyya'], + [b'mez', b'Menominee'], + [b'mfa', b'Malay, Pattani'], + [b'mfb', b'Bangka'], + [b'mfc', b'Mba'], + [b'mfd', b'Mendankwe-Nkwen'], + [b'mfe', b'Morisyen'], + [b'mff', b'Naki'], + [b'mfg', b'Mogofin'], + [b'mfh', b'Matal'], + [b'mfi', b'Wandala'], + [b'mfj', b'Mefele'], + [b'mfk', b'Mofu, North'], + [b'mfl', b'Putai'], + [b'mfm', b'Marghi South'], + [b'mfn', b'Mbembe, Cross River'], + [b'mfo', b'Mbe'], + [b'mfp', b'Malay, Makassar'], + [b'mfq', b'Moba'], + [b'mfr', b'Marithiel'], + [b'mfs', b'Mexican Sign Language'], + [b'mft', b'Mokerang'], + [b'mfu', b'Mbwela'], + [b'mfv', b'Mandjak'], + [b'mfw', b'Mulaha'], + [b'mfx', b'Melo'], + [b'mfy', b'Mayo'], + [b'mfz', b'Mabaan'], + [b'mga', b'Irish, Middle (900-1200)'], + [b'mgb', b'Mararit'], + [b'mgc', b'Morokodo'], + [b'mgd', b'Moru'], + [b'mge', b'Mango'], + [b'mgf', b'Maklew'], + [b'mgg', b'Mpumpong'], + [b'mgh', b'Makhuwa-Meetto'], + [b'mgi', b'Lijili'], + [b'mgj', b'Abureni'], + [b'mgk', b'Mawes'], + [b'mgl', b'Maleu-Kilenge'], + [b'mgm', b'Mambae'], + [b'mgn', b'Mbangi'], + [b'mgo', b"Meta'"], + [b'mgp', b'Magar, Eastern'], + [b'mgq', b'Malila'], + [b'mgr', b'Mambwe-Lungu'], + [b'mgs', b'Manda (Tanzania)'], + [b'mgt', b'Mongol'], + [b'mgu', b'Mailu'], + [b'mgv', b'Matengo'], + [b'mgw', b'Matumbi'], + [b'mgy', b'Mbunga'], + [b'mgz', b'Mbugwe'], + [b'mha', b'Manda (India)'], + [b'mhb', b'Mahongwe'], + [b'mhc', b'Mocho'], + [b'mhd', b'Mbugu'], + [b'mhe', b'Besisi'], + [b'mhf', b'Mamaa'], + [b'mhg', b'Margu'], + [b'mhh', b'Maskoy Pidgin'], + [b'mhi', b"Ma'di"], + [b'mhj', b'Mogholi'], + [b'mhk', b'Mungaka'], + [b'mhl', b'Mauwake'], + [b'mhm', b'Makhuwa-Moniga'], + [b'mhn', 'M\xf3cheno'], + [b'mho', b'Mashi (Zambia)'], + [b'mhp', b'Malay, Balinese'], + [b'mhq', b'Mandan'], + [b'mhr', b'Mari, Eastern'], + [b'mhs', b'Buru (Indonesia)'], + [b'mht', b'Mandahuaca'], + [b'mhu', b'Digaro-Mishmi'], + [b'mhw', b'Mbukushu'], + [b'mhx', b'Maru'], + [b'mhy', b"Ma'anyan"], + [b'mhz', b'Mor (Mor Islands)'], + [b'mia', b'Miami'], + [b'mib', 'Mixtec, Atatl\xe1huca'], + [b'mic', b"Mi'kmaq"], + [b'mid', b'Mandaic'], + [b'mie', b'Mixtec, Ocotepec'], + [b'mif', b'Mofu-Gudur'], + [b'mig', b'Mixtec, San Miguel El Grande'], + [b'mih', b'Mixtec, Chayuco'], + [b'mii', 'Mixtec, Chigmecatitl\xe1n'], + [b'mij', b'Abar'], + [b'mik', b'Mikasuki'], + [b'mil', 'Mixtec, Pe\xf1oles'], + [b'mim', b'Mixtec, Alacatlatzala'], + [b'min', b'Minangkabau'], + [b'mio', b'Mixtec, Pinotepa Nacional'], + [b'mip', b'Mixtec, Apasco-Apoala'], + [b'miq', 'M\xedskito'], + [b'mir', b'Mixe, Isthmus'], + [b'mis', b'Uncoded languages'], + [b'mit', b'Mixtec, Southern Puebla'], + [b'miu', b'Mixtec, Cacaloxtepec'], + [b'miw', b'Akoye'], + [b'mix', b'Mixtec, Mixtepec'], + [b'miy', b'Mixtec, Ayutla'], + [b'miz', b'Mixtec, Coatzospan'], + [b'mjc', b'Mixtec, San Juan Colorado'], + [b'mjd', b'Maidu, Northwest'], + [b'mje', b'Muskum'], + [b'mjg', b'Tu'], + [b'mjh', b'Mwera (Nyasa)'], + [b'mji', b'Kim Mun'], + [b'mjj', b'Mawak'], + [b'mjk', b'Matukar'], + [b'mjl', b'Mandeali'], + [b'mjm', b'Medebur'], + [b'mjn', b'Ma (Papua New Guinea)'], + [b'mjo', b'Malankuravan'], + [b'mjp', b'Malapandaram'], + [b'mjq', b'Malaryan'], + [b'mjr', b'Malavedan'], + [b'mjs', b'Miship'], + [b'mjt', b'Sauria Paharia'], + [b'mju', b'Manna-Dora'], + [b'mjv', b'Mannan'], + [b'mjw', b'Karbi'], + [b'mjx', b'Mahali'], + [b'mjy', b'Mahican'], + [b'mjz', b'Majhi'], + [b'mka', b'Mbre'], + [b'mkb', b'Mal Paharia'], + [b'mkc', b'Siliput'], + [b'mkd', b'Macedonian'], + [b'mke', b'Mawchi'], + [b'mkf', b'Miya'], + [b'mkg', b'Mak (China)'], + [b'mki', b'Dhatki'], + [b'mkj', b'Mokilese'], + [b'mkk', b'Byep'], + [b'mkl', b'Mokole'], + [b'mkm', b'Moklen'], + [b'mkn', b'Malay, Kupang'], + [b'mko', b'Mingang Doso'], + [b'mkp', b'Moikodi'], + [b'mkq', b'Miwok, Bay'], + [b'mkr', b'Malas'], + [b'mks', b'Mixtec, Silacayoapan'], + [b'mkt', b'Vamale'], + [b'mku', b'Maninka, Konyanka'], + [b'mkv', b'Mafea'], + [b'mkw', b'Kituba (Congo)'], + [b'mkx', b'Manobo, Kinamiging'], + [b'mky', b'Makian, East'], + [b'mkz', b'Makasae'], + [b'mla', b'Malo'], + [b'mlb', b'Mbule'], + [b'mlc', b'Cao Lan'], + [b'mle', b'Manambu'], + [b'mlf', b'Mal'], + [b'mlg', b'Malagasy'], + [b'mlh', b'Mape'], + [b'mli', b'Malimpung'], + [b'mlj', b'Miltu'], + [b'mlk', b'Ilwana'], + [b'mll', b'Malua Bay'], + [b'mlm', b'Mulam'], + [b'mln', b'Malango'], + [b'mlo', b'Mlomp'], + [b'mlp', b'Bargam'], + [b'mlq', b'Maninkakan, Western'], + [b'mlr', b'Vame'], + [b'mls', b'Masalit'], + [b'mlt', b'Maltese'], + [b'mlu', b"To'abaita"], + [b'mlv', b'Motlav'], + [b'mlw', b'Moloko'], + [b'mlx', b'Malfaxal'], + [b'mlz', b'Malaynon'], + [b'mma', b'Mama'], + [b'mmb', b'Momina'], + [b'mmc', 'Mazahua, Michoac\xe1n'], + [b'mmd', b'Maonan'], + [b'mme', b'Mae'], + [b'mmf', b'Mundat'], + [b'mmg', b'Ambrym, North'], + [b'mmh', 'Mehin\xe1ku'], + [b'mmi', b'Musar'], + [b'mmj', b'Majhwar'], + [b'mmk', b'Mukha-Dora'], + [b'mml', b'Man Met'], + [b'mmm', b'Maii'], + [b'mmn', b'Mamanwa'], + [b'mmo', b'Buang, Mangga'], + [b'mmp', b'Siawi'], + [b'mmq', b'Musak'], + [b'mmr', b'Miao, Western Xiangxi'], + [b'mmt', b'Malalamai'], + [b'mmu', b'Mmaala'], + [b'mmv', b'Miriti'], + [b'mmw', b'Emae'], + [b'mmx', b'Madak'], + [b'mmy', b'Migaama'], + [b'mmz', b'Mabaale'], + [b'mna', b'Mbula'], + [b'mnb', b'Muna'], + [b'mnc', b'Manchu'], + [b'mnd', 'Mond\xe9'], + [b'mne', b'Naba'], + [b'mnf', b'Mundani'], + [b'mng', b'Mnong, Eastern'], + [b'mnh', b'Mono (Democratic Republic of Congo)'], + [b'mni', b'Manipuri'], + [b'mnj', b'Munji'], + [b'mnk', b'Mandinka'], + [b'mnl', b'Tiale'], + [b'mnm', b'Mapena'], + [b'mnn', b'Mnong, Southern'], + [b'mnp', b'Chinese, Min Bei'], + [b'mnq', b'Minriq'], + [b'mnr', b'Mono (USA)'], + [b'mns', b'Mansi'], + [b'mnu', b'Mer'], + [b'mnv', b'Rennell-Bellona'], + [b'mnw', b'Mon'], + [b'mnx', b'Manikion'], + [b'mny', b'Manyawa'], + [b'mnz', b'Moni'], + [b'moa', b'Mwan'], + [b'moc', 'Mocov\xed'], + [b'mod', b'Mobilian'], + [b'moe', b'Montagnais'], + [b'mog', b'Mongondow'], + [b'moh', b'Mohawk'], + [b'moi', b'Mboi'], + [b'moj', b'Monzombo'], + [b'mok', b'Morori'], + [b'mom', b'Mangue'], + [b'mon', b'Mongolian'], + [b'moo', b'Monom'], + [b'mop', 'Mop\xe1n Maya'], + [b'moq', b'Mor (Bomberai Peninsula)'], + [b'mor', b'Moro'], + [b'mos', b'Mossi'], + [b'mot', 'Bar\xed'], + [b'mou', b'Mogum'], + [b'mov', b'Mohave'], + [b'mow', b'Moi (Congo)'], + [b'mox', b'Molima'], + [b'moy', b'Shekkacho'], + [b'moz', b'Mukulu'], + [b'mpa', b'Mpoto'], + [b'mpb', b'Mullukmulluk'], + [b'mpc', b'Mangarayi'], + [b'mpd', b'Machinere'], + [b'mpe', b'Majang'], + [b'mpg', b'Marba'], + [b'mph', b'Maung'], + [b'mpi', b'Mpade'], + [b'mpj', b'Martu Wangka'], + [b'mpk', b'Mbara (Chad)'], + [b'mpl', b'Watut, Middle'], + [b'mpm', 'Mixtec, Yosond\xfaa'], + [b'mpn', b'Mindiri'], + [b'mpo', b'Miu'], + [b'mpp', b'Migabac'], + [b'mpq', 'Mat\xeds'], + [b'mpr', b'Vangunu'], + [b'mps', b'Dadibi'], + [b'mpt', b'Mian'], + [b'mpu', 'Makur\xe1p'], + [b'mpv', b'Mungkip'], + [b'mpw', b'Mapidian'], + [b'mpx', b'Misima-Panaeati'], + [b'mpy', b'Mapia'], + [b'mpz', b'Mpi'], + [b'mqa', b'Maba (Indonesia)'], + [b'mqb', b'Mbuko'], + [b'mqc', b'Mangole'], + [b'mqe', b'Matepi'], + [b'mqf', b'Momuna'], + [b'mqg', b'Malay, Kota Bangun Kutai'], + [b'mqh', b'Mixtec, Tlazoyaltepec'], + [b'mqi', b'Mariri'], + [b'mqj', b'Mamasa'], + [b'mqk', b'Manobo, Rajah Kabunsuwan'], + [b'mql', b'Mbelime'], + [b'mqm', b'Marquesan, South'], + [b'mqn', b'Moronene'], + [b'mqo', b'Modole'], + [b'mqp', b'Manipa'], + [b'mqq', b'Minokok'], + [b'mqr', b'Mander'], + [b'mqs', b'Makian, West'], + [b'mqt', b'Mok'], + [b'mqu', b'Mandari'], + [b'mqv', b'Mosimo'], + [b'mqw', b'Murupi'], + [b'mqx', b'Mamuju'], + [b'mqy', b'Manggarai'], + [b'mqz', b'Pano'], + [b'mra', b'Mlabri'], + [b'mrb', b'Marino'], + [b'mrc', b'Maricopa'], + [b'mrd', b'Magar, Western'], + [b'mre', b"Martha's Vineyard Sign Language"], + [b'mrf', b'Elseng'], + [b'mrg', b'Mising'], + [b'mrh', b'Chin, Mara'], + [b'mri', b'Maori'], + [b'mrj', b'Mari, Western'], + [b'mrk', b'Hmwaveke'], + [b'mrl', b'Mortlockese'], + [b'mrm', b'Merlav'], + [b'mrn', b'Cheke Holo'], + [b'mro', b'Mru'], + [b'mrp', b'Morouas'], + [b'mrq', b'Marquesan, North'], + [b'mrr', b'Maria (India)'], + [b'mrs', b'Maragus'], + [b'mrt', b'Marghi Central'], + [b'mru', b'Mono (Cameroon)'], + [b'mrv', b'Mangareva'], + [b'mrw', b'Maranao'], + [b'mrx', b'Maremgi'], + [b'mry', b'Mandaya'], + [b'mrz', b'Marind'], + [b'msa', b'Malay (macrolanguage)'], + [b'msb', b'Masbatenyo'], + [b'msc', b'Maninka, Sankaran'], + [b'msd', b'Yucatec Maya Sign Language'], + [b'mse', b'Musey'], + [b'msf', b'Mekwei'], + [b'msg', b'Moraid'], + [b'msh', b'Malagasy, Masikoro'], + [b'msi', b'Malay, Sabah'], + [b'msj', b'Ma (Democratic Republic of Congo)'], + [b'msk', b'Mansaka'], + [b'msl', b'Molof'], + [b'msm', b'Manobo, Agusan'], + [b'msn', 'Vur\xebs'], + [b'mso', b'Mombum'], + [b'msp', 'Maritsau\xe1'], + [b'msq', b'Caac'], + [b'msr', b'Mongolian Sign Language'], + [b'mss', b'Masela, West'], + [b'msu', b'Musom'], + [b'msv', b'Maslam'], + [b'msw', b'Mansoanka'], + [b'msx', b'Moresada'], + [b'msy', b'Aruamu'], + [b'msz', b'Momare'], + [b'mta', b'Manobo, Cotabato'], + [b'mtb', b'Anyin Morofo'], + [b'mtc', b'Munit'], + [b'mtd', b'Mualang'], + [b'mte', b'Mono (Solomon Islands)'], + [b'mtf', b'Murik (Papua New Guinea)'], + [b'mtg', b'Una'], + [b'mth', b'Munggui'], + [b'mti', b'Maiwa (Papua New Guinea)'], + [b'mtj', b'Moskona'], + [b'mtk', b"Mbe'"], + [b'mtl', b'Montol'], + [b'mtm', b'Mator'], + [b'mtn', b'Matagalpa'], + [b'mto', b'Mixe, Totontepec'], + [b'mtp', 'Wich\xed Lhamt\xe9s Nocten'], + [b'mtq', b'Muong'], + [b'mtr', b'Mewari'], + [b'mts', b'Yora'], + [b'mtt', b'Mota'], + [b'mtu', b'Mixtec, Tututepec'], + [b'mtv', b"Asaro'o"], + [b'mtw', b'Binukidnon, Southern'], + [b'mtx', 'Mixtec, Tida\xe1'], + [b'mty', b'Nabi'], + [b'mua', b'Mundang'], + [b'mub', b'Mubi'], + [b'muc', b'Ajumbu'], + [b'mud', b'Aleut, Mednyj'], + [b'mue', b'Media Lengua'], + [b'mug', b'Musgu'], + [b'muh', 'M\xfcnd\xfc'], + [b'mui', b'Musi'], + [b'muj', b'Mabire'], + [b'muk', b'Mugom'], + [b'mul', b'Multiple languages'], + [b'mum', b'Maiwala'], + [b'muo', b'Nyong'], + [b'mup', b'Malvi'], + [b'muq', b'Miao, Eastern Xiangxi'], + [b'mur', b'Murle'], + [b'mus', b'Creek'], + [b'mut', b'Muria, Western'], + [b'muu', b'Yaaku'], + [b'muv', b'Muthuvan'], + [b'mux', b'Bo-Ung'], + [b'muy', b'Muyang'], + [b'muz', b'Mursi'], + [b'mva', b'Manam'], + [b'mvb', b'Mattole'], + [b'mvd', b'Mamboru'], + [b'mve', b'Marwari (Pakistan)'], + [b'mvf', b'Mongolian, Peripheral'], + [b'mvg', 'Mixtec, Yucua\xf1e'], + [b'mvh', b'Mulgi'], + [b'mvi', b'Miyako'], + [b'mvk', b'Mekmek'], + [b'mvl', b'Mbara (Australia)'], + [b'mvm', b'Muya'], + [b'mvn', b'Minaveha'], + [b'mvo', b'Marovo'], + [b'mvp', b'Duri'], + [b'mvq', b'Moere'], + [b'mvr', b'Marau'], + [b'mvs', b'Massep'], + [b'mvt', b'Mpotovoro'], + [b'mvu', b'Marfa'], + [b'mvv', b'Murut, Tagal'], + [b'mvw', b'Machinga'], + [b'mvx', b'Meoswar'], + [b'mvy', b'Kohistani, Indus'], + [b'mvz', b'Mesqan'], + [b'mwa', b'Mwatebu'], + [b'mwb', b'Juwal'], + [b'mwc', b'Are'], + [b'mwe', b'Mwera (Chimwera)'], + [b'mwf', b'Murrinh-Patha'], + [b'mwg', b'Aiklep'], + [b'mwh', b'Mouk-Aria'], + [b'mwi', b'Labo'], + [b'mwj', b'Maligo'], + [b'mwk', b'Maninkakan, Kita'], + [b'mwl', b'Mirandese'], + [b'mwm', b'Sar'], + [b'mwn', b'Nyamwanga'], + [b'mwo', b'Maewo, Central'], + [b'mwp', b'Kala Lagaw Ya'], + [b'mwq', 'Chin, M\xfcn'], + [b'mwr', b'Marwari'], + [b'mws', b'Mwimbi-Muthambi'], + [b'mwt', b'Moken'], + [b'mwu', b'Mittu'], + [b'mwv', b'Mentawai'], + [b'mww', b'Hmong Daw'], + [b'mwx', b'Mediak'], + [b'mwy', b'Mosiro'], + [b'mwz', b'Moingi'], + [b'mxa', b'Mixtec, Northwest Oaxaca'], + [b'mxb', 'Mixtec, Tezoatl\xe1n'], + [b'mxc', b'Manyika'], + [b'mxd', b'Modang'], + [b'mxe', b'Mele-Fila'], + [b'mxf', b'Malgbe'], + [b'mxg', b'Mbangala'], + [b'mxh', b'Mvuba'], + [b'mxi', b'Mozarabic'], + [b'mxj', b'Miju-Mishmi'], + [b'mxk', b'Monumbo'], + [b'mxl', b'Gbe, Maxi'], + [b'mxm', b'Meramera'], + [b'mxn', b'Moi (Indonesia)'], + [b'mxo', b'Mbowe'], + [b'mxp', b'Mixe, Tlahuitoltepec'], + [b'mxq', b'Mixe, Juquila'], + [b'mxr', b'Murik (Malaysia)'], + [b'mxs', b'Mixtec, Huitepec'], + [b'mxt', b'Mixtec, Jamiltepec'], + [b'mxu', b'Mada (Cameroon)'], + [b'mxv', 'Mixtec, Metlat\xf3noc'], + [b'mxw', b'Namo'], + [b'mxx', b'Mahou'], + [b'mxy', 'Mixtec, Southeastern Nochixtl\xe1n'], + [b'mxz', b'Masela, Central'], + [b'mya', b'Burmese'], + [b'myb', b'Mbay'], + [b'myc', b'Mayeka'], + [b'myd', b'Maramba'], + [b'mye', b'Myene'], + [b'myf', b'Bambassi'], + [b'myg', b'Manta'], + [b'myh', b'Makah'], + [b'myi', b'Mina (India)'], + [b'myj', b'Mangayat'], + [b'myk', b'Senoufo, Mamara'], + [b'myl', b'Moma'], + [b'mym', b"Me'en"], + [b'myo', b'Anfillo'], + [b'myp', 'Pirah\xe3'], + [b'myr', b'Muniche'], + [b'mys', b'Mesmes'], + [b'myu', 'Munduruk\xfa'], + [b'myv', b'Erzya'], + [b'myw', b'Muyuw'], + [b'myx', b'Masaaba'], + [b'myy', b'Macuna'], + [b'myz', b'Mandaic, Classical'], + [b'mza', 'Mixtec, Santa Mar\xeda Zacatepec'], + [b'mzb', b'Tumzabt'], + [b'mzc', b'Madagascar Sign Language'], + [b'mzd', b'Malimba'], + [b'mze', b'Morawa'], + [b'mzg', b'Monastic Sign Language'], + [b'mzh', 'Wich\xed Lhamt\xe9s G\xfcisnay'], + [b'mzi', 'Mazatec, Ixcatl\xe1n'], + [b'mzj', b'Manya'], + [b'mzk', b'Mambila, Nigeria'], + [b'mzl', 'Mixe, Mazatl\xe1n'], + [b'mzm', b'Mumuye'], + [b'mzn', b'Mazanderani'], + [b'mzo', b'Matipuhy'], + [b'mzp', b'Movima'], + [b'mzq', b'Mori Atas'], + [b'mzr', 'Mar\xfabo'], + [b'mzs', b'Macanese'], + [b'mzt', b'Mintil'], + [b'mzu', b'Inapang'], + [b'mzv', b'Manza'], + [b'mzw', b'Deg'], + [b'mzx', b'Mawayana'], + [b'mzy', b'Mozambican Sign Language'], + [b'mzz', b'Maiadomu'], + [b'naa', b'Namla'], + [b'nab', 'Nambiku\xe1ra, Southern'], + [b'nac', b'Narak'], + [b'nad', b'Nijadali'], + [b'nae', b"Naka'ela"], + [b'naf', b'Nabak'], + [b'nag', b'Naga Pidgin'], + [b'naj', b'Nalu'], + [b'nak', b'Nakanai'], + [b'nal', b'Nalik'], + [b'nam', b"Ngan'gityemerri"], + [b'nan', b'Chinese, Min Nan'], + [b'nao', b'Naaba'], + [b'nap', b'Neapolitan'], + [b'naq', b'Nama (Namibia)'], + [b'nar', b'Iguta'], + [b'nas', b'Naasioi'], + [b'nat', b'Hungworo'], + [b'nau', b'Nauru'], + [b'nav', b'Navajo'], + [b'naw', b'Nawuri'], + [b'nax', b'Nakwi'], + [b'nay', b'Narrinyeri'], + [b'naz', b'Nahuatl, Coatepec'], + [b'nba', b'Nyemba'], + [b'nbb', b'Ndoe'], + [b'nbc', b'Naga, Chang'], + [b'nbd', b'Ngbinda'], + [b'nbe', b'Naga, Konyak'], + [b'nbg', b'Nagarchal'], + [b'nbh', b'Ngamo'], + [b'nbi', b'Naga, Mao'], + [b'nbj', b'Ngarinman'], + [b'nbk', b'Nake'], + [b'nbl', b'Ndebele, South'], + [b'nbm', b"Ngbaka Ma'bo"], + [b'nbn', b'Kuri'], + [b'nbo', b'Nkukoli'], + [b'nbp', b'Nnam'], + [b'nbq', b'Nggem'], + [b'nbr', b'Numana-Nunku-Gbantu-Numbu'], + [b'nbs', b'Namibian Sign Language'], + [b'nbt', b'Na'], + [b'nbu', b'Naga, Rongmei'], + [b'nbv', b'Ngamambo'], + [b'nbw', b'Ngbandi, Southern'], + [b'nby', b'Ningera'], + [b'nca', b'Iyo'], + [b'ncb', b'Nicobarese, Central'], + [b'ncc', b'Ponam'], + [b'ncd', b'Nachering'], + [b'nce', b'Yale'], + [b'ncf', b'Notsi'], + [b'ncg', b"Nisga'a"], + [b'nch', b'Nahuatl, Central Huasteca'], + [b'nci', b'Nahuatl, Classical'], + [b'ncj', b'Nahuatl, Northern Puebla'], + [b'nck', b'Nakara'], + [b'ncl', 'Nahuatl, Michoac\xe1n'], + [b'ncm', b'Nambo'], + [b'ncn', b'Nauna'], + [b'nco', b'Sibe'], + [b'ncp', b'Ndaktup'], + [b'ncr', b'Ncane'], + [b'ncs', b'Nicaraguan Sign Language'], + [b'nct', b'Naga, Chothe'], + [b'ncu', b'Chumburung'], + [b'ncx', b'Nahuatl, Central Puebla'], + [b'ncz', b'Natchez'], + [b'nda', b'Ndasa'], + [b'ndb', b'Kenswei Nsei'], + [b'ndc', b'Ndau'], + [b'ndd', b'Nde-Nsele-Nta'], + [b'nde', b'Ndebele, North'], + [b'ndf', b'Nadruvian'], + [b'ndg', b'Ndengereko'], + [b'ndh', b'Ndali'], + [b'ndi', b'Samba Leko'], + [b'ndj', b'Ndamba'], + [b'ndk', b'Ndaka'], + [b'ndl', b'Ndolo'], + [b'ndm', b'Ndam'], + [b'ndn', b'Ngundi'], + [b'ndo', b'Ndonga'], + [b'ndp', b'Ndo'], + [b'ndq', b'Ndombe'], + [b'ndr', b'Ndoola'], + [b'nds', b'German, Low'], + [b'ndt', b'Ndunga'], + [b'ndu', b'Dugun'], + [b'ndv', b'Ndut'], + [b'ndw', b'Ndobo'], + [b'ndx', b'Nduga'], + [b'ndy', b'Lutos'], + [b'ndz', b'Ndogo'], + [b'nea', b"Ngad'a, Eastern"], + [b'neb', "Toura (C\xf4te d'Ivoire)"], + [b'nec', b'Nedebang'], + [b'ned', b'Nde-Gbite'], + [b'nee', 'N\xeal\xeamwa-Nixumwak'], + [b'nef', b'Nefamese'], + [b'neg', b'Negidal'], + [b'neh', b'Nyenkha'], + [b'nei', b'Hittite, Neo-'], + [b'nej', b'Neko'], + [b'nek', b'Neku'], + [b'nem', b'Nemi'], + [b'nen', b'Nengone'], + [b'neo', 'N\xe1-Meo'], + [b'nep', b'Nepali (macrolanguage)'], + [b'neq', b'Mixe, North Central'], + [b'ner', b'Yahadian'], + [b'nes', b'Kinnauri, Bhoti'], + [b'net', b'Nete'], + [b'neu', b'Neo'], + [b'nev', b'Nyaheun'], + [b'new', b'Newari'], + [b'nex', b'Neme'], + [b'ney', b'Neyo'], + [b'nez', b'Nez Perce'], + [b'nfa', b'Dhao'], + [b'nfd', b'Ahwai'], + [b'nfl', b'Ayiwo'], + [b'nfr', b'Nafaanra'], + [b'nfu', b'Mfumte'], + [b'nga', b'Ngbaka'], + [b'ngb', b'Ngbandi, Northern'], + [b'ngc', b'Ngombe (Democratic Republic of Congo)'], + [b'ngd', b'Ngando (Central African Republic)'], + [b'nge', b'Ngemba'], + [b'ngg', b'Ngbaka Manza'], + [b'ngh', b'N/u'], + [b'ngi', b'Ngizim'], + [b'ngj', b'Ngie'], + [b'ngk', b'Dalabon'], + [b'ngl', b'Lomwe'], + [b'ngm', b"Ngatik Men's Creole"], + [b'ngn', b'Ngwo'], + [b'ngo', b'Ngoni'], + [b'ngp', b'Ngulu'], + [b'ngq', b'Ngurimi'], + [b'ngr', b'Engdewu'], + [b'ngs', b'Gvoko'], + [b'ngt', b'Ngeq'], + [b'ngu', b'Nahuatl, Guerrero'], + [b'ngv', b'Nagumi'], + [b'ngw', b'Ngwaba'], + [b'ngx', b'Nggwahyi'], + [b'ngy', b'Tibea'], + [b'ngz', b'Ngungwel'], + [b'nha', b'Nhanda'], + [b'nhb', b'Beng'], + [b'nhc', b'Nahuatl, Tabasco'], + [b'nhd', 'Chirip\xe1'], + [b'nhe', b'Nahuatl, Eastern Huasteca'], + [b'nhf', b'Nhuwala'], + [b'nhg', b'Nahuatl, Tetelcingo'], + [b'nhh', b'Nahari'], + [ + b'nhi', + 'Nahuatl, Zacatl\xe1n-Ahuacatl\xe1n-Tepetzintla' + ], + [b'nhk', b'Nahuatl, Isthmus-Cosoleacaque'], + [b'nhm', b'Nahuatl, Morelos'], + [b'nhn', b'Nahuatl, Central'], + [b'nho', b'Takuu'], + [b'nhp', b'Nahuatl, Isthmus-Pajapan'], + [b'nhq', b'Nahuatl, Huaxcaleca'], + [b'nhr', b'Naro'], + [b'nht', b'Nahuatl, Ometepec'], + [b'nhu', b'Noone'], + [b'nhv', b'Nahuatl, Temascaltepec'], + [b'nhw', b'Nahuatl, Western Huasteca'], + [b'nhx', b'Nahuatl, Isthmus-Mecayapan'], + [b'nhy', b'Nahuatl, Northern Oaxaca'], + [b'nhz', 'Nahuatl, Santa Mar\xeda La Alta'], + [b'nia', b'Nias'], + [b'nib', b'Nakame'], + [b'nid', b'Ngandi'], + [b'nie', b'Niellim'], + [b'nif', b'Nek'], + [b'nig', b'Ngalakan'], + [b'nih', b'Nyiha (Tanzania)'], + [b'nii', b'Nii'], + [b'nij', b'Ngaju'], + [b'nik', b'Nicobarese, Southern'], + [b'nil', b'Nila'], + [b'nim', b'Nilamba'], + [b'nin', b'Ninzo'], + [b'nio', b'Nganasan'], + [b'niq', b'Nandi'], + [b'nir', b'Nimboran'], + [b'nis', b'Nimi'], + [b'nit', b'Kolami, Southeastern'], + [b'niu', b'Niuean'], + [b'niv', b'Gilyak'], + [b'niw', b'Nimo'], + [b'nix', b'Hema'], + [b'niy', b'Ngiti'], + [b'niz', b'Ningil'], + [b'nja', b'Nzanyi'], + [b'njb', b'Naga, Nocte'], + [b'njd', b'Ndonde Hamba'], + [b'njh', b'Naga, Lotha'], + [b'nji', b'Gudanji'], + [b'njj', b'Njen'], + [b'njl', b'Njalgulgule'], + [b'njm', b'Naga, Angami'], + [b'njn', b'Naga, Liangmai'], + [b'njo', b'Naga, Ao'], + [b'njr', b'Njerep'], + [b'njs', b'Nisa'], + [b'njt', b'Ndyuka-Trio Pidgin'], + [b'nju', b'Ngadjunmaya'], + [b'njx', b'Kunyi'], + [b'njy', b'Njyem'], + [b'njz', b'Nyishi'], + [b'nka', b'Nkoya'], + [b'nkb', b'Naga, Khoibu'], + [b'nkc', b'Nkongho'], + [b'nkd', b'Koireng'], + [b'nke', b'Duke'], + [b'nkf', b'Naga, Inpui'], + [b'nkg', b'Nekgini'], + [b'nkh', b'Naga, Khezha'], + [b'nki', b'Naga, Thangal'], + [b'nkj', b'Nakai'], + [b'nkk', b'Nokuku'], + [b'nkm', b'Namat'], + [b'nkn', b'Nkangala'], + [b'nko', b'Nkonya'], + [b'nkp', b'Niuatoputapu'], + [b'nkq', b'Nkami'], + [b'nkr', b'Nukuoro'], + [b'nks', b'Asmat, North'], + [b'nkt', b'Nyika (Tanzania)'], + [b'nku', b'Kulango, Bouna'], + [b'nkv', b'Nyika (Malawi and Zambia)'], + [b'nkw', b'Nkutu'], + [b'nkx', b'Nkoroo'], + [b'nkz', b'Nkari'], + [b'nla', b'Ngombale'], + [b'nlc', b'Nalca'], + [b'nld', b'Dutch'], + [b'nle', b'Nyala, East'], + [b'nlg', b'Gela'], + [b'nli', b'Grangali'], + [b'nlj', b'Nyali'], + [b'nlk', b'Yali, Ninia'], + [b'nll', b'Nihali'], + [b'nlo', b'Ngul'], + [b'nlq', b'Naga, Lao'], + [b'nlu', b'Nchumbulu'], + [b'nlv', b'Nahuatl, Orizaba'], + [b'nlw', b'Walangama'], + [b'nlx', b'Nahali'], + [b'nly', b'Nyamal'], + [b'nlz', 'Nal\xf6go'], + [b'nma', b'Naga, Maram'], + [b'nmb', b'Nambas, Big'], + [b'nmc', b'Ngam'], + [b'nmd', b'Ndumu'], + [b'nme', b'Naga, Mzieme'], + [b'nmf', b'Naga, Tangkhul (India)'], + [b'nmg', b'Kwasio'], + [b'nmh', b'Naga, Monsang'], + [b'nmi', b'Nyam'], + [b'nmj', b'Ngombe (Central African Republic)'], + [b'nmk', b'Namakura'], + [b'nml', b'Ndemli'], + [b'nmm', b'Manangba'], + [b'nmn', '!X\xf3\xf5'], + [b'nmo', b'Naga, Moyon'], + [b'nmp', b'Nimanbur'], + [b'nmq', b'Nambya'], + [b'nmr', b'Nimbari'], + [b'nms', b'Letemboi'], + [b'nmt', b'Namonuito'], + [b'nmu', b'Maidu, Northeast'], + [b'nmv', b'Ngamini'], + [b'nmw', b'Nimoa'], + [b'nmx', b'Nama (Papua New Guinea)'], + [b'nmy', b'Namuyi'], + [b'nmz', b'Nawdm'], + [b'nna', b'Nyangumarta'], + [b'nnb', b'Nande'], + [b'nnc', b'Nancere'], + [b'nnd', b'Ambae, West'], + [b'nne', b'Ngandyera'], + [b'nnf', b'Ngaing'], + [b'nng', b'Naga, Maring'], + [b'nnh', b'Ngiemboon'], + [b'nni', b'Nuaulu, North'], + [b'nnj', b'Nyangatom'], + [b'nnk', b'Nankina'], + [b'nnl', b'Naga, Northern Rengma'], + [b'nnm', b'Namia'], + [b'nnn', b'Ngete'], + [b'nno', b'Norwegian Nynorsk'], + [b'nnp', b'Naga, Wancho'], + [b'nnq', b'Ngindo'], + [b'nnr', b'Narungga'], + [b'nns', b'Ningye'], + [b'nnt', b'Nanticoke'], + [b'nnu', b'Dwang'], + [b'nnv', b'Nugunu (Australia)'], + [b'nnw', b'Nuni, Southern'], + [b'nnx', b'Ngong'], + [b'nny', b'Nyangga'], + [b'nnz', b"Nda'nda'"], + [b'noa', b'Woun Meu'], + [b'nob', 'Norwegian Bokm\xe5l'], + [b'noc', b'Nuk'], + [b'nod', b'Thai, Northern'], + [b'noe', b'Nimadi'], + [b'nof', b'Nomane'], + [b'nog', b'Nogai'], + [b'noh', b'Nomu'], + [b'noi', b'Noiri'], + [b'noj', b'Nonuya'], + [b'nok', b'Nooksack'], + [b'nol', b'Nomlaki'], + [b'nom', 'Nocam\xe1n'], + [b'non', b'Norse, Old'], + [b'nop', b'Numanggang'], + [b'noq', b'Ngongo'], + [b'nor', b'Norwegian'], + [b'nos', b'Nisu, Eastern'], + [b'not', b'Nomatsiguenga'], + [b'nou', b'Ewage-Notu'], + [b'nov', b'Novial'], + [b'now', b'Nyambo'], + [b'noy', b'Noy'], + [b'noz', b'Nayi'], + [b'npa', b'Nar Phu'], + [b'npb', b'Nupbikha'], + [b'npg', b'Naga, Ponyo-Gongwang'], + [b'nph', b'Naga, Phom'], + [b'npi', b'Nepali (individual language)'], + [b'npl', b'Nahuatl, Southeastern Puebla'], + [b'npn', b'Mondropolon'], + [b'npo', b'Naga, Pochuri'], + [b'nps', b'Nipsan'], + [b'npu', b'Naga, Puimei'], + [b'npy', b'Napu'], + [b'nqg', b'Nago, Southern'], + [b'nqk', b'Ede Nago, Kura'], + [b'nqm', b'Ndom'], + [b'nqn', b'Nen'], + [b'nqo', b"N'Ko"], + [b'nqq', b'Naga, Kyan-Karyaw'], + [b'nqy', b'Naga, Akyaung Ari'], + [b'nra', b'Ngom'], + [b'nrb', b'Nara'], + [b'nrc', b'Noric'], + [b'nre', b'Naga, Southern Rengma'], + [b'nrg', b'Narango'], + [b'nri', b'Naga, Chokri'], + [b'nrk', b'Ngarla'], + [b'nrl', b'Ngarluma'], + [b'nrm', b'Narom'], + [b'nrn', b'Norn'], + [b'nrp', b'Picene, North'], + [b'nrr', b'Norra'], + [b'nrt', b'Kalapuya, Northern'], + [b'nru', b'Narua'], + [b'nrx', b'Ngurmbur'], + [b'nrz', b'Lala'], + [b'nsa', b'Naga, Sangtam'], + [b'nsc', b'Nshi'], + [b'nsd', b'Nisu, Southern'], + [b'nse', b'Nsenga'], + [b'nsf', b'Nisu, Northwestern'], + [b'nsg', b'Ngasa'], + [b'nsh', b'Ngoshie'], + [b'nsi', b'Nigerian Sign Language'], + [b'nsk', b'Naskapi'], + [b'nsl', b'Norwegian Sign Language'], + [b'nsm', b'Naga, Sumi'], + [b'nsn', b'Nehan'], + [b'nso', b'Pedi'], + [b'nsp', b'Nepalese Sign Language'], + [b'nsq', b'Miwok, Northern Sierra'], + [b'nsr', b'Maritime Sign Language'], + [b'nss', b'Nali'], + [b'nst', b'Naga, Tase'], + [b'nsu', b'Nahuatl, Sierra Negra'], + [b'nsv', b'Nisu, Southwestern'], + [b'nsw', b'Navut'], + [b'nsx', b'Nsongo'], + [b'nsy', b'Nasal'], + [b'nsz', b'Nisenan'], + [b'nte', b'Nathembo'], + [b'ntg', b'Ngantangarra'], + [b'nti', b'Natioro'], + [b'ntj', b'Ngaanyatjarra'], + [b'ntk', b'Ikoma-Nata-Isenye'], + [b'ntm', b'Nateni'], + [b'nto', b'Ntomba'], + [b'ntp', b'Tepehuan, Northern'], + [b'ntr', b'Delo'], + [b'nts', b'Natagaimas'], + [b'ntu', 'Nat\xfcgu'], + [b'ntw', b'Nottoway'], + [b'ntx', b'Naga, Tangkhul (Myanmar)'], + [b'nty', b'Mantsi'], + [b'ntz', b'Natanzi'], + [b'nua', b'Yuanga'], + [b'nuc', b'Nukuini'], + [b'nud', b'Ngala'], + [b'nue', b'Ngundu'], + [b'nuf', b'Nusu'], + [b'nug', b'Nungali'], + [b'nuh', b'Ndunda'], + [b'nui', b'Ngumbi'], + [b'nuj', b'Nyole'], + [b'nuk', b'Nuu-chah-nulth'], + [b'nul', b'Nusa Laut'], + [b'num', b"Niuafo'ou"], + [b'nun', b'Anong'], + [b'nuo', 'Ngu\xf4n'], + [b'nup', b'Nupe-Nupe-Tako'], + [b'nuq', b'Nukumanu'], + [b'nur', b'Nukuria'], + [b'nus', b'Nuer'], + [b'nut', b'Nung (Viet Nam)'], + [b'nuu', b'Ngbundu'], + [b'nuv', b'Nuni, Northern'], + [b'nuw', b'Nguluwan'], + [b'nux', b'Mehek'], + [b'nuy', b'Nunggubuyu'], + [b'nuz', b'Nahuatl, Tlamacazapa'], + [b'nvh', b'Nasarian'], + [b'nvm', b'Namiae'], + [b'nvo', b'Nyokon'], + [b'nwa', b'Nawathinehena'], + [b'nwb', b'Nyabwa'], + [b'nwc', b'Newari, Classical'], + [b'nwe', b'Ngwe'], + [b'nwg', b'Ngayawung'], + [b'nwi', b'Tanna, Southwest'], + [b'nwm', b'Nyamusa-Molo'], + [b'nwo', b'Nauo'], + [b'nwr', b'Nawaru'], + [b'nwx', b'Newar, Middle'], + [b'nwy', b'Nottoway-Meherrin'], + [b'nxa', b'Nauete'], + [b'nxd', b'Ngando (Democratic Republic of Congo)'], + [b'nxe', b'Nage'], + [b'nxg', b"Ngad'a"], + [b'nxi', b'Nindi'], + [b'nxk', b'Naga, Koki'], + [b'nxl', b'Nuaulu, South'], + [b'nxm', b'Numidian'], + [b'nxn', b'Ngawun'], + [b'nxq', b'Naxi'], + [b'nxr', b'Ninggerum'], + [b'nxu', b'Narau'], + [b'nxx', b'Nafri'], + [b'nya', b'Nyanja'], + [b'nyb', b'Nyangbo'], + [b'nyc', b'Nyanga-li'], + [b'nyd', b'Nyore'], + [b'nye', b'Nyengo'], + [b'nyf', b'Giryama'], + [b'nyg', b'Nyindu'], + [b'nyh', b'Nyigina'], + [b'nyi', b'Ama (Sudan)'], + [b'nyj', b'Nyanga'], + [b'nyk', b'Nyaneka'], + [b'nyl', b'Nyeu'], + [b'nym', b'Nyamwezi'], + [b'nyn', b'Nyankole'], + [b'nyo', b'Nyoro'], + [b'nyp', b"Nyang'i"], + [b'nyq', b'Nayini'], + [b'nyr', b'Nyiha (Malawi)'], + [b'nys', b'Nyunga'], + [b'nyt', b'Nyawaygi'], + [b'nyu', b'Nyungwe'], + [b'nyv', b'Nyulnyul'], + [b'nyw', b'Nyaw'], + [b'nyx', b'Nganyaywana'], + [b'nyy', b'Nyakyusa-Ngonde'], + [b'nza', b'Mbembe, Tigon'], + [b'nzb', b'Njebi'], + [b'nzi', b'Nzima'], + [b'nzk', b'Nzakara'], + [b'nzm', b'Naga, Zeme'], + [b'nzs', b'New Zealand Sign Language'], + [b'nzu', b'Teke-Nzikou'], + [b'nzy', b'Nzakambay'], + [b'nzz', b'Dogon, Nanga Dama'], + [b'oaa', b'Orok'], + [b'oac', b'Oroch'], + [b'oar', b'Aramaic, Old (up to 700 BCE)'], + [b'oav', b'Avar, Old'], + [b'obi', 'Obispe\xf1o'], + [b'obk', b'Bontok, Southern'], + [b'obl', b'Oblo'], + [b'obm', b'Moabite'], + [b'obo', b'Manobo, Obo'], + [b'obr', b'Burmese, Old'], + [b'obt', b'Breton, Old'], + [b'obu', b'Obulom'], + [b'oca', b'Ocaina'], + [b'och', b'Chinese, Old'], + [b'oci', b'Occitan (post 1500)'], + [b'oco', b'Cornish, Old'], + [b'ocu', b'Matlatzinca, Atzingo'], + [b'oda', b'Odut'], + [b'odk', b'Od'], + [b'odt', b'Dutch, Old'], + [b'odu', b'Odual'], + [b'ofo', b'Ofo'], + [b'ofs', b'Frisian, Old'], + [b'ofu', b'Efutop'], + [b'ogb', b'Ogbia'], + [b'ogc', b'Ogbah'], + [b'oge', b'Georgian, Old'], + [b'ogg', b'Ogbogolo'], + [b'ogo', b'Khana'], + [b'ogu', b'Ogbronuagum'], + [b'oht', b'Hittite, Old'], + [b'ohu', b'Hungarian, Old'], + [b'oia', b'Oirata'], + [b'oin', b'One, Inebu'], + [b'ojb', b'Ojibwa, Northwestern'], + [b'ojc', b'Ojibwa, Central'], + [b'ojg', b'Ojibwa, Eastern'], + [b'oji', b'Ojibwa'], + [b'ojp', b'Japanese, Old'], + [b'ojs', b'Ojibwa, Severn'], + [b'ojv', b'Ontong Java'], + [b'ojw', b'Ojibwa, Western'], + [b'oka', b'Okanagan'], + [b'okb', b'Okobo'], + [b'okd', b'Okodia'], + [b'oke', b'Okpe (Southwestern Edo)'], + [b'okg', b'Koko Babangk'], + [b'okh', b'Koresh-e Rostam'], + [b'oki', b'Okiek'], + [b'okj', b'Oko-Juwoi'], + [b'okk', b'One, Kwamtim'], + [b'okl', b'Kentish Sign Language, Old'], + [b'okm', b'Korean, Middle (10th-16th cent.)'], + [b'okn', b'Oki-No-Erabu'], + [b'oko', b'Korean, Old (3rd-9th cent.)'], + [b'okr', b'Kirike'], + [b'oks', b'Oko-Eni-Osayen'], + [b'oku', b'Oku'], + [b'okv', b'Orokaiva'], + [b'okx', b'Okpe (Northwestern Edo)'], + [b'ola', b'Walungge'], + [b'old', b'Mochi'], + [b'ole', b'Olekha'], + [b'olk', b'Olkol'], + [b'olm', b'Oloma'], + [b'olo', b'Livvi'], + [b'olr', b'Olrat'], + [b'oma', b'Omaha-Ponca'], + [b'omb', b'Ambae, East'], + [b'omc', b'Mochica'], + [b'ome', b'Omejes'], + [b'omg', b'Omagua'], + [b'omi', b'Omi'], + [b'omk', b'Omok'], + [b'oml', b'Ombo'], + [b'omn', b'Minoan'], + [b'omo', b'Utarmbung'], + [b'omp', b'Manipuri, Old'], + [b'omr', b'Marathi, Old'], + [b'omt', b'Omotik'], + [b'omu', b'Omurano'], + [b'omw', b'Tairora, South'], + [b'omx', b'Mon, Old'], + [b'ona', b'Ona'], + [b'onb', b'Lingao'], + [b'one', b'Oneida'], + [b'ong', b'Olo'], + [b'oni', b'Onin'], + [b'onj', b'Onjob'], + [b'onk', b'One, Kabore'], + [b'onn', b'Onobasulu'], + [b'ono', b'Onondaga'], + [b'onp', b'Sartang'], + [b'onr', b'One, Northern'], + [b'ons', b'Ono'], + [b'ont', b'Ontenu'], + [b'onu', b'Unua'], + [b'onw', b'Nubian, Old'], + [b'onx', b'Onin Based Pidgin'], + [b'ood', b"Tohono O'odham"], + [b'oog', b'Ong'], + [b'oon', '\xd6nge'], + [b'oor', b'Oorlams'], + [b'oos', b'Ossetic, Old'], + [b'opa', b'Okpamheri'], + [b'opk', b'Kopkaka'], + [b'opm', b'Oksapmin'], + [b'opo', b'Opao'], + [b'opt', b'Opata'], + [b'opy', 'Ofay\xe9'], + [b'ora', b'Oroha'], + [b'orc', b'Orma'], + [b'ore', 'Orej\xf3n'], + [b'org', b'Oring'], + [b'orh', b'Oroqen'], + [b'ori', b'Oriya (macrolanguage)'], + [b'orm', b'Oromo'], + [b'orn', b'Orang Kanaq'], + [b'oro', b'Orokolo'], + [b'orr', b'Oruma'], + [b'ors', b'Orang Seletar'], + [b'ort', b'Oriya, Adivasi'], + [b'oru', b'Ormuri'], + [b'orv', b'Russian, Old'], + [b'orw', b'Oro Win'], + [b'orx', b'Oro'], + [b'ory', b'Oriya (individual language)'], + [b'orz', b'Ormu'], + [b'osa', b'Osage'], + [b'osc', b'Oscan'], + [b'osi', b'Osing'], + [b'oso', b'Ososo'], + [b'osp', b'Spanish, Old'], + [b'oss', b'Ossetian'], + [b'ost', b'Osatu'], + [b'osu', b'One, Southern'], + [b'osx', b'Saxon, Old'], + [b'ota', b'Turkish, Ottoman (1500-1928)'], + [b'otb', b'Tibetan, Old'], + [b'otd', b'Ot Danum'], + [b'ote', b'Otomi, Mezquital'], + [b'oti', b'Oti'], + [b'otk', b'Turkish, Old'], + [b'otl', b'Otomi, Tilapa'], + [b'otm', b'Otomi, Eastern Highland'], + [b'otn', b'Otomi, Tenango'], + [b'otq', 'Otomi, Quer\xe9taro'], + [b'otr', b'Otoro'], + [b'ots', 'Otomi, Estado de M\xe9xico'], + [b'ott', b'Otomi, Temoaya'], + [b'otu', b'Otuke'], + [b'otw', b'Ottawa'], + [b'otx', b'Otomi, Texcatepec'], + [b'oty', b'Tamil, Old'], + [b'otz', b'Otomi, Ixtenco'], + [b'oua', b'Tagargrent'], + [b'oub', b'Glio-Oubi'], + [b'oue', b'Oune'], + [b'oui', b'Uighur, Old'], + [b'oum', b'Ouma'], + [b'oun', b'!O!ung'], + [b'owi', b'Owiniga'], + [b'owl', b'Welsh, Old'], + [b'oyb', b'Oy'], + [b'oyd', b'Oyda'], + [b'oym', b'Wayampi'], + [b'oyy', b"Oya'oya"], + [b'ozm', b'Koonzime'], + [b'pab', 'Parec\xeds'], + [b'pac', b'Pacoh'], + [b'pad', 'Paumar\xed'], + [b'pae', b'Pagibete'], + [b'paf', 'Paranaw\xe1t'], + [b'pag', b'Pangasinan'], + [b'pah', b'Tenharim'], + [b'pai', b'Pe'], + [b'pak', 'Parakan\xe3'], + [b'pal', b'Pahlavi'], + [b'pam', b'Pampanga'], + [b'pan', b'Panjabi'], + [b'pao', b'Paiute, Northern'], + [b'pap', b'Papiamento'], + [b'paq', b'Parya'], + [b'par', b'Panamint'], + [b'pas', b'Papasena'], + [b'pat', b'Papitalai'], + [b'pau', b'Palauan'], + [b'pav', 'Paka\xe1snovos'], + [b'paw', b'Pawnee'], + [b'pax', 'Pankarar\xe9'], + [b'pay', b'Pech'], + [b'paz', 'Pankarar\xfa'], + [b'pbb', 'P\xe1ez'], + [b'pbc', b'Patamona'], + [b'pbe', b'Popoloca, Mezontla'], + [b'pbf', b'Popoloca, Coyotepec'], + [b'pbg', b'Paraujano'], + [b'pbh', "E'\xf1apa Woromaipu"], + [b'pbi', b'Parkwa'], + [b'pbl', b'Mak (Nigeria)'], + [b'pbn', b'Kpasam'], + [b'pbo', b'Papel'], + [b'pbp', b'Badyara'], + [b'pbr', b'Pangwa'], + [b'pbs', b'Pame, Central'], + [b'pbt', b'Pashto, Southern'], + [b'pbu', b'Pashto, Northern'], + [b'pbv', b'Pnar'], + [b'pby', b'Pyu'], + [b'pca', 'Popoloca, Santa In\xe9s Ahuatempan'], + [b'pcb', b'Pear'], + [b'pcc', b'Bouyei'], + [b'pcd', b'Picard'], + [b'pce', b'Palaung, Ruching'], + [b'pcf', b'Paliyan'], + [b'pcg', b'Paniya'], + [b'pch', b'Pardhan'], + [b'pci', b'Duruwa'], + [b'pcj', b'Parenga'], + [b'pck', b'Chin, Paite'], + [b'pcl', b'Pardhi'], + [b'pcm', b'Pidgin, Nigerian'], + [b'pcn', b'Piti'], + [b'pcp', b'Pacahuara'], + [b'pcw', b'Pyapun'], + [b'pda', b'Anam'], + [b'pdc', b'German, Pennsylvania'], + [b'pdi', b'Pa Di'], + [b'pdn', b'Podena'], + [b'pdo', b'Padoe'], + [b'pdt', b'Plautdietsch'], + [b'pdu', b'Kayan'], + [b'pea', b'Indonesian, Peranakan'], + [b'peb', b'Pomo, Eastern'], + [b'ped', b'Mala (Papua New Guinea)'], + [b'pee', b'Taje'], + [b'pef', b'Pomo, Northeastern'], + [b'peg', b'Pengo'], + [b'peh', b'Bonan'], + [b'pei', b'Chichimeca-Jonaz'], + [b'pej', b'Pomo, Northern'], + [b'pek', b'Penchal'], + [b'pel', b'Pekal'], + [b'pem', b'Phende'], + [b'peo', b'Persian, Old (ca. 600-400 B.C.)'], + [b'pep', b'Kunja'], + [b'peq', b'Pomo, Southern'], + [b'pes', b'Persian, Iranian'], + [b'pev', 'P\xe9mono'], + [b'pex', b'Petats'], + [b'pey', b'Petjo'], + [b'pez', b'Penan, Eastern'], + [b'pfa', 'P\xe1\xe1fang'], + [b'pfe', b'Peere'], + [b'pfl', b'Pfaelzisch'], + [b'pga', b'Creole Arabic, Sudanese'], + [b'pgg', b'Pangwali'], + [b'pgi', b'Pagi'], + [b'pgk', b'Rerep'], + [b'pgl', b'Irish, Primitive'], + [b'pgn', b'Paelignian'], + [b'pgs', b'Pangseng'], + [b'pgu', b'Pagu'], + [b'pha', b'Pa-Hng'], + [b'phd', b'Phudagi'], + [b'phg', b'Phuong'], + [b'phh', b'Phukha'], + [b'phk', b'Phake'], + [b'phl', b'Phalura'], + [b'phm', b'Phimbi'], + [b'phn', b'Phoenician'], + [b'pho', b'Phunoi'], + [b'phq', b"Phana'"], + [b'phr', b'Pahari-Potwari'], + [b'pht', b'Phu Thai'], + [b'phu', b'Phuan'], + [b'phv', b'Pahlavani'], + [b'phw', b'Phangduwali'], + [b'pia', b'Pima Bajo'], + [b'pib', b'Yine'], + [b'pic', b'Pinji'], + [b'pid', b'Piaroa'], + [b'pie', b'Piro'], + [b'pif', b'Pingelapese'], + [b'pig', b'Pisabo'], + [b'pih', b'Pitcairn-Norfolk'], + [b'pii', b'Pini'], + [b'pij', b'Pijao'], + [b'pil', b'Yom'], + [b'pim', b'Powhatan'], + [b'pin', b'Piame'], + [b'pio', b'Piapoco'], + [b'pip', b'Pero'], + [b'pir', b'Piratapuyo'], + [b'pis', b'Pijin'], + [b'pit', b'Pitta Pitta'], + [b'piu', b'Pintupi-Luritja'], + [b'piv', b'Pileni'], + [b'piw', b'Pimbwe'], + [b'pix', b'Piu'], + [b'piy', b'Piya-Kwonci'], + [b'piz', b'Pije'], + [b'pjt', b'Pitjantjatjara'], + [b'pka', 'Pr\u0101krit, Ardham\u0101gadh\u012b'], + [b'pkb', b'Pokomo'], + [b'pkc', b'Paekche'], + [b'pkg', b'Pak-Tong'], + [b'pkh', b'Pankhu'], + [b'pkn', b'Pakanha'], + [b'pko', 'P\xf6koot'], + [b'pkp', b'Pukapuka'], + [b'pkr', b'Kurumba, Attapady'], + [b'pks', b'Pakistan Sign Language'], + [b'pkt', b'Maleng'], + [b'pku', b'Paku'], + [b'pla', b'Miani'], + [b'plb', b'Polonombauk'], + [b'plc', b'Palawano, Central'], + [b'pld', b'Polari'], + [b'ple', b"Palu'e"], + [b'plg', 'Pilag\xe1'], + [b'plh', b'Paulohi'], + [b'pli', b'Pali'], + [b'plj', b'Polci'], + [b'plk', b'Shina, Kohistani'], + [b'pll', b'Palaung, Shwe'], + [b'pln', b'Palenquero'], + [b'plo', b'Popoluca, Oluta'], + [b'plp', b'Palpa'], + [b'plq', b'Palaic'], + [b'plr', b'Senoufo, Palaka'], + [b'pls', b'Popoloca, San Marcos Tlalcoyalco'], + [b'plt', b'Malagasy, Plateau'], + [b'plu', 'Palik\xfar'], + [b'plv', b'Palawano, Southwest'], + [b'plw', b"Palawano, Brooke's Point"], + [b'ply', b'Bolyu'], + [b'plz', b'Paluan'], + [b'pma', b'Paama'], + [b'pmb', b'Pambia'], + [b'pmc', b'Palumata'], + [b'pmd', b'Pallanganmiddang'], + [b'pme', b'Pwaamei'], + [b'pmf', b'Pamona'], + [ + b'pmh', + 'Pr\u0101krit, M\u0101h\u0101r\u0101\u1e63\u1e6dri' + ], + [b'pmi', b'Pumi, Northern'], + [b'pmj', b'Pumi, Southern'], + [b'pmk', b'Pamlico'], + [b'pml', b'Lingua Franca'], + [b'pmm', b'Pomo'], + [b'pmn', b'Pam'], + [b'pmo', b'Pom'], + [b'pmq', b'Pame, Northern'], + [b'pmr', b'Paynamar'], + [b'pms', b'Piemontese'], + [b'pmt', b'Tuamotuan'], + [b'pmu', b'Panjabi, Mirpur'], + [b'pmw', b'Miwok, Plains'], + [b'pmx', b'Naga, Poumei'], + [b'pmy', b'Malay, Papuan'], + [b'pmz', b'Pame, Southern'], + [b'pna', b'Punan Bah-Biau'], + [b'pnb', b'Panjabi, Western'], + [b'pnc', b'Pannei'], + [b'pne', b'Penan, Western'], + [b'png', b'Pongu'], + [b'pnh', b'Penrhyn'], + [b'pni', b'Aoheng'], + [b'pnj', b'Pinjarup'], + [b'pnk', b'Paunaka'], + [b'pnl', b'Paleni'], + [b'pnm', b'Punan Batu 1'], + [b'pnn', b'Pinai-Hagahai'], + [b'pno', b'Panobo'], + [b'pnp', b'Pancana'], + [b'pnq', b'Pana (Burkina Faso)'], + [b'pnr', b'Panim'], + [b'pns', b'Ponosakan'], + [b'pnt', b'Pontic'], + [b'pnu', b'Bunu, Jiongnai'], + [b'pnv', b'Pinigura'], + [b'pnw', b'Panytyima'], + [b'pnx', b'Phong-Kniang'], + [b'pny', b'Pinyin'], + [b'pnz', b'Pana (Central African Republic)'], + [b'poc', b'Poqomam'], + [b'pod', b'Ponares'], + [b'poe', b'Popoloca, San Juan Atzingo'], + [b'pof', b'Poke'], + [b'pog', 'Potigu\xe1ra'], + [b'poh', b"Poqomchi'"], + [b'poi', b'Popoluca, Highland'], + [b'pok', 'Pokang\xe1'], + [b'pol', b'Polish'], + [b'pom', b'Pomo, Southeastern'], + [b'pon', b'Pohnpeian'], + [b'poo', b'Pomo, Central'], + [b'pop', 'Pwapw\xe2'], + [b'poq', b'Popoluca, Texistepec'], + [b'por', b'Portuguese'], + [b'pos', b'Popoluca, Sayula'], + [b'pot', b'Potawatomi'], + [b'pov', b'Crioulo, Upper Guinea'], + [b'pow', b'Popoloca, San Felipe Otlaltepec'], + [b'pox', b'Polabian'], + [b'poy', b'Pogolo'], + [b'ppa', b'Pao'], + [b'ppe', b'Papi'], + [b'ppi', b'Paipai'], + [b'ppk', b'Uma'], + [b'ppl', b'Pipil'], + [b'ppm', b'Papuma'], + [b'ppn', b'Papapana'], + [b'ppo', b'Folopa'], + [b'ppp', b'Pelende'], + [b'ppq', b'Pei'], + [b'pps', 'Popoloca, San Lu\xeds Temalacayuca'], + [b'ppt', b'Pare'], + [b'ppu', b'Papora'], + [b'pqa', b"Pa'a"], + [b'pqm', b'Malecite-Passamaquoddy'], + [b'prb', b"Lua'"], + [b'prc', b'Parachi'], + [b'prd', b'Parsi-Dari'], + [b'pre', b'Principense'], + [b'prf', b'Paranan'], + [b'prg', b'Prussian'], + [b'prh', b'Porohanon'], + [b'pri', 'Paic\xee'], + [b'prk', b'Parauk'], + [b'prl', b'Peruvian Sign Language'], + [b'prm', b'Kibiri'], + [b'prn', b'Prasuni'], + [b'pro', 'Proven\xe7al, Old (to 1500)'], + [b'prp', b'Parsi'], + [b'prq', 'Ash\xe9ninka Peren\xe9'], + [b'prr', b'Puri'], + [b'prs', b'Dari'], + [b'prt', b'Phai'], + [b'pru', b'Puragi'], + [b'prw', b'Parawen'], + [b'prx', b'Purik'], + [b'pry', b'Pray 3'], + [b'prz', b'Providencia Sign Language'], + [b'psa', b'Awyu, Asue'], + [b'psc', b'Persian Sign Language'], + [b'psd', b'Plains Indian Sign Language'], + [b'pse', b'Malay, Central'], + [b'psg', b'Penang Sign Language'], + [b'psh', b'Pashayi, Southwest'], + [b'psi', b'Pashayi, Southeast'], + [b'psl', b'Puerto Rican Sign Language'], + [b'psm', b'Pauserna'], + [b'psn', b'Panasuan'], + [b'pso', b'Polish Sign Language'], + [b'psp', b'Philippine Sign Language'], + [b'psq', b'Pasi'], + [b'psr', b'Portuguese Sign Language'], + [b'pss', b'Kaulong'], + [b'pst', b'Pashto, Central'], + [b'psu', 'Pr\u0101krit, Sauraseni'], + [b'psw', b'Port Sandwich'], + [b'psy', b'Piscataway'], + [b'pta', b'Pai Tavytera'], + [b'pth', 'Patax\xf3 H\xe3-Ha-H\xe3e'], + [b'pti', b'Pintiini'], + [b'ptn', b'Patani'], + [b'pto', "Zo'\xe9"], + [b'ptp', b'Patep'], + [b'ptr', b'Piamatsina'], + [b'ptt', b'Enrekang'], + [b'ptu', b'Bambam'], + [b'ptv', b'Port Vato'], + [b'ptw', b'Pentlatch'], + [b'pty', b'Pathiya'], + [b'pua', b'Purepecha, Western Highland'], + [b'pub', b'Purum'], + [b'puc', b'Punan Merap'], + [b'pud', b'Punan Aput'], + [b'pue', b'Puelche'], + [b'puf', b'Punan Merah'], + [b'pug', b'Phuie'], + [b'pui', b'Puinave'], + [b'puj', b'Punan Tubu'], + [b'puk', b'Pu Ko'], + [b'pum', b'Puma'], + [b'puo', b'Puoc'], + [b'pup', b'Pulabu'], + [b'puq', b'Puquina'], + [b'pur', 'Purubor\xe1'], + [b'pus', b'Pushto'], + [b'put', b'Putoh'], + [b'puu', b'Punu'], + [b'puw', b'Puluwatese'], + [b'pux', b'Puare'], + [b'puy', 'Purisime\xf1o'], + [b'puz', b'Naga, Purum'], + [b'pwa', b'Pawaia'], + [b'pwb', b'Panawa'], + [b'pwg', b'Gapapaiwa'], + [b'pwi', b'Patwin'], + [b'pwm', b'Molbog'], + [b'pwn', b'Paiwan'], + [b'pwo', b'Karen, Pwo Western'], + [b'pwr', b'Powari'], + [b'pww', b'Karen, Pwo Northern'], + [b'pxm', b'Mixe, Quetzaltepec'], + [b'pye', b'Krumen, Pye'], + [b'pym', b'Fyam'], + [b'pyn', 'Poyan\xe1wa'], + [b'pys', b'Paraguayan Sign Language'], + [b'pyu', b'Puyuma'], + [b'pyx', b'Pyu (Myanmar)'], + [b'pyy', b'Pyen'], + [b'pzn', b'Naga, Para'], + [b'qua', b'Quapaw'], + [b'qub', 'Quechua, Huallaga Hu\xe1nuco'], + [b'quc', b"K'iche'"], + [b'qud', 'Quichua, Calder\xf3n Highland'], + [b'que', b'Quechua'], + [b'quf', b'Quechua, Lambayeque'], + [b'qug', b'Quichua, Chimborazo Highland'], + [b'quh', b'Quechua, South Bolivian'], + [b'qui', b'Quileute'], + [b'quk', b'Quechua, Chachapoyas'], + [b'qul', b'Quechua, North Bolivian'], + [b'qum', b'Sipacapense'], + [b'qun', b'Quinault'], + [b'qup', b'Quechua, Southern Pastaza'], + [b'quq', b'Quinqui'], + [b'qur', b'Quechua, Yanahuanca Pasco'], + [b'qus', b'Quichua, Santiago del Estero'], + [b'quv', b'Sacapulteco'], + [b'quw', b'Quichua, Tena Lowland'], + [b'qux', b'Quechua, Yauyos'], + [b'quy', b'Quechua, Ayacucho'], + [b'quz', b'Quechua, Cusco'], + [b'qva', b'Quechua, Ambo-Pasco'], + [b'qvc', b'Quechua, Cajamarca'], + [b'qve', 'Quechua, Eastern Apur\xedmac'], + [b'qvh', 'Quechua, Huamal\xedes-Dos de Mayo Hu\xe1nuco'], + [b'qvi', b'Quichua, Imbabura Highland'], + [b'qvj', b'Quichua, Loja Highland'], + [b'qvl', b'Quechua, Cajatambo North Lima'], + [b'qvm', b'Quechua, Margos-Yarowilca-Lauricocha'], + [b'qvn', 'Quechua, North Jun\xedn'], + [b'qvo', b'Quechua, Napo Lowland'], + [b'qvp', b'Quechua, Pacaraos'], + [b'qvs', 'Quechua, San Mart\xedn'], + [b'qvw', b'Quechua, Huaylla Wanca'], + [b'qvy', b'Queyu'], + [b'qvz', b'Quichua, Northern Pastaza'], + [b'qwa', b'Quechua, Corongo Ancash'], + [b'qwc', b'Quechua, Classical'], + [b'qwh', b'Quechua, Huaylas Ancash'], + [b'qwm', b'Kuman (Russia)'], + [b'qws', b'Quechua, Sihuas Ancash'], + [b'qwt', b'Kwalhioqua-Tlatskanai'], + [b'qxa', 'Quechua, Chiqui\xe1n Ancash'], + [b'qxc', b'Quechua, Chincha'], + [b'qxh', 'Quechua, Panao Hu\xe1nuco'], + [b'qxl', b'Quichua, Salasaca Highland'], + [b'qxn', b'Quechua, Northern Conchucos Ancash'], + [b'qxo', b'Quechua, Southern Conchucos Ancash'], + [b'qxp', b'Quechua, Puno'], + [b'qxq', b"Qashqa'i"], + [b'qxr', 'Quichua, Ca\xf1ar Highland'], + [b'qxs', b'Qiang, Southern'], + [b'qxt', b'Quechua, Santa Ana de Tusi Pasco'], + [b'qxu', 'Quechua, Arequipa-La Uni\xf3n'], + [b'qxw', b'Quechua, Jauja Wanca'], + [b'qya', b'Quenya'], + [b'qyp', b'Quiripi'], + [b'raa', b'Dungmali'], + [b'rab', b'Camling'], + [b'rac', b'Rasawa'], + [b'rad', b'Rade'], + [b'raf', b'Meohang, Western'], + [b'rag', b'Logooli'], + [b'rah', b'Rabha'], + [b'rai', b'Ramoaaina'], + [b'raj', b'Rajasthani'], + [b'rak', b'Tulu-Bohuai'], + [b'ral', b'Ralte'], + [b'ram', b'Canela'], + [b'ran', b'Riantana'], + [b'rao', b'Rao'], + [b'rap', b'Rapanui'], + [b'raq', b'Saam'], + [b'rar', b'Rarotongan'], + [b'ras', b'Tegali'], + [b'rat', b'Razajerdi'], + [b'rau', b'Raute'], + [b'rav', b'Sampang'], + [b'raw', b'Rawang'], + [b'rax', b'Rang'], + [b'ray', b'Rapa'], + [b'raz', b'Rahambuu'], + [b'rbb', b'Palaung, Rumai'], + [b'rbk', b'Bontok, Northern'], + [b'rbl', b'Bikol, Miraya'], + [b'rbp', b'Barababaraba'], + [b'rcf', 'Creole French, R\xe9union'], + [b'rdb', b'Rudbari'], + [b'rea', b'Rerau'], + [b'reb', b'Rembong'], + [b'ree', b'Kayan, Rejang'], + [b'reg', b'Kara (Tanzania)'], + [b'rei', b'Reli'], + [b'rej', b'Rejang'], + [b'rel', b'Rendille'], + [b'rem', b'Remo'], + [b'ren', b'Rengao'], + [b'rer', b'Rer Bare'], + [b'res', b'Reshe'], + [b'ret', b'Retta'], + [b'rey', b'Reyesano'], + [b'rga', b'Roria'], + [b'rge', b'Romano-Greek'], + [b'rgk', b'Rangkas'], + [b'rgn', b'Romagnol'], + [b'rgr', 'Res\xedgaro'], + [b'rgs', b'Roglai, Southern'], + [b'rgu', b'Ringgou'], + [b'rhg', b'Rohingya'], + [b'rhp', b'Yahang'], + [b'ria', b'Riang (India)'], + [b'rie', b'Rien'], + [b'rif', b'Tarifit'], + [b'ril', b'Riang (Myanmar)'], + [b'rim', b'Nyaturu'], + [b'rin', b'Nungu'], + [b'rir', b'Ribun'], + [b'rit', b'Ritarungo'], + [b'riu', b'Riung'], + [b'rjg', b'Rajong'], + [b'rji', b'Raji'], + [b'rjs', b'Rajbanshi'], + [b'rka', b'Kraol'], + [b'rkb', b'Rikbaktsa'], + [b'rkh', b'Rakahanga-Manihiki'], + [b'rki', b'Rakhine'], + [b'rkm', b'Marka'], + [b'rkt', b'Rangpuri'], + [b'rkw', b'Arakwal'], + [b'rma', b'Rama'], + [b'rmb', b'Rembarunga'], + [b'rmc', b'Romani, Carpathian'], + [b'rmd', b'Danish, Traveller'], + [b'rme', b'Angloromani'], + [b'rmf', b'Romani, Kalo Finnish'], + [b'rmg', b'Norwegian, Traveller'], + [b'rmh', b'Murkim'], + [b'rmi', b'Lomavren'], + [b'rmk', b'Romkun'], + [b'rml', b'Romani, Baltic'], + [b'rmm', b'Roma'], + [b'rmn', b'Romani, Balkan'], + [b'rmo', b'Romani, Sinte'], + [b'rmp', b'Rempi'], + [b'rmq', 'Cal\xf3'], + [b'rms', b'Romanian Sign Language'], + [b'rmt', b'Domari'], + [b'rmu', b'Romani, Tavringer'], + [b'rmv', b'Romanova'], + [b'rmw', b'Romani, Welsh'], + [b'rmx', b'Romam'], + [b'rmy', b'Romani, Vlax'], + [b'rmz', b'Marma'], + [b'rna', b'Runa'], + [b'rnd', b'Ruund'], + [b'rng', b'Ronga'], + [b'rnl', b'Ranglong'], + [b'rnn', b'Roon'], + [b'rnp', b'Rongpo'], + [b'rnr', b'Nari Nari'], + [b'rnw', b'Rungwa'], + [b'rob', b"Tae'"], + [b'roc', b'Roglai, Cacgia'], + [b'rod', b'Rogo'], + [b'roe', b'Ronji'], + [b'rof', b'Rombo'], + [b'rog', b'Roglai, Northern'], + [b'roh', b'Romansh'], + [b'rol', b'Romblomanon'], + [b'rom', b'Romany'], + [b'ron', b'Romanian'], + [b'roo', b'Rotokas'], + [b'rop', b'Kriol'], + [b'ror', b'Rongga'], + [b'rou', b'Runga'], + [b'row', b'Dela-Oenale'], + [b'rpn', b'Repanbitip'], + [b'rpt', b'Rapting'], + [b'rri', b'Ririo'], + [b'rro', b'Waima'], + [b'rrt', b'Arritinngithigh'], + [b'rsb', b'Romano-Serbian'], + [b'rsi', b'Rennellese Sign Language'], + [b'rsl', b'Russian Sign Language'], + [b'rtc', b'Chin, Rungtu'], + [b'rth', b'Ratahan'], + [b'rtm', b'Rotuman'], + [b'rtw', b'Rathawi'], + [b'rub', b'Gungu'], + [b'ruc', b'Ruuli'], + [b'rue', b'Rusyn'], + [b'ruf', b'Luguru'], + [b'rug', b'Roviana'], + [b'ruh', b'Ruga'], + [b'rui', b'Rufiji'], + [b'ruk', b'Che'], + [b'run', b'Rundi'], + [b'ruo', b'Romanian, Istro'], + [b'rup', b'Romanian, Macedo-'], + [b'ruq', b'Romanian, Megleno'], + [b'rus', b'Russian'], + [b'rut', b'Rutul'], + [b'ruu', b'Lobu, Lanas'], + [b'ruy', b'Mala (Nigeria)'], + [b'ruz', b'Ruma'], + [b'rwa', b'Rawo'], + [b'rwk', b'Rwa'], + [b'rwm', b'Amba (Uganda)'], + [b'rwo', b'Rawa'], + [b'rwr', b'Marwari (India)'], + [b'rxd', b'Ngardi'], + [b'rxw', b'Karuwali'], + [b'ryn', b'Amami-Oshima, Northern'], + [b'rys', b'Yaeyama'], + [b'ryu', b'Okinawan, Central'], + [b'saa', b'Saba'], + [b'sab', b'Buglere'], + [b'sac', b'Meskwaki'], + [b'sad', b'Sandawe'], + [b'sae', 'Saban\xea'], + [b'saf', b'Safaliba'], + [b'sag', b'Sango'], + [b'sah', b'Yakut'], + [b'saj', b'Sahu'], + [b'sak', b'Sake'], + [b'sam', b'Aramaic, Samaritan'], + [b'san', b'Sanskrit'], + [b'sao', b'Sause'], + [b'sap', 'Sanapan\xe1'], + [b'saq', b'Samburu'], + [b'sar', b'Saraveca'], + [b'sas', b'Sasak'], + [b'sat', b'Santali'], + [b'sau', b'Saleman'], + [b'sav', b'Saafi-Saafi'], + [b'saw', b'Sawi'], + [b'sax', b'Sa'], + [b'say', b'Saya'], + [b'saz', b'Saurashtra'], + [b'sba', b'Ngambay'], + [b'sbb', b'Simbo'], + [b'sbc', b'Kele (Papua New Guinea)'], + [b'sbd', b'Samo, Southern'], + [b'sbe', b'Saliba'], + [b'sbf', b'Shabo'], + [b'sbg', b'Seget'], + [b'sbh', b'Sori-Harengan'], + [b'sbi', b'Seti'], + [b'sbj', b'Surbakhal'], + [b'sbk', b'Safwa'], + [b'sbl', b'Sambal, Botolan'], + [b'sbm', b'Sagala'], + [b'sbn', b'Bhil, Sindhi'], + [b'sbo', 'Sab\xfcm'], + [b'sbp', b'Sangu (Tanzania)'], + [b'sbq', b'Sileibi'], + [b'sbr', b'Sembakung Murut'], + [b'sbs', b'Subiya'], + [b'sbt', b'Kimki'], + [b'sbu', b'Bhoti, Stod'], + [b'sbv', b'Sabine'], + [b'sbw', b'Simba'], + [b'sbx', b'Seberuang'], + [b'sby', b'Soli'], + [b'sbz', b'Sara Kaba'], + [b'scb', b'Chut'], + [b'sce', b'Dongxiang'], + [b'scf', b'Creole French, San Miguel'], + [b'scg', b'Sanggau'], + [b'sch', b'Sakachep'], + [b'sci', b'Creole Malay, Sri Lankan'], + [b'sck', b'Sadri'], + [b'scl', b'Shina'], + [b'scn', b'Sicilian'], + [b'sco', b'Scots'], + [b'scp', b'Helambu Sherpa'], + [b'scq', b"Sa'och"], + [b'scs', b'Slavey, North'], + [b'scu', b'Shumcho'], + [b'scv', b'Sheni'], + [b'scw', b'Sha'], + [b'scx', b'Sicel'], + [b'sda', b"Toraja-Sa'dan"], + [b'sdb', b'Shabak'], + [b'sdc', b'Sardinian, Sassarese'], + [b'sde', b'Surubu'], + [b'sdf', b'Sarli'], + [b'sdg', b'Savi'], + [b'sdh', b'Kurdish, Southern'], + [b'sdj', b'Suundi'], + [b'sdk', b'Sos Kundi'], + [b'sdl', b'Saudi Arabian Sign Language'], + [b'sdm', b'Semandang'], + [b'sdn', b'Sardinian, Gallurese'], + [b'sdo', b'Bidayuh, Bukar-Sadung'], + [b'sdp', b'Sherdukpen'], + [b'sdr', b'Sadri, Oraon'], + [b'sds', b'Sened'], + [b'sdt', b'Shuadit'], + [b'sdu', b'Sarudu'], + [b'sdx', b'Melanau, Sibu'], + [b'sdz', b'Sallands'], + [b'sea', b'Semai'], + [b'seb', b'Senoufo, Shempire'], + [b'sec', b'Sechelt'], + [b'sed', b'Sedang'], + [b'see', b'Seneca'], + [b'sef', b'Senoufo, Cebaara'], + [b'seg', b'Segeju'], + [b'seh', b'Sena'], + [b'sei', b'Seri'], + [b'sej', b'Sene'], + [b'sek', b'Sekani'], + [b'sel', b'Selkup'], + [b'sen', 'S\xe9noufo, Nanerig\xe9'], + [b'seo', b'Suarmin'], + [b'sep', 'S\xe9noufo, S\xecc\xect\xe9'], + [b'seq', 'S\xe9noufo, Senara'], + [b'ser', b'Serrano'], + [b'ses', b'Songhai, Koyraboro Senni'], + [b'set', b'Sentani'], + [b'seu', b'Serui-Laut'], + [b'sev', b'Senoufo, Nyarafolo'], + [b'sew', b'Sewa Bay'], + [b'sey', b'Secoya'], + [b'sez', b'Chin, Senthang'], + [b'sfb', b'Langue des signes de Belgique Francophone'], + [b'sfe', b'Subanen, Eastern'], + [b'sfm', b'Miao, Small Flowery'], + [b'sfs', b'South African Sign Language'], + [b'sfw', b'Sehwi'], + [b'sga', b'Irish, Old (to 900)'], + [b'sgb', b'Ayta, Mag-antsi'], + [b'sgc', b'Kipsigis'], + [b'sgd', b'Surigaonon'], + [b'sge', b'Segai'], + [b'sgg', b'Swiss-German Sign Language'], + [b'sgh', b'Shughni'], + [b'sgi', b'Suga'], + [b'sgj', b'Surgujia'], + [b'sgk', b'Sangkong'], + [b'sgm', b'Singa'], + [b'sgo', b'Songa'], + [b'sgp', b'Singpho'], + [b'sgr', b'Sangisari'], + [b'sgs', b'Samogitian'], + [b'sgt', b'Brokpake'], + [b'sgu', b'Salas'], + [b'sgw', b'Sebat Bet Gurage'], + [b'sgx', b'Sierra Leone Sign Language'], + [b'sgy', b'Sanglechi'], + [b'sgz', b'Sursurunga'], + [b'sha', b'Shall-Zwall'], + [b'shb', b'Ninam'], + [b'shc', b'Sonde'], + [b'shd', b'Kundal Shahi'], + [b'she', b'Sheko'], + [b'shg', b'Shua'], + [b'shh', b'Shoshoni'], + [b'shi', b'Tachelhit'], + [b'shj', b'Shatt'], + [b'shk', b'Shilluk'], + [b'shl', b'Shendu'], + [b'shm', b'Shahrudi'], + [b'shn', b'Shan'], + [b'sho', b'Shanga'], + [b'shp', b'Shipibo-Conibo'], + [b'shq', b'Sala'], + [b'shr', b'Shi'], + [b'shs', b'Shuswap'], + [b'sht', b'Shasta'], + [b'shu', b'Arabic, Chadian'], + [b'shv', b'Shehri'], + [b'shw', b'Shwai'], + [b'shx', b'She'], + [b'shy', b'Tachawit'], + [b'shz', b'Senoufo, Syenara'], + [b'sia', b'Sami, Akkala'], + [b'sib', b'Sebop'], + [b'sid', b'Sidamo'], + [b'sie', b'Simaa'], + [b'sif', b'Siamou'], + [b'sig', b'Paasaal'], + [b'sih', b'Zire'], + [b'sii', b'Shom Peng'], + [b'sij', b'Numbami'], + [b'sik', b'Sikiana'], + [b'sil', b'Sisaala, Tumulung'], + [b'sim', b'Mende (Papua New Guinea)'], + [b'sin', b'Sinhala'], + [b'sip', b'Sikkimese'], + [b'siq', b'Sonia'], + [b'sir', b'Siri'], + [b'sis', b'Siuslaw'], + [b'siu', b'Sinagen'], + [b'siv', b'Sumariup'], + [b'siw', b'Siwai'], + [b'six', b'Sumau'], + [b'siy', b'Sivandi'], + [b'siz', b'Siwi'], + [b'sja', b'Epena'], + [b'sjb', b'Sajau Basap'], + [b'sjd', b'Sami, Kildin'], + [b'sje', b'Sami, Pite'], + [b'sjg', b'Assangori'], + [b'sjk', b'Sami, Kemi'], + [b'sjl', b'Sajalong'], + [b'sjm', b'Mapun'], + [b'sjn', b'Sindarin'], + [b'sjo', b'Xibe'], + [b'sjp', b'Surjapuri'], + [b'sjr', b'Siar-Lak'], + [b'sjs', b'Senhaja De Srair'], + [b'sjt', b'Sami, Ter'], + [b'sju', b'Sami, Ume'], + [b'sjw', b'Shawnee'], + [b'ska', b'Skagit'], + [b'skb', b'Saek'], + [b'skc', b'Ma Manda'], + [b'skd', b'Miwok, Southern Sierra'], + [b'ske', b'Seke (Vanuatu)'], + [b'skf', 'Sakirabi\xe1'], + [b'skg', b'Malagasy, Sakalava'], + [b'skh', b'Sikule'], + [b'ski', b'Sika'], + [b'skj', b'Seke (Nepal)'], + [b'skk', b'Sok'], + [b'skm', b'Kutong'], + [b'skn', b'Subanon, Kolibugan'], + [b'sko', b'Seko Tengah'], + [b'skp', b'Sekapan'], + [b'skq', b'Sininkere'], + [b'skr', b'Seraiki'], + [b'sks', b'Maia'], + [b'skt', b'Sakata'], + [b'sku', b'Sakao'], + [b'skv', b'Skou'], + [b'skw', b'Creole Dutch, Skepi'], + [b'skx', b'Seko Padang'], + [b'sky', b'Sikaiana'], + [b'skz', b'Sekar'], + [b'slc', 'S\xe1liba'], + [b'sld', b'Sissala'], + [b'sle', b'Sholaga'], + [b'slf', b'Swiss-Italian Sign Language'], + [b'slg', b'Selungai Murut'], + [b'slh', b'Salish, Southern Puget Sound'], + [b'sli', b'Silesian, Lower'], + [b'slj', 'Salum\xe1'], + [b'slk', b'Slovak'], + [b'sll', b'Salt-Yui'], + [b'slm', b'Sama, Pangutaran'], + [b'sln', b'Salinan'], + [b'slp', b'Lamaholot'], + [b'slq', b'Salchuq'], + [b'slr', b'Salar'], + [b'sls', b'Singapore Sign Language'], + [b'slt', b'Sila'], + [b'slu', b'Selaru'], + [b'slv', b'Slovenian'], + [b'slw', b'Sialum'], + [b'slx', b'Salampasu'], + [b'sly', b'Selayar'], + [b'slz', b"Ma'ya"], + [b'sma', b'Sami, Southern'], + [b'smb', b'Simbari'], + [b'smc', b'Som'], + [b'smd', b'Sama'], + [b'sme', b'Sami, Northern'], + [b'smf', b'Auwe'], + [b'smg', b'Simbali'], + [b'smh', b'Samei'], + [b'smj', b'Lule Sami'], + [b'smk', b'Bolinao'], + [b'sml', b'Sama, Central'], + [b'smm', b'Musasa'], + [b'smn', b'Sami, Inari'], + [b'smo', b'Samoan'], + [b'smp', b'Samaritan'], + [b'smq', b'Samo'], + [b'smr', b'Simeulue'], + [b'sms', b'Sami, Skolt'], + [b'smt', b'Simte'], + [b'smu', b'Somray'], + [b'smv', b'Samvedi'], + [b'smw', b'Sumbawa'], + [b'smx', b'Samba'], + [b'smy', b'Semnani'], + [b'smz', b'Simeku'], + [b'sna', b'Shona'], + [b'snb', b'Sebuyau'], + [b'snc', b'Sinaugoro'], + [b'snd', b'Sindhi'], + [b'sne', b'Bidayuh, Bau'], + [b'snf', b'Noon'], + [b'sng', b'Sanga (Democratic Republic of Congo)'], + [b'snh', b'Shinabo'], + [b'sni', b'Sensi'], + [b'snj', b'Sango, Riverain'], + [b'snk', b'Soninke'], + [b'snl', b'Sangil'], + [b'snm', b"Ma'di, Southern"], + [b'snn', b'Siona'], + [b'sno', b'Snohomish'], + [b'snp', b'Siane'], + [b'snq', b'Sangu (Gabon)'], + [b'snr', b'Sihan'], + [b'sns', b'South West Bay'], + [b'snu', b'Senggi'], + [b'snv', b"Sa'ban"], + [b'snw', b'Selee'], + [b'snx', b'Sam'], + [b'sny', b'Saniyo-Hiyewe'], + [b'snz', b'Sinsauru'], + [b'soa', b'Thai Song'], + [b'sob', b'Sobei'], + [b'soc', b'So (Democratic Republic of Congo)'], + [b'sod', b'Songoora'], + [b'soe', b'Songomeno'], + [b'sog', b'Sogdian'], + [b'soh', b'Aka'], + [b'soi', b'Sonha'], + [b'soj', b'Soi'], + [b'sok', b'Sokoro'], + [b'sol', b'Solos'], + [b'som', b'Somali'], + [b'soo', b'Songo'], + [b'sop', b'Songe'], + [b'soq', b'Kanasi'], + [b'sor', b'Somrai'], + [b'sos', b'Seeku'], + [b'sot', b'Sotho, Southern'], + [b'sou', b'Thai, Southern'], + [b'sov', b'Sonsorol'], + [b'sow', b'Sowanda'], + [b'sox', b'Swo'], + [b'soy', b'Miyobe'], + [b'soz', b'Temi'], + [b'spa', b'Spanish'], + [b'spb', b'Sepa (Indonesia)'], + [b'spc', 'Sap\xe9'], + [b'spd', b'Saep'], + [b'spe', b'Sepa (Papua New Guinea)'], + [b'spg', b'Sian'], + [b'spi', b'Saponi'], + [b'spk', b'Sengo'], + [b'spl', b'Selepet'], + [b'spm', b'Akukem'], + [b'spo', b'Spokane'], + [b'spp', b'Senoufo, Supyire'], + [b'spq', b'Spanish, Loreto-Ucayali'], + [b'spr', b'Saparua'], + [b'sps', b'Saposa'], + [b'spt', b'Bhoti, Spiti'], + [b'spu', b'Sapuan'], + [b'spv', b'Sambalpuri'], + [b'spx', b'Picene, South'], + [b'spy', b'Sabaot'], + [b'sqa', b'Shama-Sambuga'], + [b'sqh', b'Shau'], + [b'sqi', b'Albanian'], + [b'sqk', b'Albanian Sign Language'], + [b'sqm', b'Suma'], + [b'sqn', b'Susquehannock'], + [b'sqo', b'Sorkhei'], + [b'sqq', b'Sou'], + [b'sqr', b'Arabic, Siculo'], + [b'sqs', b'Sri Lankan Sign Language'], + [b'sqt', b'Soqotri'], + [b'squ', b'Squamish'], + [b'sra', b'Saruga'], + [b'srb', b'Sora'], + [b'src', b'Sardinian, Logudorese'], + [b'srd', b'Sardinian'], + [b'sre', b'Sara'], + [b'srf', b'Nafi'], + [b'srg', b'Sulod'], + [b'srh', b'Sarikoli'], + [b'sri', b'Siriano'], + [b'srk', b'Serudung Murut'], + [b'srl', b'Isirawa'], + [b'srm', b'Saramaccan'], + [b'srn', b'Sranan Tongo'], + [b'sro', b'Sardinian, Campidanese'], + [b'srp', b'Serbian'], + [b'srq', 'Sirion\xf3'], + [b'srr', b'Serer'], + [b'srs', b'Sarsi'], + [b'srt', b'Sauri'], + [b'sru', 'Suru\xed'], + [b'srv', b'Sorsoganon, Southern'], + [b'srw', b'Serua'], + [b'srx', b'Sirmauri'], + [b'sry', b'Sera'], + [b'srz', b'Shahmirzadi'], + [b'ssb', b'Sama, Southern'], + [b'ssc', b'Suba-Simbiti'], + [b'ssd', b'Siroi'], + [b'sse', b'Balangingi'], + [b'ssf', b'Thao'], + [b'ssg', b'Seimat'], + [b'ssh', b'Arabic, Shihhi'], + [b'ssi', b'Sansi'], + [b'ssj', b'Sausi'], + [b'ssk', b'Sunam'], + [b'ssl', b'Sisaala, Western'], + [b'ssm', b'Semnam'], + [b'ssn', b'Waata'], + [b'sso', b'Sissano'], + [b'ssp', b'Spanish Sign Language'], + [b'ssq', b"So'a"], + [b'ssr', b'Swiss-French Sign Language'], + [b'sss', 'S\xf4'], + [b'sst', b'Sinasina'], + [b'ssu', b'Susuami'], + [b'ssv', b'Shark Bay'], + [b'ssw', b'Swati'], + [b'ssx', b'Samberigi'], + [b'ssy', b'Saho'], + [b'ssz', b'Sengseng'], + [b'sta', b'Settla'], + [b'stb', b'Subanen, Northern'], + [b'std', b'Sentinel'], + [b'ste', b'Liana-Seti'], + [b'stf', b'Seta'], + [b'stg', b'Trieng'], + [b'sth', b'Shelta'], + [b'sti', b'Stieng, Bulo'], + [b'stj', b'Samo, Matya'], + [b'stk', b'Arammba'], + [b'stl', b'Stellingwerfs'], + [b'stm', b'Setaman'], + [b'stn', b'Owa'], + [b'sto', b'Stoney'], + [b'stp', b'Tepehuan, Southeastern'], + [b'stq', b'Saterfriesisch'], + [b'str', b'Salish, Straits'], + [b'sts', b'Shumashti'], + [b'stt', b'Stieng, Budeh'], + [b'stu', b'Samtao'], + [b'stv', b"Silt'e"], + [b'stw', b'Satawalese'], + [b'sty', b'Tatar, Siberian'], + [b'sua', b'Sulka'], + [b'sub', b'Suku'], + [b'suc', b'Subanon, Western'], + [b'sue', b'Suena'], + [b'sug', b'Suganga'], + [b'sui', b'Suki'], + [b'suj', b'Shubi'], + [b'suk', b'Sukuma'], + [b'sun', b'Sundanese'], + [b'suq', b'Suri'], + [b'sur', b'Mwaghavul'], + [b'sus', b'Susu'], + [b'sut', b'Subtiaba'], + [b'suv', b'Puroik'], + [b'suw', b'Sumbwa'], + [b'sux', b'Sumerian'], + [b'suy', 'Suy\xe1'], + [b'suz', b'Sunwar'], + [b'sva', b'Svan'], + [b'svb', b'Ulau-Suain'], + [b'svc', b'Creole English, Vincentian'], + [b'sve', b'Serili'], + [b'svk', b'Slovakian Sign Language'], + [b'svm', b'Slavomolisano'], + [b'svr', b'Savara'], + [b'svs', b'Savosavo'], + [b'svx', b'Skalvian'], + [b'swa', b'Swahili (macrolanguage)'], + [b'swb', b'Comorian, Maore'], + [b'swc', b'Swahili, Congo'], + [b'swe', b'Swedish'], + [b'swf', b'Sere'], + [b'swg', b'Swabian'], + [b'swh', b'Swahili (individual language)'], + [b'swi', b'Sui'], + [b'swj', b'Sira'], + [b'swk', b'Sena, Malawi'], + [b'swl', b'Swedish Sign Language'], + [b'swm', b'Samosa'], + [b'swn', b'Sawknah'], + [b'swo', b'Shanenawa'], + [b'swp', b'Suau'], + [b'swq', b'Sharwa'], + [b'swr', b'Saweru'], + [b'sws', b'Seluwasan'], + [b'swt', b'Sawila'], + [b'swu', b'Suwawa'], + [b'swv', b'Shekhawati'], + [b'sww', b'Sowa'], + [b'swx', 'Suruah\xe1'], + [b'swy', b'Sarua'], + [b'sxb', b'Suba'], + [b'sxc', b'Sicanian'], + [b'sxe', b'Sighu'], + [b'sxg', b'Shixing'], + [b'sxk', b'Kalapuya, Southern'], + [b'sxl', b'Selian'], + [b'sxm', b'Samre'], + [b'sxn', b'Sangir'], + [b'sxo', b'Sorothaptic'], + [b'sxr', b'Saaroa'], + [b'sxs', b'Sasaru'], + [b'sxu', b'Saxon, Upper'], + [b'sxw', b'Gbe, Saxwe'], + [b'sya', b'Siang'], + [b'syb', b'Subanen, Central'], + [b'syc', b'Syriac, Classical'], + [b'syi', b'Seki'], + [b'syk', b'Sukur'], + [b'syl', b'Sylheti'], + [b'sym', b'Samo, Maya'], + [b'syn', b'Senaya'], + [b'syo', b'Suoy'], + [b'syr', b'Syriac'], + [b'sys', b'Sinyar'], + [b'syw', b'Kagate'], + [b'syy', b'Al-Sayyid Bedouin Sign Language'], + [b'sza', b'Semelai'], + [b'szb', b'Ngalum'], + [b'szc', b'Semaq Beri'], + [b'szd', b'Seru'], + [b'sze', b'Seze'], + [b'szg', b'Sengele'], + [b'szl', b'Silesian'], + [b'szn', b'Sula'], + [b'szp', b'Suabo'], + [b'szv', b'Isu (Fako Division)'], + [b'szw', b'Sawai'], + [b'taa', b'Tanana, Lower'], + [b'tab', b'Tabassaran'], + [b'tac', b'Tarahumara, Lowland'], + [b'tad', b'Tause'], + [b'tae', b'Tariana'], + [b'taf', 'Tapirap\xe9'], + [b'tag', b'Tagoi'], + [b'tah', b'Tahitian'], + [b'taj', b'Tamang, Eastern'], + [b'tak', b'Tala'], + [b'tal', b'Tal'], + [b'tam', b'Tamil'], + [b'tan', b'Tangale'], + [b'tao', b'Yami'], + [b'tap', b'Taabwa'], + [b'taq', b'Tamasheq'], + [b'tar', b'Tarahumara, Central'], + [b'tas', b'Tay Boi'], + [b'tat', b'Tatar'], + [b'tau', b'Tanana, Upper'], + [b'tav', b'Tatuyo'], + [b'taw', b'Tai'], + [b'tax', b'Tamki'], + [b'tay', b'Atayal'], + [b'taz', b'Tocho'], + [b'tba', 'Aikan\xe3'], + [b'tbb', b'Tapeba'], + [b'tbc', b'Takia'], + [b'tbd', b'Kaki Ae'], + [b'tbe', b'Tanimbili'], + [b'tbf', b'Mandara'], + [b'tbg', b'Tairora, North'], + [b'tbh', b'Thurawal'], + [b'tbi', b'Gaam'], + [b'tbj', b'Tiang'], + [b'tbk', b'Tagbanwa, Calamian'], + [b'tbl', b'Tboli'], + [b'tbm', b'Tagbu'], + [b'tbn', b'Tunebo, Barro Negro'], + [b'tbo', b'Tawala'], + [b'tbp', b'Taworta'], + [b'tbr', b'Tumtum'], + [b'tbs', b'Tanguat'], + [b'tbt', b'Tembo (Kitembo)'], + [b'tbu', b'Tubar'], + [b'tbv', b'Tobo'], + [b'tbw', b'Tagbanwa'], + [b'tbx', b'Kapin'], + [b'tby', b'Tabaru'], + [b'tbz', b'Ditammari'], + [b'tca', b'Ticuna'], + [b'tcb', b'Tanacross'], + [b'tcc', b'Datooga'], + [b'tcd', b'Tafi'], + [b'tce', b'Tutchone, Southern'], + [b'tcf', b"Me'phaa, Malinaltepec"], + [b'tcg', b'Tamagario'], + [b'tch', b'Creole English, Turks And Caicos'], + [b'tci', 'W\xe1ra'], + [b'tck', b'Tchitchege'], + [b'tcl', b'Taman (Myanmar)'], + [b'tcm', b'Tanahmerah'], + [b'tcn', b'Tichurong'], + [b'tco', b'Taungyo'], + [b'tcp', b'Chin, Tawr'], + [b'tcq', b'Kaiy'], + [b'tcs', b'Creole, Torres Strait'], + [b'tct', b"T'en"], + [b'tcu', b'Tarahumara, Southeastern'], + [b'tcw', 'Totonac, Tecpatl\xe1n'], + [b'tcx', b'Toda'], + [b'tcy', b'Tulu'], + [b'tcz', b'Chin, Thado'], + [b'tda', b'Tagdal'], + [b'tdb', b'Panchpargania'], + [b'tdc', 'Ember\xe1-Tad\xf3'], + [b'tdd', 'Tai N\xfca'], + [b'tde', b'Dogon, Tiranige Diga'], + [b'tdf', b'Talieng'], + [b'tdg', b'Tamang, Western'], + [b'tdh', b'Thulung'], + [b'tdi', b'Tomadino'], + [b'tdj', b'Tajio'], + [b'tdk', b'Tambas'], + [b'tdl', b'Sur'], + [b'tdn', b'Tondano'], + [b'tdo', b'Teme'], + [b'tdq', b'Tita'], + [b'tdr', b'Todrah'], + [b'tds', b'Doutai'], + [b'tdt', b'Tetun Dili'], + [b'tdu', b'Dusun, Tempasuk'], + [b'tdv', b'Toro'], + [b'tdx', b'Malagasy, Tandroy-Mahafaly'], + [b'tdy', b'Tadyawan'], + [b'tea', b'Temiar'], + [b'teb', b'Tetete'], + [b'tec', b'Terik'], + [b'ted', b'Krumen, Tepo'], + [b'tee', b'Tepehua, Huehuetla'], + [b'tef', b'Teressa'], + [b'teg', b'Teke-Tege'], + [b'teh', b'Tehuelche'], + [b'tei', b'Torricelli'], + [b'tek', b'Teke, Ibali'], + [b'tel', b'Telugu'], + [b'tem', b'Timne'], + [b'ten', b'Tama (Colombia)'], + [b'teo', b'Teso'], + [b'tep', b'Tepecano'], + [b'teq', b'Temein'], + [b'ter', b'Tereno'], + [b'tes', b'Tengger'], + [b'tet', b'Tetum'], + [b'teu', b'Soo'], + [b'tev', b'Teor'], + [b'tew', b'Tewa (USA)'], + [b'tex', b'Tennet'], + [b'tey', b'Tulishi'], + [b'tfi', b'Gbe, Tofin'], + [b'tfn', b'Tanaina'], + [b'tfo', b'Tefaro'], + [b'tfr', b'Teribe'], + [b'tft', b'Ternate'], + [b'tga', b'Sagalla'], + [b'tgb', b'Tobilung'], + [b'tgc', b'Tigak'], + [b'tgd', b'Ciwogai'], + [b'tge', b'Tamang, Eastern Gorkha'], + [b'tgf', b'Chalikha'], + [b'tgh', b'Creole English, Tobagonian'], + [b'tgi', b'Lawunuia'], + [b'tgj', b'Tagin'], + [b'tgk', b'Tajik'], + [b'tgl', b'Tagalog'], + [b'tgn', b'Tandaganon'], + [b'tgo', b'Sudest'], + [b'tgp', b'Tangoa'], + [b'tgq', b'Tring'], + [b'tgr', b'Tareng'], + [b'tgs', b'Nume'], + [b'tgt', b'Tagbanwa, Central'], + [b'tgu', b'Tanggu'], + [b'tgv', b'Tingui-Boto'], + [b'tgw', b'Senoufo, Tagwana'], + [b'tgx', b'Tagish'], + [b'tgy', b'Togoyo'], + [b'tgz', b'Tagalaka'], + [b'tha', b'Thai'], + [b'thc', b'Tai Hang Tong'], + [b'thd', b'Thayore'], + [b'the', b'Tharu, Chitwania'], + [b'thf', b'Thangmi'], + [b'thh', b'Tarahumara, Northern'], + [b'thi', b'Tai Long'], + [b'thk', b'Tharaka'], + [b'thl', b'Tharu, Dangaura'], + [b'thm', b'Aheu'], + [b'thn', b'Thachanadan'], + [b'thp', b'Thompson'], + [b'thq', b'Tharu, Kochila'], + [b'thr', b'Tharu, Rana'], + [b'ths', b'Thakali'], + [b'tht', b'Tahltan'], + [b'thu', b'Thuri'], + [b'thv', b'Tamahaq, Tahaggart'], + [b'thw', b'Thudam'], + [b'thx', b'The'], + [b'thy', b'Tha'], + [b'thz', b'Tamajeq, Tayart'], + [b'tia', b'Tamazight, Tidikelt'], + [b'tic', b'Tira'], + [b'tid', b'Tidong'], + [b'tif', b'Tifal'], + [b'tig', b'Tigre'], + [b'tih', b'Murut, Timugon'], + [b'tii', b'Tiene'], + [b'tij', b'Tilung'], + [b'tik', b'Tikar'], + [b'til', b'Tillamook'], + [b'tim', b'Timbe'], + [b'tin', b'Tindi'], + [b'tio', b'Teop'], + [b'tip', b'Trimuris'], + [b'tiq', 'Ti\xe9fo'], + [b'tir', b'Tigrinya'], + [b'tis', b'Itneg, Masadiit'], + [b'tit', b'Tinigua'], + [b'tiu', b'Adasen'], + [b'tiv', b'Tiv'], + [b'tiw', b'Tiwi'], + [b'tix', b'Tiwa, Southern'], + [b'tiy', b'Tiruray'], + [b'tiz', b'Tai Hongjin'], + [b'tja', b'Tajuasohn'], + [b'tjg', b'Tunjung'], + [b'tji', b'Tujia, Northern'], + [b'tjl', b'Tai Laing'], + [b'tjm', b'Timucua'], + [b'tjn', b'Tonjon'], + [b'tjo', b'Tamazight, Temacine'], + [b'tjs', b'Tujia, Southern'], + [b'tju', b'Tjurruru'], + [b'tjw', b'Djabwurrung'], + [b'tka', 'Truk\xe1'], + [b'tkb', b'Buksa'], + [b'tkd', b'Tukudede'], + [b'tke', b'Takwane'], + [b'tkf', 'Tukumanf\xe9d'], + [b'tkg', b'Malagasy, Tesaka'], + [b'tkl', b'Tokelau'], + [b'tkm', b'Takelma'], + [b'tkn', b'Toku-No-Shima'], + [b'tkp', b'Tikopia'], + [b'tkq', b'Tee'], + [b'tkr', b'Tsakhur'], + [b'tks', b'Takestani'], + [b'tkt', b'Tharu, Kathoriya'], + [b'tku', b'Totonac, Upper Necaxa'], + [b'tkw', b'Teanu'], + [b'tkx', b'Tangko'], + [b'tkz', b'Takua'], + [b'tla', b'Tepehuan, Southwestern'], + [b'tlb', b'Tobelo'], + [b'tlc', b'Totonac, Yecuatla'], + [b'tld', b'Talaud'], + [b'tlf', b'Telefol'], + [b'tlg', b'Tofanma'], + [b'tlh', b'Klingon'], + [b'tli', b'Tlingit'], + [b'tlj', b'Talinga-Bwisi'], + [b'tlk', b'Taloki'], + [b'tll', b'Tetela'], + [b'tlm', b'Tolomako'], + [b'tln', b"Talondo'"], + [b'tlo', b'Talodi'], + [b'tlp', 'Totonac, Filomena Mata-Coahuitl\xe1n'], + [b'tlq', b'Tai Loi'], + [b'tlr', b'Talise'], + [b'tls', b'Tambotalo'], + [b'tlt', b'Teluti'], + [b'tlu', b'Tulehu'], + [b'tlv', b'Taliabu'], + [b'tlx', b'Khehek'], + [b'tly', b'Talysh'], + [b'tma', b'Tama (Chad)'], + [b'tmb', b'Katbol'], + [b'tmc', b'Tumak'], + [b'tmd', b'Haruai'], + [b'tme', 'Trememb\xe9'], + [b'tmf', b'Toba-Maskoy'], + [b'tmg', 'Ternate\xf1o'], + [b'tmh', b'Tamashek'], + [b'tmi', b'Tutuba'], + [b'tmj', b'Samarokena'], + [b'tmk', b'Tamang, Northwestern'], + [b'tml', b'Citak, Tamnim'], + [b'tmm', b'Tai Thanh'], + [b'tmn', b'Taman (Indonesia)'], + [b'tmo', b'Temoq'], + [b'tmp', 'Tai M\xe8ne'], + [b'tmq', b'Tumleo'], + [b'tmr', b'Aramaic, Jewish Babylonian (ca. 200-1200 CE)'], + [b'tms', b'Tima'], + [b'tmt', b'Tasmate'], + [b'tmu', b'Iau'], + [b'tmv', b'Tembo (Motembo)'], + [b'tmw', b'Temuan'], + [b'tmy', b'Tami'], + [b'tmz', b'Tamanaku'], + [b'tna', b'Tacana'], + [b'tnb', b'Tunebo, Western'], + [b'tnc', 'Tanimuca-Retuar\xe3'], + [b'tnd', b'Tunebo, Angosturas'], + [b'tne', b'Kallahan, Tinoc'], + [b'tng', b'Tobanga'], + [b'tnh', b'Maiani'], + [b'tni', b'Tandia'], + [b'tnk', b'Kwamera'], + [b'tnl', b'Lenakel'], + [b'tnm', b'Tabla'], + [b'tnn', b'Tanna, North'], + [b'tno', b'Toromono'], + [b'tnp', b'Whitesands'], + [b'tnq', b'Taino'], + [b'tnr', 'M\xe9nik'], + [b'tns', b'Tenis'], + [b'tnt', b'Tontemboan'], + [b'tnu', b'Tay Khang'], + [b'tnv', b'Tangchangya'], + [b'tnw', b'Tonsawang'], + [b'tnx', b'Tanema'], + [b'tny', b'Tongwe'], + [b'tnz', b'Tonga (Thailand)'], + [b'tob', b'Toba'], + [b'toc', b'Totonac, Coyutla'], + [b'tod', b'Toma'], + [b'toe', b'Tomedes'], + [b'tof', b'Gizrra'], + [b'tog', b'Tonga (Nyasa)'], + [b'toh', b'Gitonga'], + [b'toi', b'Tonga (Zambia)'], + [b'toj', b'Tojolabal'], + [b'tol', b'Tolowa'], + [b'tom', b'Tombulu'], + [b'ton', b'Tonga (Tonga Islands)'], + [b'too', 'Totonac, Xicotepec De Ju\xe1rez'], + [b'top', b'Totonac, Papantla'], + [b'toq', b'Toposa'], + [b'tor', b'Banda, Togbo-Vara'], + [b'tos', b'Totonac, Highland'], + [b'tou', b'Tho'], + [b'tov', b'Taromi, Upper'], + [b'tow', b'Jemez'], + [b'tox', b'Tobian'], + [b'toy', b'Topoiyo'], + [b'toz', b'To'], + [b'tpa', b'Taupota'], + [b'tpc', "Me'phaa, Azoy\xfa"], + [b'tpe', b'Tippera'], + [b'tpf', b'Tarpia'], + [b'tpg', b'Kula'], + [b'tpi', b'Tok Pisin'], + [b'tpj', 'Tapiet\xe9'], + [b'tpk', b'Tupinikin'], + [b'tpl', b"Me'phaa, Tlacoapa"], + [b'tpm', b'Tampulma'], + [b'tpn', 'Tupinamb\xe1'], + [b'tpo', b'Tai Pao'], + [b'tpp', b'Tepehua, Pisaflores'], + [b'tpq', b'Tukpa'], + [b'tpr', 'Tupar\xed'], + [b'tpt', b'Tepehua, Tlachichilco'], + [b'tpu', b'Tampuan'], + [b'tpv', b'Tanapag'], + [b'tpw', 'Tup\xed'], + [b'tpx', b"Me'phaa, Acatepec"], + [b'tpy', b'Trumai'], + [b'tpz', b'Tinputz'], + [b'tqb', 'Temb\xe9'], + [b'tql', b'Lehali'], + [b'tqm', b'Turumsa'], + [b'tqn', b'Tenino'], + [b'tqo', b'Toaripi'], + [b'tqp', b'Tomoip'], + [b'tqq', b'Tunni'], + [b'tqr', b'Torona'], + [b'tqt', b'Totonac, Western'], + [b'tqu', b'Touo'], + [b'tqw', b'Tonkawa'], + [b'tra', b'Tirahi'], + [b'trb', b'Terebu'], + [b'trc', b'Triqui, Copala'], + [b'trd', b'Turi'], + [b'tre', b'Tarangan, East'], + [b'trf', b'Creole English, Trinidadian'], + [b'trg', 'Lish\xe1n Did\xe1n'], + [b'trh', b'Turaka'], + [b'tri', 'Tri\xf3'], + [b'trj', b'Toram'], + [b'trl', b'Scottish, Traveller'], + [b'trm', b'Tregami'], + [b'trn', b'Trinitario'], + [b'tro', b'Naga, Tarao'], + [b'trp', b'Kok Borok'], + [b'trq', 'Triqui, San Mart\xedn Itunyoso'], + [b'trr', b'Taushiro'], + [b'trs', b'Triqui, Chicahuaxtla'], + [b'trt', b'Tunggare'], + [b'tru', b'Turoyo'], + [b'trv', b'Taroko'], + [b'trw', b'Torwali'], + [b'trx', b'Bidayuh, Tringgus-Sembaan'], + [b'try', b'Turung'], + [b'trz', 'Tor\xe1'], + [b'tsa', b'Tsaangi'], + [b'tsb', b'Tsamai'], + [b'tsc', b'Tswa'], + [b'tsd', b'Tsakonian'], + [b'tse', b'Tunisian Sign Language'], + [b'tsf', b'Tamang, Southwestern'], + [b'tsg', b'Tausug'], + [b'tsh', b'Tsuvan'], + [b'tsi', b'Tsimshian'], + [b'tsj', b'Tshangla'], + [b'tsk', b'Tseku'], + [b'tsl', "Ts'\xfcn-Lao"], + [b'tsm', b'Turkish Sign Language'], + [b'tsn', b'Tswana'], + [b'tso', b'Tsonga'], + [b'tsp', b'Toussian, Northern'], + [b'tsq', b'Thai Sign Language'], + [b'tsr', b'Akei'], + [b'tss', b'Taiwan Sign Language'], + [b'tst', b'Songway Kiini, Tondi'], + [b'tsu', b'Tsou'], + [b'tsv', b'Tsogo'], + [b'tsw', b'Tsishingini'], + [b'tsx', b'Mubami'], + [b'tsy', b'Tebul Sign Language'], + [b'tsz', b'Purepecha'], + [b'tta', b'Tutelo'], + [b'ttb', b'Gaa'], + [b'ttc', b'Tektiteko'], + [b'ttd', b'Tauade'], + [b'tte', b'Bwanabwana'], + [b'ttf', b'Tuotomb'], + [b'ttg', b'Tutong'], + [b'tth', b"Ta'oih, Upper"], + [b'tti', b'Tobati'], + [b'ttj', b'Tooro'], + [b'ttk', b'Totoro'], + [b'ttl', b'Totela'], + [b'ttm', b'Tutchone, Northern'], + [b'ttn', b'Towei'], + [b'tto', b"Ta'oih, Lower"], + [b'ttp', b'Tombelala'], + [b'ttq', b'Tamajaq, Tawallammat'], + [b'ttr', b'Tera'], + [b'tts', b'Thai, Northeastern'], + [b'ttt', b'Tat, Muslim'], + [b'ttu', b'Torau'], + [b'ttv', b'Titan'], + [b'ttw', b'Long Wat'], + [b'tty', b'Sikaritai'], + [b'ttz', b'Tsum'], + [b'tua', b'Wiarumus'], + [b'tub', 'T\xfcbatulabal'], + [b'tuc', b'Mutu'], + [b'tud', 'Tux\xe1'], + [b'tue', b'Tuyuca'], + [b'tuf', b'Tunebo, Central'], + [b'tug', b'Tunia'], + [b'tuh', b'Taulil'], + [b'tui', b'Tupuri'], + [b'tuj', b'Tugutil'], + [b'tuk', b'Turkmen'], + [b'tul', b'Tula'], + [b'tum', b'Tumbuka'], + [b'tun', b'Tunica'], + [b'tuo', b'Tucano'], + [b'tuq', b'Tedaga'], + [b'tur', b'Turkish'], + [b'tus', b'Tuscarora'], + [b'tuu', b'Tututni'], + [b'tuv', b'Turkana'], + [b'tux', 'Tuxin\xe1wa'], + [b'tuy', b'Tugen'], + [b'tuz', b'Turka'], + [b'tva', b'Vaghua'], + [b'tvd', b'Tsuvadi'], + [b'tve', b"Te'un"], + [b'tvk', b'Ambrym, Southeast'], + [b'tvl', b'Tuvalu'], + [b'tvm', b'Tela-Masbuar'], + [b'tvn', b'Tavoyan'], + [b'tvo', b'Tidore'], + [b'tvs', b'Taveta'], + [b'tvt', b'Naga, Tutsa'], + [b'tvu', b'Tunen'], + [b'tvw', b'Sedoa'], + [b'tvy', b'Pidgin, Timor'], + [b'twa', b'Twana'], + [b'twb', b'Tawbuid, Western'], + [b'twc', b'Teshenawa'], + [b'twd', b'Twents'], + [b'twe', b'Tewa (Indonesia)'], + [b'twf', b'Tiwa, Northern'], + [b'twg', b'Tereweng'], + [b'twh', 'Tai D\xf3n'], + [b'twi', b'Twi'], + [b'twl', b'Tawara'], + [b'twm', b'Monpa, Tawang'], + [b'twn', b'Twendi'], + [b'two', b'Tswapong'], + [b'twp', b'Ere'], + [b'twq', b'Tasawaq'], + [b'twr', b'Tarahumara, Southwestern'], + [b'twt', 'Turiw\xe1ra'], + [b'twu', b'Termanu'], + [b'tww', b'Tuwari'], + [b'twx', b'Tewe'], + [b'twy', b'Tawoyan'], + [b'txa', b'Tombonuo'], + [b'txb', b'Tokharian B'], + [b'txc', b'Tsetsaut'], + [b'txe', b'Totoli'], + [b'txg', b'Tangut'], + [b'txh', b'Thracian'], + [b'txi', b'Ikpeng'], + [b'txm', b'Tomini'], + [b'txn', b'Tarangan, West'], + [b'txo', b'Toto'], + [b'txq', b'Tii'], + [b'txr', b'Tartessian'], + [b'txs', b'Tonsea'], + [b'txt', b'Citak'], + [b'txu', 'Kayap\xf3'], + [b'txx', b'Tatana'], + [b'txy', b'Malagasy, Tanosy'], + [b'tya', b'Tauya'], + [b'tye', b'Kyanga'], + [b'tyh', b"O'du"], + [b'tyi', b'Teke-Tsaayi'], + [b'tyj', b'Tai Do'], + [b'tyl', b'Thu Lao'], + [b'tyn', b'Kombai'], + [b'typ', b'Thaypan'], + [b'tyr', b'Tai Daeng'], + [b'tys', 'T\xe0y Sa Pa'], + [b'tyt', 'T\xe0y Tac'], + [b'tyu', b'Kua'], + [b'tyv', b'Tuvinian'], + [b'tyx', b'Teke-Tyee'], + [b'tyz', 'T\xe0y'], + [b'tza', b'Tanzanian Sign Language'], + [b'tzh', b'Tzeltal'], + [b'tzj', b"Tz'utujil"], + [b'tzl', b'Talossan'], + [b'tzm', b'Tamazight, Central Atlas'], + [b'tzn', b'Tugun'], + [b'tzo', b'Tzotzil'], + [b'tzx', b'Tabriak'], + [b'uam', 'Uamu\xe9'], + [b'uan', b'Kuan'], + [b'uar', b'Tairuma'], + [b'uba', b'Ubang'], + [b'ubi', b'Ubi'], + [b'ubl', b"Bikol, Buhi'non"], + [b'ubr', b'Ubir'], + [b'ubu', b'Umbu-Ungu'], + [b'uby', b'Ubykh'], + [b'uda', b'Uda'], + [b'ude', b'Udihe'], + [b'udg', b'Muduga'], + [b'udi', b'Udi'], + [b'udj', b'Ujir'], + [b'udl', b'Wuzlam'], + [b'udm', b'Udmurt'], + [b'udu', b'Uduk'], + [b'ues', b'Kioko'], + [b'ufi', b'Ufim'], + [b'uga', b'Ugaritic'], + [b'ugb', b'Kuku-Ugbanh'], + [b'uge', b'Ughele'], + [b'ugn', b'Ugandan Sign Language'], + [b'ugo', b'Ugong'], + [b'ugy', b'Uruguayan Sign Language'], + [b'uha', b'Uhami'], + [b'uhn', b'Damal'], + [b'uig', b'Uighur'], + [b'uis', b'Uisai'], + [b'uiv', b'Iyive'], + [b'uji', b'Tanjijili'], + [b'uka', b'Kaburi'], + [b'ukg', b'Ukuriguma'], + [b'ukh', b'Ukhwejo'], + [b'ukl', b'Ukrainian Sign Language'], + [b'ukp', b'Ukpe-Bayobiri'], + [b'ukq', b'Ukwa'], + [b'ukr', b'Ukrainian'], + [b'uks', 'Urub\xfa-Kaapor Sign Language'], + [b'uku', b'Ukue'], + [b'ukw', b'Ukwuani-Aboh-Ndoni'], + [b'uky', b'Kuuk-Yak'], + [b'ula', b'Fungwa'], + [b'ulb', b'Ulukwumi'], + [b'ulc', b'Ulch'], + [b'ule', b'Lule'], + [b'ulf', b'Usku'], + [b'uli', b'Ulithian'], + [b'ulk', b'Meriam'], + [b'ull', b'Ullatan'], + [b'ulm', b"Ulumanda'"], + [b'uln', b'Unserdeutsch'], + [b'ulu', b"Uma' Lung"], + [b'ulw', b'Ulwa'], + [b'uma', b'Umatilla'], + [b'umb', b'Umbundu'], + [b'umc', b'Marrucinian'], + [b'umd', b'Umbindhamu'], + [b'umg', b'Umbuygamu'], + [b'umi', b'Ukit'], + [b'umm', b'Umon'], + [b'umn', b'Naga, Makyan'], + [b'umo', 'Umot\xedna'], + [b'ump', b'Umpila'], + [b'umr', b'Umbugarla'], + [b'ums', b'Pendau'], + [b'umu', b'Munsee'], + [b'una', b'Watut, North'], + [b'und', b'Undetermined'], + [b'une', b'Uneme'], + [b'ung', b'Ngarinyin'], + [b'unk', 'Enawen\xe9-Naw\xe9'], + [b'unm', b'Unami'], + [b'unn', b'Kurnai'], + [b'unr', b'Mundari'], + [b'unu', b'Unubahe'], + [b'unx', b'Munda'], + [b'unz', b'Kaili, Unde'], + [b'uok', b'Uokha'], + [b'upi', b'Umeda'], + [b'upv', b'Uripiv-Wala-Rano-Atchin'], + [b'ura', b'Urarina'], + [b'urb', 'Urub\xfa-Kaapor'], + [b'urc', b'Urningangg'], + [b'urd', b'Urdu'], + [b'ure', b'Uru'], + [b'urf', b'Uradhi'], + [b'urg', b'Urigina'], + [b'urh', b'Urhobo'], + [b'uri', b'Urim'], + [b'urk', b"Urak Lawoi'"], + [b'url', b'Urali'], + [b'urm', b'Urapmin'], + [b'urn', b'Uruangnirin'], + [b'uro', b'Ura (Papua New Guinea)'], + [b'urp', b'Uru-Pa-In'], + [b'urr', b'Lehalurup'], + [b'urt', b'Urat'], + [b'uru', b'Urumi'], + [b'urv', b'Uruava'], + [b'urw', b'Sop'], + [b'urx', b'Urimo'], + [b'ury', b'Orya'], + [b'urz', b'Uru-Eu-Wau-Wau'], + [b'usa', b'Usarufa'], + [b'ush', b'Ushojo'], + [b'usi', b'Usui'], + [b'usk', b'Usaghade'], + [b'usp', b'Uspanteco'], + [b'usu', b'Uya'], + [b'uta', b'Otank'], + [b'ute', b'Ute-Southern Paiute'], + [b'utp', b'Amba (Solomon Islands)'], + [b'utr', b'Etulo'], + [b'utu', b'Utu'], + [b'uum', b'Urum'], + [b'uun', b'Kulon-Pazeh'], + [b'uur', b'Ura (Vanuatu)'], + [b'uuu', b'U'], + [b'uve', b'Uvean, West'], + [b'uvh', b'Uri'], + [b'uvl', b'Lote'], + [b'uwa', b'Kuku-Uwanh'], + [b'uya', b'Doko-Uyanga'], + [b'uzb', b'Uzbek'], + [b'uzn', b'Uzbek, Northern'], + [b'uzs', b'Uzbek, Southern'], + [b'vaa', b'Vaagri Booli'], + [b'vae', b'Vale'], + [b'vaf', b'Vafsi'], + [b'vag', b'Vagla'], + [b'vah', b'Varhadi-Nagpuri'], + [b'vai', b'Vai'], + [b'vaj', b'Vasekela Bushman'], + [b'val', b'Vehes'], + [b'vam', b'Vanimo'], + [b'van', b'Valman'], + [b'vao', b'Vao'], + [b'vap', b'Vaiphei'], + [b'var', b'Huarijio'], + [b'vas', b'Vasavi'], + [b'vau', b'Vanuma'], + [b'vav', b'Varli'], + [b'vay', b'Wayu'], + [b'vbb', b'Babar, Southeast'], + [b'vbk', b'Bontok, Southwestern'], + [b'vec', b'Venetian'], + [b'ved', b'Veddah'], + [b'vel', b'Veluws'], + [b'vem', b'Vemgo-Mabas'], + [b'ven', b'Venda'], + [b'veo', 'Venture\xf1o'], + [b'vep', b'Veps'], + [b'ver', b'Mom Jango'], + [b'vgr', b'Vaghri'], + [b'vgt', b'Vlaamse Gebarentaal'], + [b'vic', b'Creole English, Virgin Islands'], + [b'vid', b'Vidunda'], + [b'vie', b'Vietnamese'], + [b'vif', b'Vili'], + [b'vig', b'Viemo'], + [b'vil', b'Vilela'], + [b'vin', b'Vinza'], + [b'vis', b'Vishavan'], + [b'vit', b'Viti'], + [b'viv', b'Iduna'], + [b'vka', b'Kariyarra'], + [b'vki', b'Ija-Zuba'], + [b'vkj', b'Kujarge'], + [b'vkk', b'Kaur'], + [b'vkl', b'Kulisusu'], + [b'vkm', b'Kamakan'], + [b'vko', b'Kodeoha'], + [b'vkp', b'Creole Portuguese, Korlai'], + [b'vkt', b'Malay, Tenggarong Kutai'], + [b'vku', b'Kurrama'], + [b'vlp', b'Valpei'], + [b'vls', b'Vlaams'], + [b'vma', b'Martuyhunira'], + [b'vmb', b'Barbaram'], + [b'vmc', b'Mixtec, Juxtlahuaca'], + [b'vmd', b'Koraga, Mudu'], + [b'vme', b'Masela, East'], + [b'vmf', 'Mainfr\xe4nkisch'], + [b'vmg', b'Lungalunga'], + [b'vmh', b'Maraghei'], + [b'vmi', b'Miwa'], + [b'vmj', b'Mixtec, Ixtayutla'], + [b'vmk', b'Makhuwa-Shirima'], + [b'vml', b'Malgana'], + [b'vmm', b'Mixtec, Mitlatongo'], + [b'vmp', b'Mazatec, Soyaltepec'], + [b'vmq', b'Mixtec, Soyaltepec'], + [b'vmr', b'Marenje'], + [b'vms', b'Moksela'], + [b'vmu', b'Muluridyi'], + [b'vmv', b'Maidu, Valley'], + [b'vmw', b'Makhuwa'], + [b'vmx', b'Mixtec, Tamazola'], + [b'vmy', b'Mazatec, Ayautla'], + [b'vmz', 'Mazatec, Mazatl\xe1n'], + [b'vnk', b'Vano'], + [b'vnm', b'Vinmavis'], + [b'vnp', b'Vunapu'], + [b'vol', 'Volap\xfck'], + [b'vor', b'Voro'], + [b'vot', b'Votic'], + [b'vra', b"Vera'a"], + [b'vro', 'V\xf5ro'], + [b'vrs', b'Varisi'], + [b'vrt', b'Burmbar'], + [b'vsi', b'Moldova Sign Language'], + [b'vsl', b'Venezuelan Sign Language'], + [b'vsv', b'Valencian Sign Language'], + [b'vto', b'Vitou'], + [b'vum', b'Vumbu'], + [b'vun', b'Vunjo'], + [b'vut', b'Vute'], + [b'vwa', b'Awa (China)'], + [b'waa', b'Walla Walla'], + [b'wab', b'Wab'], + [b'wac', b'Wasco-Wishram'], + [b'wad', b'Wandamen'], + [b'wae', b'Walser'], + [b'waf', 'Wakon\xe1'], + [b'wag', b"Wa'ema"], + [b'wah', b'Watubela'], + [b'wai', b'Wares'], + [b'waj', b'Waffa'], + [b'wal', b'Wolaytta'], + [b'wam', b'Wampanoag'], + [b'wan', b'Wan'], + [b'wao', b'Wappo'], + [b'wap', b'Wapishana'], + [b'waq', b'Wageman'], + [b'war', b'Waray (Philippines)'], + [b'was', b'Washo'], + [b'wat', b'Kaninuwa'], + [b'wau', 'Waur\xe1'], + [b'wav', b'Waka'], + [b'waw', b'Waiwai'], + [b'wax', b'Watam'], + [b'way', b'Wayana'], + [b'waz', b'Wampur'], + [b'wba', b'Warao'], + [b'wbb', b'Wabo'], + [b'wbe', b'Waritai'], + [b'wbf', b'Wara'], + [b'wbh', b'Wanda'], + [b'wbi', b'Vwanji'], + [b'wbj', b'Alagwa'], + [b'wbk', b'Waigali'], + [b'wbl', b'Wakhi'], + [b'wbm', b'Wa'], + [b'wbp', b'Warlpiri'], + [b'wbq', b'Waddar'], + [b'wbr', b'Wagdi'], + [b'wbt', b'Wanman'], + [b'wbv', b'Wajarri'], + [b'wbw', b'Woi'], + [b'wca', 'Yanom\xe1mi'], + [b'wci', b'Gbe, Waci'], + [b'wdd', b'Wandji'], + [b'wdg', b'Wadaginam'], + [b'wdj', b'Wadjiginy'], + [b'wdk', b'Wadikali'], + [b'wdu', b'Wadjigu'], + [b'wdy', b'Wadjabangayi'], + [b'wea', b'Wewaw'], + [b'wec', 'W\xe8 Western'], + [b'wed', b'Wedau'], + [b'weg', b'Wergaia'], + [b'weh', b'Weh'], + [b'wei', b'Kiunum'], + [b'wem', b'Gbe, Weme'], + [b'weo', b'Wemale'], + [b'wep', b'Westphalien'], + [b'wer', b'Weri'], + [b'wes', b'Pidgin, Cameroon'], + [b'wet', b'Perai'], + [b'weu', b'Chin, Rawngtu'], + [b'wew', b'Wejewa'], + [b'wfg', b'Yafi'], + [b'wga', b'Wagaya'], + [b'wgb', b'Wagawaga'], + [b'wgg', b'Wangganguru'], + [b'wgi', b'Wahgi'], + [b'wgo', b'Waigeo'], + [b'wgu', b'Wirangu'], + [b'wgy', b'Warrgamay'], + [b'wha', b'Manusela'], + [b'whg', b'Wahgi, North'], + [b'whk', b'Kenyah, Wahau'], + [b'whu', b'Kayan, Wahau'], + [b'wib', b'Toussian, Southern'], + [b'wic', b'Wichita'], + [b'wie', b'Wik-Epa'], + [b'wif', b'Wik-Keyangan'], + [b'wig', b'Wik-Ngathana'], + [b'wih', b"Wik-Me'anha"], + [b'wii', b'Minidien'], + [b'wij', b'Wik-Iiyanh'], + [b'wik', b'Wikalkan'], + [b'wil', b'Wilawila'], + [b'wim', b'Wik-Mungkan'], + [b'win', b'Ho-Chunk'], + [b'wir', 'Wiraf\xe9d'], + [b'wiu', b'Wiru'], + [b'wiv', b'Vitu'], + [b'wiy', b'Wiyot'], + [b'wja', b'Waja'], + [b'wji', b'Warji'], + [b'wka', b"Kw'adza"], + [b'wkb', b'Kumbaran'], + [b'wkd', b'Wakde'], + [b'wkl', b'Kalanadi'], + [b'wku', b'Kunduvadi'], + [b'wkw', b'Wakawaka'], + [b'wky', b'Wangkayutyuru'], + [b'wla', b'Walio'], + [b'wlc', b'Comorian, Mwali'], + [b'wle', b'Wolane'], + [b'wlg', b'Kunbarlang'], + [b'wli', b'Waioli'], + [b'wlk', b'Wailaki'], + [b'wll', b'Wali (Sudan)'], + [b'wlm', b'Welsh, Middle'], + [b'wln', b'Walloon'], + [b'wlo', b'Wolio'], + [b'wlr', b'Wailapa'], + [b'wls', b'Wallisian'], + [b'wlu', b'Wuliwuli'], + [b'wlv', 'Wich\xed Lhamt\xe9s Vejoz'], + [b'wlw', b'Walak'], + [b'wlx', b'Wali (Ghana)'], + [b'wly', b'Waling'], + [b'wma', b'Mawa (Nigeria)'], + [b'wmb', b'Wambaya'], + [b'wmc', b'Wamas'], + [b'wmd', 'Mamaind\xe9'], + [b'wme', b'Wambule'], + [b'wmh', b"Waima'a"], + [b'wmi', b'Wamin'], + [b'wmm', b'Maiwa (Indonesia)'], + [b'wmn', b'Waamwang'], + [b'wmo', b'Wom (Papua New Guinea)'], + [b'wms', b'Wambon'], + [b'wmt', b'Walmajarri'], + [b'wmw', b'Mwani'], + [b'wmx', b'Womo'], + [b'wnb', b'Wanambre'], + [b'wnc', b'Wantoat'], + [b'wnd', b'Wandarang'], + [b'wne', b'Waneci'], + [b'wng', b'Wanggom'], + [b'wni', b'Comorian, Ndzwani'], + [b'wnk', b'Wanukaka'], + [b'wnm', b'Wanggamala'], + [b'wnn', b'Wunumara'], + [b'wno', b'Wano'], + [b'wnp', b'Wanap'], + [b'wnu', b'Usan'], + [b'wnw', b'Wintu'], + [b'wny', b'Wanyi'], + [b'woa', b'Tyaraity'], + [b'wob', 'W\xe8 Northern'], + [b'woc', b'Wogeo'], + [b'wod', b'Wolani'], + [b'woe', b'Woleaian'], + [b'wof', b'Wolof, Gambian'], + [b'wog', b'Wogamusin'], + [b'woi', b'Kamang'], + [b'wok', b'Longto'], + [b'wol', b'Wolof'], + [b'wom', b'Wom (Nigeria)'], + [b'won', b'Wongo'], + [b'woo', b'Manombai'], + [b'wor', b'Woria'], + [b'wos', b'Hanga Hundi'], + [b'wow', b'Wawonii'], + [b'woy', b'Weyto'], + [b'wpc', b'Maco'], + [b'wra', b'Warapu'], + [b'wrb', b'Warluwara'], + [b'wrd', b'Warduji'], + [b'wrg', b'Warungu'], + [b'wrh', b'Wiradhuri'], + [b'wri', b'Wariyangga'], + [b'wrk', b'Garrwa'], + [b'wrl', b'Warlmanpa'], + [b'wrm', b'Warumungu'], + [b'wrn', b'Warnang'], + [b'wro', b'Worrorra'], + [b'wrp', b'Waropen'], + [b'wrr', b'Wardaman'], + [b'wrs', b'Waris'], + [b'wru', b'Waru'], + [b'wrv', b'Waruna'], + [b'wrw', b'Gugu Warra'], + [b'wrx', b'Wae Rana'], + [b'wry', b'Merwari'], + [b'wrz', b'Waray (Australia)'], + [b'wsa', b'Warembori'], + [b'wsi', b'Wusi'], + [b'wsk', b'Waskia'], + [b'wsr', b'Owenia'], + [b'wss', b'Wasa'], + [b'wsu', b'Wasu'], + [b'wsv', b'Wotapuri-Katarqalai'], + [b'wtf', b'Watiwa'], + [b'wth', b'Wathawurrung'], + [b'wti', b'Berta'], + [b'wtk', b'Watakataui'], + [b'wtm', b'Mewati'], + [b'wtw', b'Wotu'], + [b'wua', b'Wikngenchera'], + [b'wub', b'Wunambal'], + [b'wud', b'Wudu'], + [b'wuh', b'Wutunhua'], + [b'wul', b'Silimo'], + [b'wum', b'Wumbvu'], + [b'wun', b'Bungu'], + [b'wur', b'Wurrugu'], + [b'wut', b'Wutung'], + [b'wuu', b'Chinese, Wu'], + [b'wuv', b'Wuvulu-Aua'], + [b'wux', b'Wulna'], + [b'wuy', b'Wauyai'], + [b'wwa', b'Waama'], + [b'wwb', b'Wakabunga'], + [b'wwo', b'Wetamut'], + [b'wwr', b'Warrwa'], + [b'www', b'Wawa'], + [b'wxa', b'Waxianghua'], + [b'wxw', b'Wardandi'], + [b'wya', b'Wyandot'], + [b'wyb', b'Wangaaybuwan-Ngiyambaa'], + [b'wyi', b'Woiwurrung'], + [b'wym', b'Wymysorys'], + [b'wyr', 'Wayor\xf3'], + [b'wyy', b'Fijian, Western'], + [b'xaa', b'Arabic, Andalusian'], + [b'xab', b'Sambe'], + [b'xac', b'Kachari'], + [b'xad', b'Adai'], + [b'xae', b'Aequian'], + [b'xag', b'Aghwan'], + [b'xai', 'Kaimb\xe9'], + [b'xal', b'Kalmyk'], + [b'xam', b'/Xam'], + [b'xan', b'Xamtanga'], + [b'xao', b'Khao'], + [b'xap', b'Apalachee'], + [b'xaq', b'Aquitanian'], + [b'xar', b'Karami'], + [b'xas', b'Kamas'], + [b'xat', b'Katawixi'], + [b'xau', b'Kauwera'], + [b'xav', 'Xav\xe1nte'], + [b'xaw', b'Kawaiisu'], + [b'xay', b'Kayan Mahakam'], + [b'xba', b'Kamba (Brazil)'], + [b'xbb', b'Burdekin, Lower'], + [b'xbc', b'Bactrian'], + [b'xbd', b'Bindal'], + [b'xbe', b'Bigambal'], + [b'xbg', b'Bunganditj'], + [b'xbi', b'Kombio'], + [b'xbj', b'Birrpayi'], + [b'xbm', b'Breton, Middle'], + [b'xbn', b'Kenaboi'], + [b'xbo', b'Bolgarian'], + [b'xbp', b'Bibbulman'], + [b'xbr', b'Kambera'], + [b'xbw', 'Kambiw\xe1'], + [b'xbx', 'Kabix\xed'], + [b'xby', b'Batyala'], + [b'xcb', b'Cumbric'], + [b'xcc', b'Camunic'], + [b'xce', b'Celtiberian'], + [b'xcg', b'Gaulish, Cisalpine'], + [b'xch', b'Chemakum'], + [b'xcl', b'Armenian, Classical'], + [b'xcm', b'Comecrudo'], + [b'xcn', b'Cotoname'], + [b'xco', b'Chorasmian'], + [b'xcr', b'Carian'], + [b'xct', b'Tibetan, Classical'], + [b'xcu', b'Curonian'], + [b'xcv', b'Chuvantsy'], + [b'xcw', b'Coahuilteco'], + [b'xcy', b'Cayuse'], + [b'xda', b'Darkinyung'], + [b'xdc', b'Dacian'], + [b'xdk', b'Dharuk'], + [b'xdm', b'Edomite'], + [b'xdy', b'Dayak, Malayic'], + [b'xeb', b'Eblan'], + [b'xed', b'Hdi'], + [b'xeg', b'//Xegwi'], + [b'xel', b'Kelo'], + [b'xem', b'Kembayan'], + [b'xep', b'Epi-Olmec'], + [b'xer', 'Xer\xe9nte'], + [b'xes', b'Kesawai'], + [b'xet', 'Xet\xe1'], + [b'xeu', b'Keoru-Ahia'], + [b'xfa', b'Faliscan'], + [b'xga', b'Galatian'], + [b'xgb', b'Gbin'], + [b'xgd', b'Gudang'], + [b'xgf', 'Gabrielino-Fernande\xf1o'], + [b'xgg', b'Goreng'], + [b'xgi', b'Garingbal'], + [b'xgl', b'Galindan'], + [b'xgm', b'Guwinmal'], + [b'xgr', b'Garza'], + [b'xgu', b'Unggumi'], + [b'xgw', b'Guwa'], + [b'xha', b'Harami'], + [b'xhc', b'Hunnic'], + [b'xhd', b'Hadrami'], + [b'xhe', b'Khetrani'], + [b'xho', b'Xhosa'], + [b'xhr', b'Hernican'], + [b'xht', b'Hattic'], + [b'xhu', b'Hurrian'], + [b'xhv', b'Khua'], + [b'xib', b'Iberian'], + [b'xii', b'Xiri'], + [b'xil', b'Illyrian'], + [b'xin', b'Xinca'], + [b'xip', 'Xipin\xe1wa'], + [b'xir', 'Xiri\xe2na'], + [b'xiv', b'Indus Valley Language'], + [b'xiy', b'Xipaya'], + [b'xjb', b'Minjungbal'], + [b'xjt', b'Jaitmatang'], + [b'xka', b'Kalkoti'], + [b'xkb', b'Nago, Northern'], + [b'xkc', b"Kho'ini"], + [b'xkd', b'Kayan, Mendalam'], + [b'xke', b'Kereho'], + [b'xkf', b'Khengkha'], + [b'xkg', b'Kagoro'], + [b'xkh', b'Karahawyana'], + [b'xki', b'Kenyan Sign Language'], + [b'xkj', b'Kajali'], + [b'xkk', b"Kaco'"], + [b'xkl', b'Mainstream Kenyah'], + [b'xkn', b'Kayan, Kayan River'], + [b'xko', b'Kiorr'], + [b'xkp', b'Kabatei'], + [b'xkq', b'Koroni'], + [b'xkr', 'Xakriab\xe1'], + [b'xks', b'Kumbewaha'], + [b'xkt', b'Kantosi'], + [b'xku', b'Kaamba'], + [b'xkv', b'Kgalagadi'], + [b'xkw', b'Kembra'], + [b'xkx', b'Karore'], + [b'xky', b"Uma' Lasan"], + [b'xkz', b'Kurtokha'], + [b'xla', b'Kamula'], + [b'xlb', b'Loup B'], + [b'xlc', b'Lycian'], + [b'xld', b'Lydian'], + [b'xle', b'Lemnian'], + [b'xlg', b'Ligurian (Ancient)'], + [b'xli', b'Liburnian'], + [b'xln', b'Alanic'], + [b'xlo', b'Loup A'], + [b'xlp', b'Lepontic'], + [b'xls', b'Lusitanian'], + [b'xlu', b'Luwian, Cuneiform'], + [b'xly', b'Elymian'], + [b'xma', b'Mushungulu'], + [b'xmb', b'Mbonga'], + [b'xmc', b'Makhuwa-Marrevone'], + [b'xmd', b'Mbudum'], + [b'xme', b'Median'], + [b'xmf', b'Mingrelian'], + [b'xmg', b'Mengaka'], + [b'xmh', b'Kuku-Muminh'], + [b'xmj', b'Majera'], + [b'xmk', b'Macedonian, Ancient'], + [b'xml', b'Malaysian Sign Language'], + [b'xmm', b'Malay, Manado'], + [b'xmn', b'Persian, Manichaean Middle'], + [b'xmo', b'Morerebi'], + [b'xmp', b"Kuku-Mu'inh"], + [b'xmq', b'Kuku-Mangk'], + [b'xmr', b'Meroitic'], + [b'xms', b'Moroccan Sign Language'], + [b'xmt', b'Matbat'], + [b'xmu', b'Kamu'], + [b'xmv', b'Malagasy, Antankarana'], + [b'xmw', b'Malagasy, Tsimihety'], + [b'xmx', b'Maden'], + [b'xmy', b'Mayaguduna'], + [b'xmz', b'Mori Bawah'], + [b'xna', b'North Arabian, Ancient'], + [b'xnb', b'Kanakanabu'], + [b'xng', b'Mongolian, Middle'], + [b'xnh', b'Kuanhua'], + [b'xni', b'Ngarigu'], + [b'xnk', b'Nganakarti'], + [b'xnn', b'Kankanay, Northern'], + [b'xno', b'Anglo-Norman'], + [b'xnr', b'Kangri'], + [b'xns', b'Kanashi'], + [b'xnt', b'Narragansett'], + [b'xnu', b'Nukunul'], + [b'xny', b'Nyiyaparli'], + [b'xnz', b'Kenzi'], + [b'xoc', b"O'chi'chi'"], + [b'xod', b'Kokoda'], + [b'xog', b'Soga'], + [b'xoi', b'Kominimung'], + [b'xok', b'Xokleng'], + [b'xom', b'Komo (Sudan)'], + [b'xon', b'Konkomba'], + [b'xoo', 'Xukur\xfa'], + [b'xop', b'Kopar'], + [b'xor', b'Korubo'], + [b'xow', b'Kowaki'], + [b'xpa', b'Pirriya'], + [b'xpc', b'Pecheneg'], + [b'xpe', b'Kpelle, Liberia'], + [b'xpg', b'Phrygian'], + [b'xpi', b'Pictish'], + [b'xpj', b'Mpalitjanh'], + [b'xpk', b'Pano, Kulina'], + [b'xpm', b'Pumpokol'], + [b'xpn', 'Kapinaw\xe1'], + [b'xpo', b'Pochutec'], + [b'xpp', b'Puyo-Paekche'], + [b'xpq', b'Mohegan-Pequot'], + [b'xpr', b'Parthian'], + [b'xps', b'Pisidian'], + [b'xpt', b'Punthamara'], + [b'xpu', b'Punic'], + [b'xpy', b'Puyo'], + [b'xqa', b'Karakhanid'], + [b'xqt', b'Qatabanian'], + [b'xra', 'Krah\xf4'], + [b'xrb', b'Karaboro, Eastern'], + [b'xrd', b'Gundungurra'], + [b'xre', b'Kreye'], + [b'xrg', b'Minang'], + [b'xri', b'Krikati-Timbira'], + [b'xrm', b'Armazic'], + [b'xrn', b'Arin'], + [b'xrq', b'Karranga'], + [b'xrr', b'Raetic'], + [b'xrt', b'Aranama-Tamique'], + [b'xru', b'Marriammu'], + [b'xrw', b'Karawa'], + [b'xsa', b'Sabaean'], + [b'xsb', b'Sambal'], + [b'xsc', b'Scythian'], + [b'xsd', b'Sidetic'], + [b'xse', b'Sempan'], + [b'xsh', b'Shamang'], + [b'xsi', b'Sio'], + [b'xsj', b'Subi'], + [b'xsl', b'Slavey, South'], + [b'xsm', b'Kasem'], + [b'xsn', b'Sanga (Nigeria)'], + [b'xso', b'Solano'], + [b'xsp', b'Silopi'], + [b'xsq', b'Makhuwa-Saka'], + [b'xsr', b'Sherpa'], + [b'xss', b'Assan'], + [b'xsu', 'Sanum\xe1'], + [b'xsv', b'Sudovian'], + [b'xsy', b'Saisiyat'], + [b'xta', b'Mixtec, Alcozauca'], + [b'xtb', b'Mixtec, Chazumba'], + [b'xtc', b'Katcha-Kadugli-Miri'], + [b'xtd', b'Mixtec, Diuxi-Tilantongo'], + [b'xte', b'Ketengban'], + [b'xtg', b'Gaulish, Transalpine'], + [b'xth', b'Yitha Yitha'], + [b'xti', b'Mixtec, Sinicahua'], + [b'xtj', b'Mixtec, San Juan Teita'], + [b'xtl', b'Mixtec, Tijaltepec'], + [b'xtm', 'Mixtec, Magdalena Pe\xf1asco'], + [b'xtn', b'Mixtec, Northern Tlaxiaco'], + [b'xto', b'Tokharian A'], + [b'xtp', b'Mixtec, San Miguel Piedras'], + [b'xtq', b'Tumshuqese'], + [b'xtr', b'Tripuri, Early'], + [b'xts', b'Mixtec, Sindihui'], + [b'xtt', b'Mixtec, Tacahua'], + [b'xtu', b'Mixtec, Cuyamecalco'], + [b'xtv', b'Thawa'], + [b'xtw', 'Tawand\xea'], + [b'xty', b'Mixtec, Yoloxochitl'], + [b'xtz', b'Tasmanian'], + [b'xua', b'Kurumba, Alu'], + [b'xub', b'Kurumba, Betta'], + [b'xud', b'Umiida'], + [b'xug', b'Kunigami'], + [b'xuj', b'Kurumba, Jennu'], + [b'xul', b'Ngunawal'], + [b'xum', b'Umbrian'], + [b'xun', b'Unggaranggu'], + [b'xuo', b'Kuo'], + [b'xup', b'Umpqua, Upper'], + [b'xur', b'Urartian'], + [b'xut', b'Kuthant'], + [b'xuu', b'Kxoe'], + [b'xve', b'Venetic'], + [b'xvi', b'Kamviri'], + [b'xvn', b'Vandalic'], + [b'xvo', b'Volscian'], + [b'xvs', b'Vestinian'], + [b'xwa', b'Kwaza'], + [b'xwc', b'Woccon'], + [b'xwd', b'Wadi Wadi'], + [b'xwe', b'Gbe, Xwela'], + [b'xwg', b'Kwegu'], + [b'xwj', b'Wajuk'], + [b'xwk', b'Wangkumara'], + [b'xwl', b'Gbe, Western Xwla'], + [b'xwo', b'Oirat, Written'], + [b'xwr', b'Kwerba Mamberamo'], + [b'xwt', b'Wotjobaluk'], + [b'xww', b'Wemba Wemba'], + [b'xxb', b'Boro (Ghana)'], + [b'xxk', b"Ke'o"], + [b'xxm', b'Minkin'], + [b'xxr', 'Korop\xf3'], + [b'xxt', b'Tambora'], + [b'xya', b'Yaygir'], + [b'xyb', b'Yandjibara'], + [b'xyj', b'Mayi-Yapi'], + [b'xyk', b'Mayi-Kulan'], + [b'xyl', b'Yalakalore'], + [b'xyt', b'Mayi-Thakurti'], + [b'xyy', b'Yorta Yorta'], + [b'xzh', b'Zhang-Zhung'], + [b'xzm', b'Zemgalian'], + [b'xzp', b'Zapotec, Ancient'], + [b'yaa', b'Yaminahua'], + [b'yab', b'Yuhup'], + [b'yac', b'Yali, Pass Valley'], + [b'yad', b'Yagua'], + [b'yae', 'Pum\xe9'], + [b'yaf', b'Yaka (Democratic Republic of Congo)'], + [b'yag', 'Y\xe1mana'], + [b'yah', b'Yazgulyam'], + [b'yai', b'Yagnobi'], + [b'yaj', b'Banda-Yangere'], + [b'yak', b'Yakama'], + [b'yal', b'Yalunka'], + [b'yam', b'Yamba'], + [b'yan', b'Mayangna'], + [b'yao', b'Yao'], + [b'yap', b'Yapese'], + [b'yaq', b'Yaqui'], + [b'yar', b'Yabarana'], + [b'yas', b'Nugunu (Cameroon)'], + [b'yat', b'Yambeta'], + [b'yau', b'Yuwana'], + [b'yav', b'Yangben'], + [b'yaw', 'Yawalapit\xed'], + [b'yax', b'Yauma'], + [b'yay', b'Agwagwune'], + [b'yaz', b'Lokaa'], + [b'yba', b'Yala'], + [b'ybb', b'Yemba'], + [b'ybe', b'Yugur, West'], + [b'ybh', b'Yakha'], + [b'ybi', b'Yamphu'], + [b'ybj', b'Hasha'], + [b'ybk', b'Bokha'], + [b'ybl', b'Yukuben'], + [b'ybm', b'Yaben'], + [b'ybn', 'Yaba\xe2na'], + [b'ybo', b'Yabong'], + [b'ybx', b'Yawiyo'], + [b'yby', b'Yaweyuha'], + [b'ych', b'Chesu'], + [b'ycl', b'Lolopo'], + [b'ycn', b'Yucuna'], + [b'ycp', b'Chepya'], + [b'yda', b'Yanda'], + [b'ydd', b'Yiddish, Eastern'], + [b'yde', b'Yangum Dey'], + [b'ydg', b'Yidgha'], + [b'ydk', b'Yoidik'], + [b'yds', b'Yiddish Sign Language'], + [b'yea', b'Ravula'], + [b'yec', b'Yeniche'], + [b'yee', b'Yimas'], + [b'yei', b'Yeni'], + [b'yej', b'Yevanic'], + [b'yel', b'Yela'], + [b'yer', b'Tarok'], + [b'yes', b'Nyankpa'], + [b'yet', b'Yetfa'], + [b'yeu', b'Yerukula'], + [b'yev', b'Yapunda'], + [b'yey', b'Yeyi'], + [b'yga', b'Malyangapa'], + [b'ygi', b'Yiningayi'], + [b'ygl', b'Yangum Gel'], + [b'ygm', b'Yagomi'], + [b'ygp', b'Gepo'], + [b'ygr', b'Yagaria'], + [b'ygu', b'Yugul'], + [b'ygw', b'Yagwoia'], + [b'yha', b'Buyang, Baha'], + [b'yhd', b'Arabic, Judeo-Iraqi'], + [b'yhl', b'Phowa, Hlepho'], + [b'yia', b'Yinggarda'], + [b'yid', b'Yiddish'], + [b'yif', b'Ache'], + [b'yig', b'Nasu, Wusa'], + [b'yih', b'Yiddish, Western'], + [b'yii', b'Yidiny'], + [b'yij', b'Yindjibarndi'], + [b'yik', b'Lalo, Dongshanba'], + [b'yil', b'Yindjilandji'], + [b'yim', b'Naga, Yimchungru'], + [b'yin', b'Yinchia'], + [b'yip', b'Pholo'], + [b'yiq', b'Miqie'], + [b'yir', b'Awyu, North'], + [b'yis', b'Yis'], + [b'yit', b'Lalu, Eastern'], + [b'yiu', b'Awu'], + [b'yiv', b'Nisu, Northern'], + [b'yix', b'Yi, Axi'], + [b'yiz', b'Azhe'], + [b'yka', b'Yakan'], + [b'ykg', b'Yukaghir, Northern'], + [b'yki', b'Yoke'], + [b'ykk', b'Yakaikeke'], + [b'ykl', b'Khlula'], + [b'ykm', b'Kap'], + [b'ykn', b'Kua-nsi'], + [b'yko', b'Yasa'], + [b'ykr', b'Yekora'], + [b'ykt', b'Kathu'], + [b'yku', b'Kuamasi'], + [b'yky', b'Yakoma'], + [b'yla', b'Yaul'], + [b'ylb', b'Yaleba'], + [b'yle', b'Yele'], + [b'ylg', b'Yelogu'], + [b'yli', b'Yali, Angguruk'], + [b'yll', b'Yil'], + [b'ylm', b'Limi'], + [b'yln', b'Buyang, Langnian'], + [b'ylo', b'Yi, Naluo'], + [b'ylr', b'Yalarnnga'], + [b'ylu', b'Aribwaung'], + [b'yly', 'Ny\xe2layu'], + [b'ymb', b'Yambes'], + [b'ymc', b'Muji, Southern'], + [b'ymd', b'Muda'], + [b'yme', b'Yameo'], + [b'ymg', b'Yamongeri'], + [b'ymh', b'Mili'], + [b'ymi', b'Moji'], + [b'ymk', b'Makwe'], + [b'yml', b'Iamalele'], + [b'ymm', b'Maay'], + [b'ymn', b'Yamna'], + [b'ymo', b'Yangum Mon'], + [b'ymp', b'Yamap'], + [b'ymq', b'Muji, Qila'], + [b'ymr', b'Malasar'], + [b'yms', b'Mysian'], + [b'ymt', b'Mator-Taygi-Karagas'], + [b'ymx', b'Muji, Northern'], + [b'ymz', b'Muzi'], + [b'yna', b'Aluo'], + [b'ynd', b'Yandruwandha'], + [b'yne', b"Lang'e"], + [b'yng', b'Yango'], + [b'ynh', b'Yangho'], + [b'ynk', b'Yupik, Naukan'], + [b'ynl', b'Yangulam'], + [b'ynn', b'Yana'], + [b'yno', b'Yong'], + [b'ynq', b'Yendang'], + [b'yns', b'Yansi'], + [b'ynu', b'Yahuna'], + [b'yob', b'Yoba'], + [b'yog', b'Yogad'], + [b'yoi', b'Yonaguni'], + [b'yok', b'Yokuts'], + [b'yol', b'Yola'], + [b'yom', b'Yombe'], + [b'yon', b'Yongkom'], + [b'yor', b'Yoruba'], + [b'yot', b'Yotti'], + [b'yox', b'Yoron'], + [b'yoy', b'Yoy'], + [b'ypa', b'Phala'], + [b'ypb', b'Phowa, Labo'], + [b'ypg', b'Phola'], + [b'yph', b'Phupha'], + [b'ypm', b'Phuma'], + [b'ypn', b'Phowa, Ani'], + [b'ypo', b'Phola, Alo'], + [b'ypp', b'Phupa'], + [b'ypz', b'Phuza'], + [b'yra', b'Yerakai'], + [b'yrb', b'Yareba'], + [b'yre', 'Yaour\xe9'], + [b'yri', 'Yar\xed'], + [b'yrk', b'Nenets'], + [b'yrl', b'Nhengatu'], + [b'yrm', b'Yirrk-Mel'], + [b'yrn', b'Yerong'], + [b'yrs', b'Yarsun'], + [b'yrw', b'Yarawata'], + [b'yry', b'Yarluyandi'], + [b'ysc', b'Yassic'], + [b'ysd', b'Samatao'], + [b'ysg', b'Sonaga'], + [b'ysl', b'Yugoslavian Sign Language'], + [b'ysn', b'Sani'], + [b'yso', b'Nisi (China)'], + [b'ysp', b'Lolopo, Southern'], + [b'ysr', b'Yupik, Sirenik'], + [b'yss', b'Yessan-Mayo'], + [b'ysy', b'Sanie'], + [b'yta', b'Talu'], + [b'ytl', b'Tanglang'], + [b'ytp', b'Thopho'], + [b'ytw', b'Yout Wam'], + [b'yty', b'Yatay'], + [b'yua', b'Yucateco'], + [b'yub', b'Yugambal'], + [b'yuc', b'Yuchi'], + [b'yud', b'Arabic, Judeo-Tripolitanian'], + [b'yue', b'Chinese, Yue'], + [b'yuf', b'Havasupai-Walapai-Yavapai'], + [b'yug', b'Yug'], + [b'yui', 'Yurut\xed'], + [b'yuj', b'Karkar-Yuri'], + [b'yuk', b'Yuki'], + [b'yul', b'Yulu'], + [b'yum', b'Quechan'], + [b'yun', b'Bena (Nigeria)'], + [b'yup', b'Yukpa'], + [b'yuq', b'Yuqui'], + [b'yur', b'Yurok'], + [b'yut', b'Yopno'], + [b'yuu', b'Yugh'], + [b'yuw', b'Yau (Morobe Province)'], + [b'yux', b'Yukaghir, Southern'], + [b'yuy', b'Yugur, East'], + [b'yuz', b'Yuracare'], + [b'yva', b'Yawa'], + [b'yvt', b'Yavitero'], + [b'ywa', b'Kalou'], + [b'ywg', b'Yinhawangka'], + [b'ywl', b'Lalu, Western'], + [b'ywn', b'Yawanawa'], + [b'ywq', b'Yi, Wuding-Luquan'], + [b'ywr', b'Yawuru'], + [b'ywt', b'Lalo, Xishanba'], + [b'ywu', b'Nasu, Wumeng'], + [b'yww', b'Yawarawarga'], + [b'yxa', b'Mayawali'], + [b'yxg', b'Yagara'], + [b'yxl', b'Yardliyawarra'], + [b'yxm', b'Yinwum'], + [b'yxu', b'Yuyu'], + [b'yxy', b'Yabula Yabula'], + [b'yyr', b'Yir Yoront'], + [b'yyu', b'Yau (Sandaun Province)'], + [b'yyz', b'Ayizi'], + [b'yzg', b"Buyang, E'ma"], + [b'yzk', b'Zokhuo'], + [b'zaa', 'Zapotec, Sierra de Ju\xe1rez'], + [b'zab', 'Zapotec, San Juan Guelav\xeda'], + [b'zac', 'Zapotec, Ocotl\xe1n'], + [b'zad', b'Zapotec, Cajonos'], + [b'zae', b'Zapotec, Yareni'], + [b'zaf', b'Zapotec, Ayoquesco'], + [b'zag', b'Zaghawa'], + [b'zah', b'Zangwal'], + [b'zai', b'Zapotec, Isthmus'], + [b'zaj', b'Zaramo'], + [b'zak', b'Zanaki'], + [b'zal', b'Zauzou'], + [b'zam', 'Zapotec, Miahuatl\xe1n'], + [b'zao', b'Zapotec, Ozolotepec'], + [b'zap', b'Zapotec'], + [b'zaq', 'Zapotec, Alo\xe1pam'], + [b'zar', 'Zapotec, Rinc\xf3n'], + [b'zas', b'Zapotec, Santo Domingo Albarradas'], + [b'zat', b'Zapotec, Tabaa'], + [b'zau', b'Zangskari'], + [b'zav', b'Zapotec, Yatzachi'], + [b'zaw', b'Zapotec, Mitla'], + [b'zax', b'Zapotec, Xadani'], + [b'zay', b'Zayse-Zergulla'], + [b'zaz', b'Zari'], + [b'zbc', b'Berawan, Central'], + [b'zbe', b'Berawan, East'], + [b'zbl', b'Blissymbols'], + [b'zbt', b'Batui'], + [b'zbw', b'Berawan, West'], + [b'zca', b'Zapotec, Coatecas Altas'], + [b'zch', b'Zhuang, Central Hongshuihe'], + [b'zdj', b'Comorian, Ngazidja'], + [b'zea', b'Zeeuws'], + [b'zeg', b'Zenag'], + [b'zeh', b'Zhuang, Eastern Hongshuihe'], + [b'zen', b'Zenaga'], + [b'zga', b'Kinga'], + [b'zgb', b'Zhuang, Guibei'], + [b'zgh', b'Tamazight, Standard Moroccan'], + [b'zgm', b'Zhuang, Minz'], + [b'zgn', b'Zhuang, Guibian'], + [b'zgr', b'Magori'], + [b'zha', b'Zhuang'], + [b'zhb', b'Zhaba'], + [b'zhd', b'Zhuang, Dai'], + [b'zhi', b'Zhire'], + [b'zhn', b'Zhuang, Nong'], + [b'zho', b'Chinese'], + [b'zhw', b'Zhoa'], + [b'zia', b'Zia'], + [b'zib', b'Zimbabwe Sign Language'], + [b'zik', b'Zimakani'], + [b'zil', b'Zialo'], + [b'zim', b'Mesme'], + [b'zin', b'Zinza'], + [b'zir', b'Ziriya'], + [b'ziw', b'Zigula'], + [b'ziz', b'Zizilivakan'], + [b'zka', b'Kaimbulawa'], + [b'zkb', b'Koibal'], + [b'zkd', b'Kadu'], + [b'zkg', b'Koguryo'], + [b'zkh', b'Khorezmian'], + [b'zkk', b'Karankawa'], + [b'zkn', b'Kanan'], + [b'zko', b'Kott'], + [b'zkp', 'Kaing\xe1ng, S\xe3o Paulo'], + [b'zkr', b'Zakhring'], + [b'zkt', b'Kitan'], + [b'zku', b'Kaurna'], + [b'zkv', b'Krevinian'], + [b'zkz', b'Khazar'], + [b'zlj', b'Zhuang, Liujiang'], + [b'zlm', b'Malay (individual language)'], + [b'zln', b'Zhuang, Lianshan'], + [b'zlq', b'Zhuang, Liuqian'], + [b'zma', b'Manda (Australia)'], + [b'zmb', b'Zimba'], + [b'zmc', b'Margany'], + [b'zmd', b'Maridan'], + [b'zme', b'Mangerr'], + [b'zmf', b'Mfinu'], + [b'zmg', b'Marti Ke'], + [b'zmh', b'Makolkol'], + [b'zmi', b'Negeri Sembilan Malay'], + [b'zmj', b'Maridjabin'], + [b'zmk', b'Mandandanyi'], + [b'zml', b'Madngele'], + [b'zmm', b'Marimanindji'], + [b'zmn', b'Mbangwe'], + [b'zmo', b'Molo'], + [b'zmp', b'Mpuono'], + [b'zmq', b'Mituku'], + [b'zmr', b'Maranunggu'], + [b'zms', b'Mbesa'], + [b'zmt', b'Maringarr'], + [b'zmu', b'Muruwari'], + [b'zmv', b'Mbariman-Gudhinma'], + [b'zmw', b'Mbo (Democratic Republic of Congo)'], + [b'zmx', b'Bomitaba'], + [b'zmy', b'Mariyedi'], + [b'zmz', b'Mbandja'], + [b'zna', b'Zan Gula'], + [b'zne', b'Zande (individual language)'], + [b'zng', b'Mang'], + [b'znk', b'Manangkari'], + [b'zns', b'Mangas'], + [b'zoc', 'Zoque, Copainal\xe1'], + [b'zoh', b'Zoque, Chimalapa'], + [b'zom', b'Zou'], + [b'zoo', 'Zapotec, Asunci\xf3n Mixtepec'], + [b'zoq', b'Zoque, Tabasco'], + [b'zor', 'Zoque, Ray\xf3n'], + [b'zos', 'Zoque, Francisco Le\xf3n'], + [b'zpa', b'Zapotec, Lachiguiri'], + [b'zpb', b'Zapotec, Yautepec'], + [b'zpc', b'Zapotec, Choapan'], + [b'zpd', 'Zapotec, Southeastern Ixtl\xe1n'], + [b'zpe', b'Zapotec, Petapa'], + [b'zpf', b'Zapotec, San Pedro Quiatoni'], + [b'zpg', b'Zapotec, Guevea De Humboldt'], + [b'zph', b'Zapotec, Totomachapan'], + [b'zpi', 'Zapotec, Santa Mar\xeda Quiegolani'], + [b'zpj', b'Zapotec, Quiavicuzas'], + [b'zpk', b'Zapotec, Tlacolulita'], + [b'zpl', 'Zapotec, Lachix\xedo'], + [b'zpm', b'Zapotec, Mixtepec'], + [b'zpn', 'Zapotec, Santa In\xe9s Yatzechi'], + [b'zpo', 'Zapotec, Amatl\xe1n'], + [b'zpp', b'Zapotec, El Alto'], + [b'zpq', b'Zapotec, Zoogocho'], + [b'zpr', b'Zapotec, Santiago Xanica'], + [b'zps', 'Zapotec, Coatl\xe1n'], + [b'zpt', 'Zapotec, San Vicente Coatl\xe1n'], + [b'zpu', 'Zapotec, Yal\xe1lag'], + [b'zpv', b'Zapotec, Chichicapan'], + [b'zpw', b'Zapotec, Zaniza'], + [b'zpx', b'Zapotec, San Baltazar Loxicha'], + [b'zpy', b'Zapotec, Mazaltepec'], + [b'zpz', b'Zapotec, Texmelucan'], + [b'zqe', b'Zhuang, Qiubei'], + [b'zra', b'Kara (Korea)'], + [b'zrg', b'Mirgan'], + [b'zrn', b'Zerenkel'], + [b'zro', 'Z\xe1paro'], + [b'zrp', b'Zarphatic'], + [b'zrs', b'Mairasi'], + [b'zsa', b'Sarasira'], + [b'zsk', b'Kaskean'], + [b'zsl', b'Zambian Sign Language'], + [b'zsm', b'Malay, Standard'], + [b'zsr', b'Zapotec, Southern Rincon'], + [b'zsu', b'Sukurum'], + [b'zte', b'Zapotec, Elotepec'], + [b'ztg', 'Zapotec, Xanagu\xeda'], + [b'ztl', 'Zapotec, Lapagu\xeda-Guivini'], + [b'ztm', 'Zapotec, San Agust\xedn Mixtepec'], + [b'ztn', b'Zapotec, Santa Catarina Albarradas'], + [b'ztp', b'Zapotec, Loxicha'], + [b'ztq', 'Zapotec, Quioquitani-Quier\xed'], + [b'zts', b'Zapotec, Tilquiapan'], + [b'ztt', b'Zapotec, Tejalapan'], + [b'ztu', 'Zapotec, G\xfcil\xe1'], + [b'ztx', b'Zapotec, Zaachila'], + [b'zty', b'Zapotec, Yatee'], + [b'zua', b'Zeem'], + [b'zuh', b'Tokano'], + [b'zul', b'Zulu'], + [b'zum', b'Kumzari'], + [b'zun', b'Zuni'], + [b'zuy', b'Zumaya'], + [b'zwa', b'Zay'], + [b'zxx', b'No linguistic content'], + [b'zyb', b'Zhuang, Yongbei'], + [b'zyg', b'Zhuang, Yang'], + [b'zyj', b'Zhuang, Youjiang'], + [b'zyn', b'Zhuang, Yongnan'], + [b'zyp', b'Chin, Zyphe'], + [b'zza', b'Zaza'], + [b'zzj', b'Zhuang, Zuojiang'] + ] + ), ), ] diff --git a/mayan/apps/documents/migrations/0035_auto_20161102_0633.py b/mayan/apps/documents/migrations/0035_auto_20161102_0633.py index 47f54be51a..1cd12d1349 100644 --- a/mayan/apps/documents/migrations/0035_auto_20161102_0633.py +++ b/mayan/apps/documents/migrations/0035_auto_20161102_0633.py @@ -13,8 +13,17 @@ class Migration(migrations.Migration): migrations.CreateModel( name='DocumentPageCachedImage', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('filename', models.CharField(max_length=128, verbose_name='Filename')), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, + auto_created=True, primary_key=True + ) + ), + ( + 'filename', models.CharField( + max_length=128, verbose_name='Filename' + ) + ), ], options={ 'verbose_name': 'Document page cached image', @@ -36,6 +45,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='documentpagecachedimage', name='document_page', - field=models.ForeignKey(related_name='cached_images', verbose_name='Document page', to='documents.DocumentPage'), + field=models.ForeignKey( + related_name='cached_images', verbose_name='Document page', + to='documents.DocumentPage' + ), ), ] diff --git a/mayan/apps/documents/migrations/0040_auto_20170725_1111.py b/mayan/apps/documents/migrations/0040_auto_20170725_1111.py index c2494bfbec..52b3cafe1c 100644 --- a/mayan/apps/documents/migrations/0040_auto_20170725_1111.py +++ b/mayan/apps/documents/migrations/0040_auto_20170725_1111.py @@ -13,7 +13,8 @@ class Migration(migrations.Migration): migrations.AlterModelOptions( name='documentversion', options={ - 'ordering': ('timestamp',), 'verbose_name': 'Document version', + 'ordering': ('timestamp',), + 'verbose_name': 'Document version', 'verbose_name_plural': 'Document version' }, ), diff --git a/mayan/apps/documents/migrations/0048_auto_20190711_0544.py b/mayan/apps/documents/migrations/0048_auto_20190711_0544.py new file mode 100644 index 0000000000..b533678ef3 --- /dev/null +++ b/mayan/apps/documents/migrations/0048_auto_20190711_0544.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.documents.models.document_version_models +import mayan.apps.storage.classes + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0047_auto_20180917_0737'), + ] + + operations = [ + migrations.AlterField( + model_name='documentversion', + name='file', + field=models.FileField( + storage=mayan.apps.storage.classes.FakeStorageSubclass(), + upload_to=mayan.apps.documents.models.document_version_models.UUID_FUNCTION, + verbose_name='File' + ), + ), + ] diff --git a/mayan/apps/documents/migrations/0049_auto_20190715_0454.py b/mayan/apps/documents/migrations/0049_auto_20190715_0454.py new file mode 100644 index 0000000000..ccba51c786 --- /dev/null +++ b/mayan/apps/documents/migrations/0049_auto_20190715_0454.py @@ -0,0 +1,37 @@ +from __future__ import unicode_literals + +from django.db import migrations + +from ..storages import storage_documentimagecache + + +def operation_clear_old_cache(apps, schema_editor): + DocumentPageCachedImage = apps.get_model( + app_label='documents', model_name='DocumentPageCachedImage' + ) + + for cached_image in DocumentPageCachedImage.objects.using(schema_editor.connection.alias).all(): + # Delete each cached image directly since the model doesn't exists and + # will not trigger the physical deletion of the stored file + storage_documentimagecache.delete(cached_image.filename) + cached_image.delete() + + +class Migration(migrations.Migration): + dependencies = [ + ('documents', '0048_auto_20190711_0544'), + ] + + operations = [ + migrations.RunPython( + code=operation_clear_old_cache, + reverse_code=migrations.RunPython.noop + ), + migrations.RemoveField( + model_name='documentpagecachedimage', + name='document_page', + ), + migrations.DeleteModel( + name='DocumentPageCachedImage', + ), + ] diff --git a/mayan/apps/documents/migrations/0050_auto_20190725_0451.py b/mayan/apps/documents/migrations/0050_auto_20190725_0451.py new file mode 100644 index 0000000000..d87e5c441f --- /dev/null +++ b/mayan/apps/documents/migrations/0050_auto_20190725_0451.py @@ -0,0 +1,22 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0049_auto_20190715_0454'), + ] + + operations = [ + migrations.AlterField( + model_name='document', + name='language', + field=models.CharField( + blank=True, default='eng', + help_text='The dominant language in the document.', + max_length=8, verbose_name='Language' + ), + ), + ] diff --git a/mayan/apps/documents/migrations/0051_documentpage_enabled.py b/mayan/apps/documents/migrations/0051_documentpage_enabled.py new file mode 100644 index 0000000000..5835be769b --- /dev/null +++ b/mayan/apps/documents/migrations/0051_documentpage_enabled.py @@ -0,0 +1,18 @@ +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0050_auto_20190725_0451'), + ] + + operations = [ + migrations.AddField( + model_name='documentpage', + name='enabled', + field=models.BooleanField(default=True, verbose_name='Enabled'), + ), + ] diff --git a/mayan/apps/documents/migrations/0052_auto_20191130_2209.py b/mayan/apps/documents/migrations/0052_auto_20191130_2209.py new file mode 100644 index 0000000000..0fc4a7b54a --- /dev/null +++ b/mayan/apps/documents/migrations/0052_auto_20191130_2209.py @@ -0,0 +1,23 @@ +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0051_documentpage_enabled'), + ] + + operations = [ + migrations.AlterField( + model_name='documentpage', + name='document_version', + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='version_pages', to='documents.DocumentVersion', + verbose_name='Document version' + ), + ), + ] diff --git a/mayan/apps/documents/models/document_models.py b/mayan/apps/documents/models/document_models.py index 129ddae920..197850478d 100644 --- a/mayan/apps/documents/models/document_models.py +++ b/mayan/apps/documents/models/document_models.py @@ -13,7 +13,7 @@ from django.utils.translation import ugettext, ugettext_lazy as _ from ..events import ( event_document_create, event_document_properties_edit, - event_document_type_change, + event_document_trashed, event_document_type_change, ) from ..managers import DocumentManager, PassthroughManager, TrashCanManager from ..settings import setting_language @@ -69,7 +69,6 @@ class Document(models.Model): 'Whether or not this document is in the trash.' ), editable=False, verbose_name=_('In trash?') ) - # TODO: set editable to False deleted_date_time = models.DateTimeField( blank=True, editable=True, help_text=_( 'The server date and time when the document was moved to the ' @@ -102,13 +101,24 @@ class Document(models.Model): ) return RecentDocument.objects.add_document_for_user(user, self) + @property + def checksum(self): + return self.latest_version.checksum + + @property + def date_updated(self): + return self.latest_version.timestamp + def delete(self, *args, **kwargs): to_trash = kwargs.pop('to_trash', True) + _user = kwargs.pop('_user', None) if not self.in_trash and to_trash: self.in_trash = True self.deleted_date_time = now() - self.save() + with transaction.atomic(): + self.save(_commit_events=False) + event_document_trashed.commit(actor=_user, target=self) else: with transaction.atomic(): for version in self.versions.all(): @@ -127,6 +137,14 @@ class Document(models.Model): else: return False + @property + def file_mime_encoding(self): + return self.latest_version.encoding + + @property + def file_mimetype(self): + return self.latest_version.mimetype + def get_absolute_url(self): return reverse( viewname='documents:document_preview', kwargs={'pk': self.pk} @@ -137,14 +155,14 @@ class Document(models.Model): if latest_version: return latest_version.get_api_image_url(*args, **kwargs) - def invalidate_cache(self): - for document_version in self.versions.all(): - document_version.invalidate_cache() - @property def is_in_trash(self): return self.in_trash + @property + def latest_version(self): + return self.versions.order_by('timestamp').last() + def natural_key(self): return (self.uuid,) natural_key.dependencies = ['documents.DocumentType'] @@ -170,6 +188,34 @@ class Document(models.Model): """ return self.latest_version.open(*args, **kwargs) + @property + def page_count(self): + return self.latest_version.page_count + + @property + def pages(self): + try: + return self.latest_version.pages + except AttributeError: + # Document has no version yet + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) + + return DocumentPage.objects.none() + + @property + def pages_all(self): + try: + return self.latest_version.pages_all + except AttributeError: + # Document has no version yet + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) + + return DocumentPage.objects.none() + def restore(self): self.in_trash = False self.save() @@ -216,41 +262,3 @@ class Document(models.Model): @property def size(self): return self.latest_version.size - - # Compatibility methods - - @property - def checksum(self): - return self.latest_version.checksum - - @property - def date_updated(self): - return self.latest_version.timestamp - - @property - def file_mime_encoding(self): - return self.latest_version.encoding - - @property - def file_mimetype(self): - return self.latest_version.mimetype - - @property - def latest_version(self): - return self.versions.order_by('timestamp').last() - - @property - def page_count(self): - return self.latest_version.page_count - - @property - def pages(self): - try: - return self.latest_version.pages - except AttributeError: - # Document has no version yet - DocumentPage = apps.get_model( - app_label='documents', model_name='DocumentPage' - ) - - return DocumentPage.objects.none() diff --git a/mayan/apps/documents/models/document_page_models.py b/mayan/apps/documents/models/document_page_models.py index afbf34cef3..00be66ab4b 100644 --- a/mayan/apps/documents/models/document_page_models.py +++ b/mayan/apps/documents/models/document_page_models.py @@ -4,31 +4,31 @@ import logging from furl import furl -from django.core.files.base import ContentFile from django.db import models from django.urls import reverse from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ from mayan.apps.converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION -from mayan.apps.converter.models import Transformation + +from mayan.apps.converter.models import LayerTransformation from mayan.apps.converter.transformations import ( BaseTransformation, TransformationResize, TransformationRotate, TransformationZoom ) from mayan.apps.converter.utils import get_converter_class -from ..managers import DocumentPageCachedImage, DocumentPageManager +from ..managers import DocumentPageManager from ..settings import ( setting_disable_base_image_cache, setting_disable_transformed_image_cache, setting_display_width, setting_display_height, setting_zoom_max_level, setting_zoom_min_level ) -from ..storages import storage_documentimagecache from .document_version_models import DocumentVersion -__all__ = ('DocumentPage', 'DocumentPageCachedImage', 'DocumentPageResult') +__all__ = ('DocumentPage', 'DocumentPageResult') logger = logging.getLogger(__name__) @@ -38,15 +38,17 @@ class DocumentPage(models.Model): Model that describes a document version page """ document_version = models.ForeignKey( - on_delete=models.CASCADE, related_name='pages', to=DocumentVersion, + on_delete=models.CASCADE, related_name='version_pages', to=DocumentVersion, verbose_name=_('Document version') ) + enabled = models.BooleanField(default=True, verbose_name=_('Enabled')) page_number = models.PositiveIntegerField( db_index=True, default=1, editable=False, verbose_name=_('Page number') ) objects = DocumentPageManager() + passthrough = models.Manager() class Meta: ordering = ('page_number',) @@ -56,12 +58,15 @@ class DocumentPage(models.Model): def __str__(self): return self.get_label() - @property - def cache_filename(self): - return 'page-cache-{}'.format(self.uuid) + @cached_property + def cache_partition(self): + partition, created = self.document_version.cache.partitions.get_or_create( + name=self.uuid + ) + return partition def delete(self, *args, **kwargs): - self.invalidate_cache() + self.cache_partition.delete() super(DocumentPage, self).delete(*args, **kwargs) def detect_orientation(self): @@ -78,31 +83,26 @@ class DocumentPage(models.Model): def document(self): return self.document_version.document - def generate_image(self, *args, **kwargs): - transformation_list = self.get_combined_transformation_list(*args, **kwargs) - - cache_filename = '{}-{}'.format( - self.cache_filename, BaseTransformation.combine(transformation_list) - ) + def generate_image(self, user=None, **kwargs): + transformation_list = self.get_combined_transformation_list(user=user, **kwargs) + combined_cache_filename = BaseTransformation.combine(transformation_list) # Check is transformed image is available - logger.debug('transformations cache filename: %s', cache_filename) + logger.debug('transformations cache filename: %s', combined_cache_filename) - if not setting_disable_transformed_image_cache.value and storage_documentimagecache.exists(cache_filename): + if not setting_disable_transformed_image_cache.value and self.cache_partition.get_file(filename=combined_cache_filename): logger.debug( - 'transformations cache file "%s" found', cache_filename + 'transformations cache file "%s" found', combined_cache_filename ) else: logger.debug( - 'transformations cache file "%s" not found', cache_filename + 'transformations cache file "%s" not found', combined_cache_filename ) image = self.get_image(transformations=transformation_list) - with storage_documentimagecache.open(cache_filename, 'wb+') as file_object: + with self.cache_partition.create_file(filename=combined_cache_filename) as file_object: file_object.write(image.getvalue()) - self.cached_images.create(filename=cache_filename) - - return cache_filename + return combined_cache_filename def get_absolute_url(self): return reverse( @@ -136,7 +136,7 @@ class DocumentPage(models.Model): return final_url.tostr() - def get_combined_transformation_list(self, *args, **kwargs): + def get_combined_transformation_list(self, user=None, *args, **kwargs): """ Return a list of transformation containing the server side document page transformation as well as tranformations created @@ -159,11 +159,15 @@ class DocumentPage(models.Model): zoom_level = setting_zoom_max_level.value # Generate transformation hash - transformation_list = [] + maximum_layer_order = kwargs.get('maximum_layer_order', None) + # Stored transformations first - for stored_transformation in Transformation.objects.get_for_object(self, as_classes=True): + for stored_transformation in LayerTransformation.objects.get_for_object( + self, maximum_layer_order=maximum_layer_order, as_classes=True, + user=user + ): transformation_list.append(stored_transformation) # Interactive transformations second @@ -186,13 +190,15 @@ class DocumentPage(models.Model): return transformation_list def get_image(self, transformations=None): - cache_filename = self.cache_filename + cache_filename = 'base_image' logger.debug('Page cache filename: %s', cache_filename) - if not setting_disable_base_image_cache.value and storage_documentimagecache.exists(cache_filename): + cache_file = self.cache_partition.get_file(filename=cache_filename) + + if not setting_disable_base_image_cache.value and cache_file: logger.debug('Page cache file "%s" found', cache_filename) - with storage_documentimagecache.open(cache_filename) as file_object: + with cache_file.open() as file_object: converter = get_converter_class()( file_object=file_object ) @@ -200,8 +206,8 @@ class DocumentPage(models.Model): converter.seek_page(page_number=0) # This code is also repeated below to allow using a context - # manager with storage_documentimagecache.open and close it - # automatically. + # manager with cache_file.open and close it automatically. + # Apply runtime transformations for transformation in transformations: converter.transform(transformation=transformation) @@ -218,14 +224,11 @@ class DocumentPage(models.Model): page_image = converter.get_page() - # Since open "wb+" doesn't create files, check if the file - # exists, if not then create it - if not storage_documentimagecache.exists(cache_filename): - storage_documentimagecache.save(name=cache_filename, content=ContentFile(content='')) - - with storage_documentimagecache.open(cache_filename, 'wb+') as file_object: + # Since open "wb+" doesn't create files, create it explicitly + with self.cache_partition.create_file(filename=cache_filename) as file_object: file_object.write(page_image.getvalue()) + # Apply runtime transformations for transformation in transformations: converter.transform(transformation=transformation) @@ -236,14 +239,8 @@ class DocumentPage(models.Model): 'Error creating page cache file "%s"; %s', cache_filename, exception ) - storage_documentimagecache.delete(cache_filename) raise - def invalidate_cache(self): - storage_documentimagecache.delete(self.cache_filename) - for cached_image in self.cached_images.all(): - cached_image.delete() - @property def is_in_trash(self): return self.document.is_in_trash @@ -254,7 +251,7 @@ class DocumentPage(models.Model): ) % { 'document': force_text(self.document), 'page_num': self.page_number, - 'total_pages': self.document_version.pages.count() + 'total_pages': self.document_version.pages_all.count() } get_label.short_description = _('Label') @@ -277,38 +274,6 @@ class DocumentPage(models.Model): return '{}-{}'.format(self.document_version.uuid, self.pk) -class DocumentPageCachedImage(models.Model): - document_page = models.ForeignKey( - on_delete=models.CASCADE, related_name='cached_images', - to=DocumentPage, verbose_name=_('Document page') - ) - datetime = models.DateTimeField( - auto_now_add=True, db_index=True, verbose_name=_('Date time') - ) - filename = models.CharField(max_length=128, verbose_name=_('Filename')) - file_size = models.PositiveIntegerField( - db_index=True, default=0, verbose_name=_('File size') - ) - - objects = DocumentPageCachedImage() - - class Meta: - verbose_name = _('Document page cached image') - verbose_name_plural = _('Document page cached images') - - def delete(self, *args, **kwargs): - storage_documentimagecache.delete(self.filename) - return super(DocumentPageCachedImage, self).delete(*args, **kwargs) - - def natural_key(self): - return (self.filename, self.document_page.natural_key()) - natural_key.dependencies = ['documents.DocumentPage'] - - def save(self, *args, **kwargs): - self.file_size = storage_documentimagecache.size(self.filename) - return super(DocumentPageCachedImage, self).save(*args, **kwargs) - - class DocumentPageResult(DocumentPage): class Meta: ordering = ('document_version__document', 'page_number') diff --git a/mayan/apps/documents/models/document_version_models.py b/mayan/apps/documents/models/document_version_models.py index 78b837860d..980989d4a4 100644 --- a/mayan/apps/documents/models/document_version_models.py +++ b/mayan/apps/documents/models/document_version_models.py @@ -7,24 +7,25 @@ import shutil import uuid from django.apps import apps -from django.core.files.base import ContentFile from django.db import models, transaction from django.template import Template, Context from django.urls import reverse from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ from mayan.apps.converter.exceptions import InvalidOfficeFormat, PageCountError -from mayan.apps.converter.models import Transformation +from mayan.apps.converter.layers import layer_saved_transformations from mayan.apps.converter.transformations import TransformationRotate from mayan.apps.converter.utils import get_converter_class from mayan.apps.mimetype.api import get_mimetype from ..events import event_document_new_version, event_document_version_revert +from ..literals import DOCUMENT_IMAGES_CACHE_NAME from ..managers import DocumentVersionManager from ..settings import setting_fix_orientation, setting_hash_block_size from ..signals import post_document_created, post_version_upload -from ..storages import storage_documentversion, storage_documentimagecache +from ..storages import storage_documentversion from .document_models import Document @@ -61,14 +62,6 @@ class DocumentVersion(models.Model): _pre_open_hooks = {} _post_save_hooks = {} - @classmethod - def register_pre_open_hook(cls, order, func): - cls._pre_open_hooks[order] = func - - @classmethod - def register_post_save_hook(cls, order, func): - cls._post_save_hooks[order] = func - document = models.ForeignKey( on_delete=models.CASCADE, related_name='versions', to=Document, verbose_name=_('Document') @@ -118,18 +111,35 @@ class DocumentVersion(models.Model): objects = DocumentVersionManager() + @classmethod + def register_pre_open_hook(cls, order, func): + cls._pre_open_hooks[order] = func + + @classmethod + def register_post_save_hook(cls, order, func): + cls._post_save_hooks[order] = func + def __str__(self): return self.get_rendered_string() - @property - def cache_filename(self): - return 'document-version-{}'.format(self.uuid) + @cached_property + def cache(self): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + return Cache.objects.get(name=DOCUMENT_IMAGES_CACHE_NAME) + + @cached_property + def cache_partition(self): + partition, created = self.cache.partitions.get_or_create( + name='version-{}'.format(self.uuid) + ) + return partition def delete(self, *args, **kwargs): for page in self.pages.all(): page.delete() self.file.storage.delete(self.file.name) + self.cache_partition.delete() return super(DocumentVersion, self).delete(*args, **kwargs) @@ -146,7 +156,7 @@ class DocumentVersion(models.Model): for page in self.pages.all(): degrees = page.detect_orientation() if degrees: - Transformation.objects.add_to_object( + layer_saved_transformations.add_to_object( obj=page, transformation=TransformationRotate, arguments='{{"degrees": {}}}'.format(360 - degrees) ) @@ -164,43 +174,36 @@ class DocumentVersion(models.Model): return first_page.get_api_image_url(*args, **kwargs) def get_intermediate_file(self): - cache_filename = self.cache_filename - logger.debug('Intermidiate filename: %s', cache_filename) - - if storage_documentimagecache.exists(cache_filename): - logger.debug('Intermidiate file "%s" found.', cache_filename) - - return storage_documentimagecache.open(cache_filename) + cache_filename = 'intermediate_file' + cache_file = self.cache_partition.get_file(filename=cache_filename) + if cache_file: + logger.debug('Intermidiate file found.') + return cache_file.open() else: - logger.debug('Intermidiate file "%s" not found.', cache_filename) + logger.debug('Intermidiate file not found.') try: with self.open() as version_file_object: - converter = get_converter_class()(file_object=version_file_object) + converter = get_converter_class()( + file_object=version_file_object + ) with converter.to_pdf() as pdf_file_object: - - # Since open "wb+" doesn't create files, check if the file - # exists, if not then create it - if not storage_documentimagecache.exists(cache_filename): - storage_documentimagecache.save( - name=cache_filename, content=ContentFile(content='') - ) - - with storage_documentimagecache.open(cache_filename, mode='wb+') as file_object: + with self.cache_partition.create_file(filename=cache_filename) as file_object: shutil.copyfileobj( fsrc=pdf_file_object, fdst=file_object ) - return storage_documentimagecache.open(cache_filename) + return self.cache_partition.get_file(filename=cache_filename).open() except InvalidOfficeFormat: return self.open() except Exception as exception: - # Cleanup in case of error logger.error( 'Error creating intermediate file "%s"; %s.', cache_filename, exception ) - storage_documentimagecache.delete(cache_filename) + cache_file = self.cache_partition.get_file(filename=cache_filename) + if cache_file: + cache_file.delete() raise def get_rendered_string(self, preserve_extension=False): @@ -223,11 +226,6 @@ class DocumentVersion(models.Model): return (self.checksum, self.document.natural_key()) natural_key.dependencies = ['documents.Document'] - def invalidate_cache(self): - storage_documentimagecache.delete(self.cache_filename) - for page in self.pages.all(): - page.invalidate_cache() - @property def is_in_trash(self): return self.document.is_in_trash @@ -248,6 +246,13 @@ class DocumentVersion(models.Model): return result + @property + def pages_all(self): + DocumentPage = apps.get_model( + app_label='documents', model_name='DocumentPage' + ) + return DocumentPage.passthrough.filter(document_version=self) + @property def page_count(self): """ @@ -255,6 +260,10 @@ class DocumentVersion(models.Model): """ return self.pages.count() + @property + def pages(self): + return self.version_pages.all() + def revert(self, _user=None): """ Delete the subsequent versions after this one diff --git a/mayan/apps/documents/queues.py b/mayan/apps/documents/queues.py index 57f4c4b32a..5ac0fa5f01 100644 --- a/mayan/apps/documents/queues.py +++ b/mayan/apps/documents/queues.py @@ -61,10 +61,6 @@ queue_documents_periodic.add_task_type( schedule=timedelta(seconds=DELETE_STALE_STUBS_INTERVAL), ) -queue_tools.add_task_type( - dotted_path='mayan.apps.documents.tasks.task_clear_image_cache', - label=_('Clear image cache') -) queue_tools.add_task_type( dotted_path='mayan.apps.documents.tasks.task_scan_duplicates_all', label=_('Duplicated document scan') diff --git a/mayan/apps/documents/serializers.py b/mayan/apps/documents/serializers.py index 9632a546cb..873b573886 100644 --- a/mayan/apps/documents/serializers.py +++ b/mayan/apps/documents/serializers.py @@ -237,7 +237,10 @@ class DeletedDocumentSerializer(serializers.HyperlinkedModelSerializer): class DocumentSerializer(serializers.HyperlinkedModelSerializer): - document_type = DocumentTypeSerializer() + document_type = DocumentTypeSerializer(read_only=True) + document_type_change_url = serializers.HyperlinkedIdentityField( + view_name='rest_api:document-type-change', + ) latest_version = DocumentVersionSerializer(many=False, read_only=True) versions_url = serializers.HyperlinkedIdentityField( view_name='rest_api:document-version-list', @@ -246,16 +249,27 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer): class Meta: extra_kwargs = { 'document_type': {'view_name': 'rest_api:documenttype-detail'}, - 'url': {'view_name': 'rest_api:document-detail'} + 'url': {'view_name': 'rest_api:document-detail'}, } fields = ( - 'date_added', 'description', 'document_type', 'id', 'label', - 'language', 'latest_version', 'url', 'uuid', 'versions_url', + 'date_added', 'description', 'document_type', + 'document_type_change_url', 'id', 'label', 'language', + 'latest_version', 'url', 'uuid', 'pk', 'versions_url', ) model = Document read_only_fields = ('document_type',) +class NewDocumentDocumentTypeSerializer(serializers.ModelSerializer): + new_document_type = serializers.PrimaryKeyRelatedField( + queryset=DocumentType.objects.all(), write_only=True + ) + + class Meta: + fields = ('new_document_type',) + model = Document + + class WritableDocumentSerializer(serializers.ModelSerializer): document_type = DocumentTypeSerializer(read_only=True) latest_version = DocumentVersionSerializer(many=False, read_only=True) diff --git a/mayan/apps/documents/setting_migrations.py b/mayan/apps/documents/setting_migrations.py new file mode 100644 index 0000000000..d45a470d22 --- /dev/null +++ b/mayan/apps/documents/setting_migrations.py @@ -0,0 +1,20 @@ +from __future__ import unicode_literals + +from mayan.apps.common.serialization import yaml_load +from mayan.apps.smart_settings.classes import NamespaceMigration + + +class DocumentsSettingMigration(NamespaceMigration): + """ + From version 0001 to 0002 backend arguments are no longer quoted + but YAML valid too. Changed in version 3.3. + """ + def documents_cache_storage_backend_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) + + def documents_storage_backend_arguments_0001(self, value): + return yaml_load( + stream=value or '{}', + ) diff --git a/mayan/apps/documents/settings.py b/mayan/apps/documents/settings.py index ca27496599..26162f9f31 100644 --- a/mayan/apps/documents/settings.py +++ b/mayan/apps/documents/settings.py @@ -8,25 +8,39 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.smart_settings.classes import Namespace from .literals import ( - DEFAULT_DOCUMENTS_HASH_BLOCK_SIZE, DEFAULT_LANGUAGE, DEFAULT_LANGUAGE_CODES + DEFAULT_DOCUMENTS_CACHE_MAXIMUM_SIZE, DEFAULT_DOCUMENTS_HASH_BLOCK_SIZE, + DEFAULT_LANGUAGE, DEFAULT_LANGUAGE_CODES +) +from .setting_migrations import DocumentsSettingMigration +from .utils import callback_update_cache_size + +namespace = Namespace( + label=_('Documents'), migration_class=DocumentsSettingMigration, + name='documents', version='0002' ) -namespace = Namespace(label=_('Documents'), name='documents') - +setting_document_cache_maximum_size = namespace.add_setting( + global_name='DOCUMENTS_CACHE_MAXIMUM_SIZE', + default=DEFAULT_DOCUMENTS_CACHE_MAXIMUM_SIZE, + help_text=_( + 'The threshold at which the DOCUMENT_CACHE_STORAGE_BACKEND will start ' + 'deleting the oldest document image cache files. Specify the size in ' + 'bytes.' + ), post_edit_function=callback_update_cache_size +) setting_documentimagecache_storage = namespace.add_setting( global_name='DOCUMENTS_CACHE_STORAGE_BACKEND', default='django.core.files.storage.FileSystemStorage', help_text=_( 'Path to the Storage subclass to use when storing the cached ' 'document image files.' - ), quoted=True + ) ) setting_documentimagecache_storage_arguments = namespace.add_setting( global_name='DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS', - default='{{location: {}}}'.format( - os.path.join(settings.MEDIA_ROOT, 'document_cache') - ), help_text=_( + default={'location': os.path.join(settings.MEDIA_ROOT, 'document_cache')}, + help_text=_( 'Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND.' - ), quoted=True, + ), ) setting_disable_base_image_cache = namespace.add_setting( global_name='DOCUMENTS_DISABLE_BASE_IMAGE_CACHE', default=False, @@ -127,9 +141,8 @@ setting_storage_backend = namespace.add_setting( ) setting_storage_backend_arguments = namespace.add_setting( global_name='DOCUMENTS_STORAGE_BACKEND_ARGUMENTS', - default='{{location: {}}}'.format( - os.path.join(settings.MEDIA_ROOT, 'document_storage') - ), help_text=_('Arguments to pass to the DOCUMENT_STORAGE_BACKEND.') + default={'location': os.path.join(settings.MEDIA_ROOT, 'document_storage')}, + help_text=_('Arguments to pass to the DOCUMENT_STORAGE_BACKEND.') ) setting_thumbnail_height = namespace.add_setting( global_name='DOCUMENTS_THUMBNAIL_HEIGHT', default='', help_text=_( diff --git a/mayan/apps/documents/statistics.py b/mayan/apps/documents/statistics.py index 7bceb98f86..a97616f192 100644 --- a/mayan/apps/documents/statistics.py +++ b/mayan/apps/documents/statistics.py @@ -20,6 +20,10 @@ MONTH_NAMES = [ ] +def get_month_name(month_number): + return force_text(MONTH_NAMES[month_number - 1]) + + def new_documents_per_month(): Document = apps.get_model(app_label='documents', model_name='Document') @@ -31,7 +35,7 @@ def new_documents_per_month(): return { 'series': { 'Documents': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, + lambda x: {get_month_name(month_number=x[0].month): x[1]}, qss.time_series(start=start, end=now, interval='months') ) } @@ -53,7 +57,7 @@ def new_document_pages_per_month(): return { 'series': { 'Pages': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, + lambda x: {get_month_name(month_number=x[0].month): x[1]}, qss.time_series(start=start, end=now, interval='months') ) } @@ -93,7 +97,7 @@ def new_document_versions_per_month(): return { 'series': { 'Versions': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, + lambda x: {get_month_name(month_number=x[0].month): x[1]}, qss.time_series(start=start, end=now, interval='months') ) } @@ -142,9 +146,7 @@ def total_document_per_month(): result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until( + get_month_name(month_number=month): qss.until( timezone.datetime(year, next_month, 1, tzinfo=now.tzinfo) ) } @@ -181,9 +183,7 @@ def total_document_version_per_month(): result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until( + get_month_name(month_number=month): qss.until( timezone.datetime(year, next_month, 1, tzinfo=now.tzinfo) ) } @@ -220,9 +220,7 @@ def total_document_page_per_month(): result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until( + get_month_name(month_number=month): qss.until( timezone.datetime(year, next_month, 1, tzinfo=now.tzinfo) ) } diff --git a/mayan/apps/documents/storages.py b/mayan/apps/documents/storages.py index 95405e9242..a4e9132fde 100644 --- a/mayan/apps/documents/storages.py +++ b/mayan/apps/documents/storages.py @@ -1,13 +1,6 @@ from __future__ import unicode_literals -import yaml - -try: - from yaml import CSafeLoader as SafeLoader -except ImportError: - from yaml import SafeLoader - -from django.utils.module_loading import import_string +from mayan.apps.storage.utils import get_storage_subclass from .settings import ( setting_documentimagecache_storage, @@ -15,20 +8,10 @@ from .settings import ( setting_storage_backend, setting_storage_backend_arguments ) -storage_documentversion = import_string( +storage_documentversion = get_storage_subclass( dotted_path=setting_storage_backend.value -)( - **yaml.load( - stream=setting_storage_backend_arguments.value or '{}', - Loader=SafeLoader - ) -) +)(**setting_storage_backend_arguments.value) -storage_documentimagecache = import_string( +storage_documentimagecache = get_storage_subclass( dotted_path=setting_documentimagecache_storage.value -)( - **yaml.load( - stream=setting_documentimagecache_storage_arguments.value or '{}', - Loader=SafeLoader - ) -) +)(**setting_documentimagecache_storage_arguments.value) diff --git a/mayan/apps/documents/tasks.py b/mayan/apps/documents/tasks.py index 857eb38e66..34bfad3616 100644 --- a/mayan/apps/documents/tasks.py +++ b/mayan/apps/documents/tasks.py @@ -41,17 +41,6 @@ def task_check_trash_periods(): DocumentType.objects.check_trash_periods() -@app.task(ignore_result=True) -def task_clear_image_cache(): - Document = apps.get_model( - app_label='documents', model_name='Document' - ) - - logger.info('Starting document cache invalidation') - Document.objects.invalidate_cache() - logger.info('Finished document cache invalidation') - - @app.task(ignore_result=True) def task_delete_document(trashed_document_id): DeletedDocument = apps.get_model( @@ -76,14 +65,19 @@ def task_delete_stubs(): @app.task() -def task_generate_document_page_image(document_page_id, *args, **kwargs): +def task_generate_document_page_image(document_page_id, user_id=None, **kwargs): DocumentPage = apps.get_model( app_label='documents', model_name='DocumentPage' ) + User = get_user_model() - document_page = DocumentPage.objects.get(pk=document_page_id) + if user_id: + user = User.objects.get(pk=user_id) + else: + user = None - return document_page.generate_image(*args, **kwargs) + document_page = DocumentPage.passthrough.get(pk=document_page_id) + return document_page.generate_image(user=user, **kwargs) @app.task(ignore_result=True) diff --git a/mayan/apps/documents/templates/documents/document_print.html b/mayan/apps/documents/templates/documents/document_print.html index 6152bde275..b80e41b6de 100644 --- a/mayan/apps/documents/templates/documents/document_print.html +++ b/mayan/apps/documents/templates/documents/document_print.html @@ -10,7 +10,7 @@ {% for page in pages %} {% trans 'Document page image preview' %} {% endfor %} {% endblock %} diff --git a/mayan/apps/documents/templates/documents/forms/widgets/document_page_image.html b/mayan/apps/documents/templates/documents/forms/widgets/document_page_image.html index 5205c9270d..e5662e736b 100644 --- a/mayan/apps/documents/templates/documents/forms/widgets/document_page_image.html +++ b/mayan/apps/documents/templates/documents/forms/widgets/document_page_image.html @@ -7,12 +7,12 @@ - {% get_icon 'mayan.apps.documents.icons.icon_document_image_loading' %} + {% appearance_get_icon 'mayan.apps.documents.icons.icon_document_image_loading' %} {% trans 'Document image' %} diff --git a/mayan/apps/documents/templates/documents/widgets/document_thumbnail.html b/mayan/apps/documents/templates/documents/widgets/document_thumbnail.html index ac777f7433..c501cfc64e 100644 --- a/mayan/apps/documents/templates/documents/widgets/document_thumbnail.html +++ b/mayan/apps/documents/templates/documents/widgets/document_thumbnail.html @@ -7,7 +7,7 @@ {% else %} data-caption="{{ instance }} " {% endif %} - href="{% get_api_image_url instance width=size_preview_width height=size_preview_height %}" + href="{% documents_get_api_image_url instance width=size_preview_width height=size_preview_height %}" data-type="image" {% if gallery_name %}data-fancybox="{{ gallery_name }}"{% endif %} > diff --git a/mayan/apps/documents/templatetags/documents_tags.py b/mayan/apps/documents/templatetags/documents_tags.py index fffb13d67b..4bdf2432a3 100644 --- a/mayan/apps/documents/templatetags/documents_tags.py +++ b/mayan/apps/documents/templatetags/documents_tags.py @@ -6,5 +6,5 @@ register = Library() @register.simple_tag -def get_api_image_url(obj, **kwargs): +def documents_get_api_image_url(obj, **kwargs): return obj.get_api_image_url(**kwargs) diff --git a/mayan/apps/documents/tests/__init__.py b/mayan/apps/documents/tests/__init__.py index c1f93fb9de..e69de29bb2 100644 --- a/mayan/apps/documents/tests/__init__.py +++ b/mayan/apps/documents/tests/__init__.py @@ -1,3 +0,0 @@ -from .base import GenericDocumentTestCase, GenericDocumentViewTestCase # NOQA -from .literals import * # NOQA -from .mixins import * # NOQA diff --git a/mayan/apps/documents/tests/base.py b/mayan/apps/documents/tests/base.py index 54014d919d..644e6e4f42 100644 --- a/mayan/apps/documents/tests/base.py +++ b/mayan/apps/documents/tests/base.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase, GenericViewTestCase +from mayan.apps.common.tests.base import BaseTestCase, GenericViewTestCase from .mixins import DocumentTestMixin diff --git a/mayan/apps/documents/tests/literals.py b/mayan/apps/documents/tests/literals.py index 12e1b85686..defa8f7ac9 100644 --- a/mayan/apps/documents/tests/literals.py +++ b/mayan/apps/documents/tests/literals.py @@ -6,22 +6,7 @@ import os from django.conf import settings from mayan.apps.common.literals import TIME_DELTA_UNIT_DAYS - -__all__ = ( - 'TEST_COMPRESSED_DOCUMENTS_FILENAME', 'TEST_COMPRESSED_DOCUMENT_PATH', - 'TEST_DEU_DOCUMENT_FILENAME', 'TEST_DEU_DOCUMENT_PATH', - 'TEST_DOCUMENT_PATH', 'TEST_HYBRID_DOCUMENT_PATH', - 'TEST_PDF_DOCUMENT_FILENAME', 'TEST_DOCUMENT_TYPE_LABEL', - 'TEST_DOCUMENT_TYPE_2_LABEL', 'TEST_DOCUMENT_TYPE_LABEL_EDITED', - 'TEST_DOCUMENT_DESCRIPTION', 'TEST_HYBRID_DOCUMENT', - 'TEST_MULTI_PAGE_TIFF', 'TEST_MULTI_PAGE_TIFF_PATH', - 'TEST_NON_ASCII_COMPRESSED_DOCUMENT_FILENAME', - 'TEST_NON_ASCII_COMPRESSED_DOCUMENT_PATH', - 'TEST_NON_ASCII_DOCUMENT_FILENAME', 'TEST_NON_ASCII_DOCUMENT_PATH', - 'TEST_PDF_INDIRECT_ROTATE_LABEL', 'TEST_PDF_INDIRECT_ROTATE_PATH', - 'TEST_SMALL_DOCUMENT_CHECKSUM', 'TEST_SMALL_DOCUMENT_FILENAME', - 'TEST_SMALL_DOCUMENT_PATH', 'TEST_DOCUMENT_VERSION_COMMENT_EDITED', -) +from mayan.apps.converter.transformations import TransformationRotate # Filenames TEST_COMPRESSED_DOCUMENTS_FILENAME = 'compressed_documents.zip' @@ -49,6 +34,7 @@ TEST_SMALL_DOCUMENT_CHECKSUM = 'efa10e6cc21f83078aaa94d5cbe51de67b51af706143b\ afc7fd6d4c02124879a' TEST_SMALL_DOCUMENT_MIMETYPE = 'image/png' TEST_SMALL_DOCUMENT_SIZE = 17436 +TEST_TRANSFORMATION_CLASS = TransformationRotate TEST_TRANSFORMATION_NAME = 'rotate' TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180' diff --git a/mayan/apps/documents/tests/mixins.py b/mayan/apps/documents/tests/mixins.py index 27579eb129..7c314aaf17 100644 --- a/mayan/apps/documents/tests/mixins.py +++ b/mayan/apps/documents/tests/mixins.py @@ -4,6 +4,9 @@ import os from django.conf import settings +from mayan.apps.converter.classes import Layer +from mayan.apps.converter.layers import layer_saved_transformations + from ..literals import PAGE_RANGE_ALL from ..models import DocumentType @@ -12,6 +15,7 @@ from .literals import ( TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_TYPE_LABEL_EDITED, TEST_DOCUMENT_TYPE_QUICK_LABEL, TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED, TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH, + TEST_TRANSFORMATION_ARGUMENT, TEST_TRANSFORMATION_CLASS, TEST_VERSION_COMMENT ) @@ -26,6 +30,8 @@ class DocumentTestMixin(object): def setUp(self): super(DocumentTestMixin, self).setUp() + Layer.invalidate_cache() + self.test_documents = [] if self.auto_create_document_type: @@ -43,7 +49,13 @@ class DocumentTestMixin(object): self.test_document_type = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_LABEL ) - self.test_document_type = self.test_document_type + + def _calculate_test_document_path(self): + if not self.test_document_path: + self.test_document_path = os.path.join( + settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', + 'sample_documents', self.test_document_filename + ) def upload_document(self, label=None): self._calculate_test_document_path() @@ -61,13 +73,6 @@ class DocumentTestMixin(object): self.test_document_page = document.latest_version.pages.first() self.test_document_version = document.latest_version - def _calculate_test_document_path(self): - if not self.test_document_path: - self.test_document_path = os.path.join( - settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', - 'sample_documents', self.test_document_filename - ) - class DocumentTypeViewTestMixin(object): def _request_test_document_type_create_view(self): @@ -146,7 +151,28 @@ class DocumentVersionTestMixin(object): ) +class DocumentVersionViewTestMixin(object): + def _request_document_version_list_view(self): + return self.get( + viewname='documents:document_version_list', + kwargs={'pk': self.test_document.pk} + ) + + def _request_document_version_revert_view(self, document_version): + return self.post( + viewname='documents:document_version_revert', + kwargs={'pk': document_version.pk} + ) + + class DocumentViewTestMixin(object): + def _create_document_transformation(self): + layer_saved_transformations.add_transformation_to( + obj=self.test_document.pages.first(), + transformation_class=TEST_TRANSFORMATION_CLASS, + arguments=TEST_TRANSFORMATION_ARGUMENT + ) + def _request_document_properties_view(self): return self.get( viewname='documents:document_properties', @@ -230,9 +256,6 @@ class DocumentViewTestMixin(object): data={'id_list': self.test_document.pk} ) - def _request_empty_trash_view(self): - return self.post(viewname='documents:trash_can_empty') - def _request_document_print_view(self): return self.get( viewname='documents:document_print', kwargs={ @@ -241,3 +264,53 @@ class DocumentViewTestMixin(object): 'page_group': PAGE_RANGE_ALL } ) + + def _request_empty_trash_view(self): + return self.post(viewname='documents:trash_can_empty') + + +class TrashedDocumentViewTestMixin(object): + def _request_document_trash_get_view(self): + return self.get( + viewname='documents:document_trash', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_document_trash_post_view(self): + return self.post( + viewname='documents:document_trash', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_trashed_document_restore_get_view(self): + return self.get( + viewname='documents:document_restore', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_trashed_document_restore_post_view(self): + return self.post( + viewname='documents:document_restore', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_trashed_document_delete_get_view(self): + return self.get( + viewname='documents:document_delete', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_trashed_document_delete_post_view(self): + return self.post( + viewname='documents:document_delete', kwargs={ + 'pk': self.test_document.pk + } + ) + + def _request_trashed_document_list_view(self): + return self.get(viewname='documents:document_list_deleted') diff --git a/mayan/apps/documents/tests/test_api.py b/mayan/apps/documents/tests/test_api.py index a40165fac9..a7fca309af 100644 --- a/mayan/apps/documents/tests/test_api.py +++ b/mayan/apps/documents/tests/test_api.py @@ -7,7 +7,7 @@ from django.utils.encoding import force_text from django_downloadview import assert_download_response from rest_framework import status -from mayan.apps.rest_api.tests import BaseAPITestCase +from mayan.apps.rest_api.tests.base import BaseAPITestCase from ..models import Document, DocumentType from ..permissions import ( @@ -22,7 +22,7 @@ from ..permissions import ( from .literals import ( TEST_DOCUMENT_DESCRIPTION_EDITED, TEST_PDF_DOCUMENT_FILENAME, - TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL, + TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_TYPE_2_LABEL, TEST_DOCUMENT_TYPE_LABEL_EDITED, TEST_DOCUMENT_VERSION_COMMENT_EDITED, TEST_SMALL_DOCUMENT_FILENAME ) @@ -88,10 +88,9 @@ class DocumentTypeAPIViewTestCase( ) response = self._request_test_document_type_api_delete_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_type_api_delete_view_with_access(self): - self.expected_content_type = None self.test_document_type = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_LABEL ) @@ -111,7 +110,7 @@ class DocumentTypeAPIViewTestCase( ) response = self._request_test_document_type_api_patch_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_type_api_edit_via_patch_view_with_access(self): self.test_document_type = DocumentType.objects.create( @@ -134,7 +133,7 @@ class DocumentTypeAPIViewTestCase( self._create_document_type() response = self._request_test_document_type_api_put_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_type_api_edit_via_put_view_with_access(self): self.test_document_type = DocumentType.objects.create( @@ -163,11 +162,11 @@ class DocumentAPIViewTestMixin(object): ) def _request_test_document_api_upload_view(self): - with open(TEST_DOCUMENT_PATH, mode='rb') as file_descriptor: + with open(TEST_DOCUMENT_PATH, mode='rb') as file_object: return self.post( viewname='rest_api:document-list', data={ 'document_type': self.test_document_type.pk, - 'file': file_descriptor + 'file': file_object } ) @@ -185,6 +184,13 @@ class DocumentAPIViewTestMixin(object): }, data={'description': TEST_DOCUMENT_DESCRIPTION_EDITED} ) + def _request_test_document_document_type_change_api_view(self): + return self.post( + viewname='rest_api:document-type-change', kwargs={ + 'pk': self.test_document.pk + }, data={'new_document_type': self.test_document_type_2.pk} + ) + class DocumentAPIViewTestCase( DocumentAPIViewTestMixin, DocumentTestMixin, BaseAPITestCase @@ -195,7 +201,7 @@ class DocumentAPIViewTestCase( self.upload_document() response = self._request_test_document_api_download_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_api_download_view_with_access(self): self.upload_document() @@ -255,11 +261,45 @@ class DocumentAPIViewTestCase( ) self.assertEqual(document.page_count, 47) + def test_document_document_type_change_api_via_no_permission(self): + self.upload_document() + self.test_document_type_2 = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE_2_LABEL + ) + + response = self._request_test_document_document_type_change_api_view() + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + self.test_document.refresh_from_db() + self.assertEqual( + self.test_document.document_type, + self.test_document_type + ) + + def test_document_document_type_change_api_via_with_access(self): + self.upload_document() + self.grant_access( + obj=self.test_document, + permission=permission_document_properties_edit + ) + self.test_document_type_2 = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE_2_LABEL + ) + + response = self._request_test_document_document_type_change_api_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.test_document.refresh_from_db() + self.assertEqual( + self.test_document.document_type, + self.test_document_type_2 + ) + def test_document_description_api_edit_via_patch_view_no_permission(self): self.upload_document() response = self._request_test_document_description_api_edit_via_patch_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_description_api_edit_via_patch_view_with_access(self): self.upload_document() @@ -281,7 +321,7 @@ class DocumentAPIViewTestCase( self.upload_document() response = self._request_test_document_description_api_edit_via_put_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_description_api_edit_via_put_view_with_access(self): self.upload_document() @@ -607,11 +647,9 @@ class TrashedDocumentAPIViewTestCase( self.upload_document() response = self._request_test_document_api_trash_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_document_api_trash_view_with_access(self): - self.expected_content_type = None - self.upload_document() self.grant_access( obj=self.test_document, permission=permission_document_trash @@ -628,14 +666,12 @@ class TrashedDocumentAPIViewTestCase( self.test_document.delete() response = self._request_test_trashed_document_api_delete_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(Document.objects.count(), 0) self.assertEqual(Document.trash.count(), 1) def test_trashed_document_api_delete_view_with_access(self): - self.expected_content_type = None - self.upload_document() self.test_document.delete() self.grant_access( @@ -653,7 +689,7 @@ class TrashedDocumentAPIViewTestCase( self.test_document.delete() response = self._request_test_trashed_document_api_detail_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertFalse('uuid' in response.data) def test_trashed_document_api_detail_view_with_access(self): @@ -713,7 +749,7 @@ class TrashedDocumentAPIViewTestCase( self.test_document.delete() response = self._request_test_trashed_document_api_restore_view() - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(Document.trash.count(), 1) self.assertEqual(Document.objects.count(), 0) diff --git a/mayan/apps/documents/tests/test_document_page_views.py b/mayan/apps/documents/tests/test_document_page_views.py index 57752396de..f6b0b8d388 100644 --- a/mayan/apps/documents/tests/test_document_page_views.py +++ b/mayan/apps/documents/tests/test_document_page_views.py @@ -2,12 +2,153 @@ from __future__ import unicode_literals from django.utils.encoding import force_text -from ..permissions import permission_document_view +from ..permissions import ( + permission_document_edit, permission_document_view +) from .base import GenericDocumentViewTestCase -class DocumentPageViewTestCase(GenericDocumentViewTestCase): +class DocumentPageDisableViewTestMixin(object): + def _disable_test_document_page(self): + self.test_document_page.enabled = False + self.test_document_page.save() + + def _request_test_document_page_disable_view(self): + return self.post( + viewname='documents:document_page_disable', kwargs={ + 'pk': self.test_document_page.pk + } + ) + + def _request_test_document_page_enable_view(self): + return self.post( + viewname='documents:document_page_enable', kwargs={ + 'pk': self.test_document_page.pk + } + ) + + def _request_test_document_page_multiple_disable_view(self): + return self.post( + viewname='documents:document_page_multiple_disable', data={ + 'id_list': self.test_document_page.pk + } + ) + + def _request_test_document_page_multiple_enable_view(self): + return self.post( + viewname='documents:document_page_multiple_enable', data={ + 'id_list': self.test_document_page.pk + } + ) + + +class DocumentPageDisableViewTestCase( + DocumentPageDisableViewTestMixin, GenericDocumentViewTestCase +): + def test_document_page_disable_view_no_permission(self): + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_disable_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_disable_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_edit + ) + + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_disable_view() + self.assertEqual(response.status_code, 302) + + self.assertNotEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_multiple_disable_view_no_permission(self): + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_multiple_disable_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_multiple_disable_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_edit + ) + + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_multiple_disable_view() + self.assertEqual(response.status_code, 302) + + self.assertNotEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_enable_view_no_permission(self): + self._disable_test_document_page() + + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_enable_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_enable_view_with_access(self): + self._disable_test_document_page() + self.grant_access( + obj=self.test_document, permission=permission_document_edit + ) + + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_enable_view() + self.assertEqual(response.status_code, 302) + + self.assertNotEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_multiple_enable_view_no_permission(self): + self._disable_test_document_page() + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_multiple_enable_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual( + test_document_page_count, self.test_document.pages.count() + ) + + def test_document_page_multiple_enable_view_with_access(self): + self._disable_test_document_page() + self.grant_access( + obj=self.test_document, permission=permission_document_edit + ) + + test_document_page_count = self.test_document.pages.count() + + response = self._request_test_document_page_multiple_enable_view() + self.assertEqual(response.status_code, 302) + + self.assertNotEqual( + test_document_page_count, self.test_document.pages.count() + ) + + +class DocumentPageViewTestMixin(object): def _request_test_document_page_list_view(self): return self.get( viewname='documents:document_pages', kwargs={ @@ -15,6 +156,17 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase): } ) + def _request_test_document_page_view(self, document_page): + return self.get( + viewname='documents:document_page_view', kwargs={ + 'pk': document_page.pk, + } + ) + + +class DocumentPageViewTestCase( + DocumentPageViewTestMixin, GenericDocumentViewTestCase +): def test_document_page_list_view_no_permission(self): response = self._request_test_document_page_list_view() self.assertEqual(response.status_code, 404) @@ -29,13 +181,6 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase): response=response, text=self.test_document.label, status_code=200 ) - def _request_test_document_page_view(self, document_page): - return self.get( - viewname='documents:document_page_view', kwargs={ - 'pk': document_page.pk, - } - ) - def test_document_page_view_no_permissions(self): response = self._request_test_document_page_view( document_page=self.test_document.pages.first() diff --git a/mayan/apps/documents/tests/test_document_type_views.py b/mayan/apps/documents/tests/test_document_type_views.py index 6c2ca8b557..dfce05f629 100644 --- a/mayan/apps/documents/tests/test_document_type_views.py +++ b/mayan/apps/documents/tests/test_document_type_views.py @@ -203,7 +203,7 @@ class DocumentTypeQuickLabelViewsTestCase( ) -class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase): +class DocumentsQuickLabelViewTestMixin(object): def _request_document_quick_label_edit_view(self, extra_data=None): data = { 'document_type_available_filenames': self.test_document_type_filename.pk, @@ -219,6 +219,11 @@ class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericD }, data=data ) + +class DocumentsQuickLabelViewTestCase( + DocumentsQuickLabelViewTestMixin, DocumentTypeQuickLabelTestMixin, + GenericDocumentViewTestCase +): def test_document_quick_label_no_permission(self): self._create_test_quick_label() diff --git a/mayan/apps/documents/tests/test_document_version_views.py b/mayan/apps/documents/tests/test_document_version_views.py index 4f712a638b..754c123490 100644 --- a/mayan/apps/documents/tests/test_document_version_views.py +++ b/mayan/apps/documents/tests/test_document_version_views.py @@ -6,16 +6,13 @@ from ..permissions import ( from .base import GenericDocumentViewTestCase from .literals import TEST_VERSION_COMMENT -from .mixins import DocumentVersionTestMixin +from .mixins import DocumentVersionTestMixin, DocumentVersionViewTestMixin -class DocumentVersionTestCase(DocumentVersionTestMixin, GenericDocumentViewTestCase): - def _request_document_version_list_view(self): - return self.get( - viewname='documents:document_version_list', - kwargs={'pk': self.test_document.pk} - ) - +class DocumentVersionViewTestCase( + DocumentVersionTestMixin, DocumentVersionViewTestMixin, + GenericDocumentViewTestCase +): def test_document_version_list_no_permission(self): self._upload_new_version() @@ -33,12 +30,6 @@ class DocumentVersionTestCase(DocumentVersionTestMixin, GenericDocumentViewTestC response=response, text=TEST_VERSION_COMMENT, status_code=200 ) - def _request_document_version_revert_view(self, document_version): - return self.post( - viewname='documents:document_version_revert', - kwargs={'pk': document_version.pk} - ) - def test_document_version_revert_no_permission(self): first_version = self.test_document.latest_version self._upload_new_version() diff --git a/mayan/apps/documents/tests/test_document_views.py b/mayan/apps/documents/tests/test_document_views.py index 8ade3d7efd..4a0a3fed7a 100644 --- a/mayan/apps/documents/tests/test_document_views.py +++ b/mayan/apps/documents/tests/test_document_views.py @@ -1,10 +1,10 @@ from __future__ import unicode_literals -from django.contrib.contenttypes.models import ContentType from django.utils.encoding import force_text -from mayan.apps.converter.models import Transformation +from mayan.apps.converter.layers import layer_saved_transformations from mayan.apps.converter.permissions import permission_transformation_delete +from mayan.apps.converter.tests.mixins import LayerTestMixin from ..models import DeletedDocument, Document, DocumentType from ..permissions import ( @@ -16,13 +16,14 @@ from ..permissions import ( from .base import GenericDocumentViewTestCase from .literals import ( - TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_FILENAME, - TEST_TRANSFORMATION_ARGUMENT, TEST_TRANSFORMATION_NAME, + TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_FILENAME ) from .mixins import DocumentViewTestMixin -class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase): +class DocumentViewTestCase( + LayerTestMixin, DocumentViewTestMixin, GenericDocumentViewTestCase +): def test_document_view_no_permissions(self): response = self._request_document_properties_view() self.assertEqual(response.status_code, 404) @@ -301,13 +302,13 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) self.assertEqual(self.test_document.pages.count(), 0) def test_document_update_page_count_view_with_permission(self): - # TODO: Revise permission association - page_count = self.test_document.pages.count() self.test_document.pages.all().delete() self.assertEqual(self.test_document.pages.count(), 0) - self.grant_permission(permission=permission_document_tools) + self.grant_access( + obj=self.test_document, permission=permission_document_tools + ) response = self._request_document_update_page_count_view() self.assertEqual(response.status_code, 302) @@ -328,7 +329,9 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) self.test_document.pages.all().delete() self.assertEqual(self.test_document.pages.count(), 0) - self.grant_permission(permission=permission_document_tools) + self.grant_access( + obj=self.test_document, permission=permission_document_tools + ) response = self._request_document_multiple_update_page_count_view() self.assertEqual(response.status_code, 302) @@ -336,18 +339,11 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) self.assertEqual(self.test_document.pages.count(), page_count) def test_document_clear_transformations_view_no_permission(self): - document_page = self.test_document.pages.first() - content_type = ContentType.objects.get_for_model(model=document_page) - transformation = Transformation.objects.create( - content_type=content_type, object_id=document_page.pk, - name=TEST_TRANSFORMATION_NAME, - arguments=TEST_TRANSFORMATION_ARGUMENT - ) + self._create_document_transformation() - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) - ) + transformation_count = layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() self.grant_access( obj=self.test_document, permission=permission_document_view @@ -356,26 +352,23 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) response = self._request_document_clear_transformations_view() self.assertEqual(response.status_code, 404) - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) + self.assertEqual( + transformation_count, + layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() ) def test_document_clear_transformations_view_with_access(self): - document_page = self.test_document.pages.first() - content_type = ContentType.objects.get_for_model(model=document_page) - transformation = Transformation.objects.create( - content_type=content_type, object_id=document_page.pk, - name=TEST_TRANSFORMATION_NAME, - arguments=TEST_TRANSFORMATION_ARGUMENT - ) - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) - ) + self._create_document_transformation() + + transformation_count = layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() self.grant_access( - obj=self.test_document, permission=permission_transformation_delete + obj=self.test_document, + permission=permission_transformation_delete ) self.grant_access( obj=self.test_document, permission=permission_document_view @@ -385,45 +378,39 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) self.assertEqual(response.status_code, 302) self.assertEqual( - Transformation.objects.get_for_object(obj=document_page).count(), 0 + transformation_count - 1, + layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() ) def test_document_multiple_clear_transformations_view_no_permission(self): - document_page = self.test_document.pages.first() - content_type = ContentType.objects.get_for_model(model=document_page) - transformation = Transformation.objects.create( - content_type=content_type, object_id=document_page.pk, - name=TEST_TRANSFORMATION_NAME, - arguments=TEST_TRANSFORMATION_ARGUMENT - ) + self._create_document_transformation() - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) - ) + transformation_count = layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() - self.grant_permission(permission=permission_document_view) + self.grant_access( + obj=self.test_document, permission=permission_document_view + ) response = self._request_document_multiple_clear_transformations() self.assertEqual(response.status_code, 404) - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) + + self.assertEqual( + transformation_count, + layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() ) def test_document_multiple_clear_transformations_view_with_access(self): - document_page = self.test_document.pages.first() - content_type = ContentType.objects.get_for_model(model=document_page) - transformation = Transformation.objects.create( - content_type=content_type, object_id=document_page.pk, - name=TEST_TRANSFORMATION_NAME, - arguments=TEST_TRANSFORMATION_ARGUMENT - ) + self._create_document_transformation() - self.assertQuerysetEqual( - Transformation.objects.get_for_object(obj=document_page), - (repr(transformation),) - ) + transformation_count = layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() self.grant_access( obj=self.test_document, permission=permission_document_view @@ -436,7 +423,10 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) self.assertEqual(response.status_code, 302) self.assertEqual( - Transformation.objects.get_for_object(obj=document_page).count(), 0 + transformation_count - 1, + layer_saved_transformations.get_transformations_for( + obj=self.test_document.pages.first() + ).count() ) def test_trash_can_empty_view_no_permission(self): diff --git a/mayan/apps/documents/tests/test_duplicated_document_views.py b/mayan/apps/documents/tests/test_duplicated_document_views.py index 1243437f2a..0923e0dcc2 100644 --- a/mayan/apps/documents/tests/test_duplicated_document_views.py +++ b/mayan/apps/documents/tests/test_duplicated_document_views.py @@ -9,7 +9,7 @@ class DuplicatedDocumentsViewsTestMixin(object): def _request_document_duplicates_list_view(self): return self.get( viewname='documents:document_duplicates_list', - kwargs={'pk': self.test_documents[0].pk} + kwargs={'document_id': self.test_documents[0].pk} ) def _request_duplicated_document_list_view(self): @@ -26,7 +26,7 @@ class DuplicatedDocumentsViewsTestCase( self._upload_duplicate_document() response = self._request_document_duplicates_list_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_duplicates_list_with_access(self): self._upload_duplicate_document() diff --git a/mayan/apps/documents/tests/test_events.py b/mayan/apps/documents/tests/test_events.py index 7f7594356c..f2e87dd56a 100644 --- a/mayan/apps/documents/tests/test_events.py +++ b/mayan/apps/documents/tests/test_events.py @@ -3,13 +3,16 @@ from __future__ import unicode_literals from actstream.models import Action from django_downloadview import assert_download_response -from ..events import event_document_download, event_document_view +from ..events import ( + event_document_download, event_document_trashed, event_document_view +) from ..permissions import ( - permission_document_download, permission_document_view + permission_document_download, permission_document_trash, + permission_document_view ) from .base import GenericDocumentViewTestCase - +from .mixins import TrashedDocumentViewTestMixin TEST_DOCUMENT_TYPE_EDITED_LABEL = 'test document type edited label' TEST_DOCUMENT_TYPE_2_LABEL = 'test document type 2 label' @@ -17,25 +20,37 @@ TEST_TRANSFORMATION_NAME = 'rotate' TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180' -class DocumentEventsTestCase(GenericDocumentViewTestCase): +class DocumentEventsTestMixin(object): def _request_test_document_download_view(self): return self.get( 'documents:document_download', kwargs={'pk': self.test_document.pk} ) - def test_document_download_event_no_permissions(self): + def _request_test_document_preview_view(self): + return self.get( + viewname='documents:document_preview', kwargs={ + 'pk': self.test_document.pk + } + ) + + +class DocumentEventsTestCase( + DocumentEventsTestMixin, TrashedDocumentViewTestMixin, + GenericDocumentViewTestCase +): + def setUp(self): + super(DocumentEventsTestCase, self).setUp() Action.objects.all().delete() + def test_document_download_event_no_permission(self): response = self._request_test_document_download_view() self.assertEqual(response.status_code, 403) self.assertEqual(list(Action.objects.any(obj=self.test_document)), []) - def test_document_download_event_with_permissions(self): + def test_document_download_event_with_access(self): self.expected_content_types = ('image/png; charset=utf-8',) - Action.objects.all().delete() - self.grant_access( obj=self.test_document, permission=permission_document_download ) @@ -55,24 +70,13 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase): self.assertEqual(event.target, self.test_document) self.assertEqual(event.verb, event_document_download.id) - def _request_test_document_preview_view(self): - return self.get( - viewname='documents:document_preview', kwargs={ - 'pk': self.test_document.pk - } - ) - - def test_document_view_event_no_permissions(self): - Action.objects.all().delete() - + def test_document_view_event_no_permission(self): response = self._request_test_document_preview_view() self.assertEqual(response.status_code, 404) self.assertEqual(list(Action.objects.any(obj=self.test_document)), []) - def test_document_view_event_with_permissions(self): - Action.objects.all().delete() - + def test_document_view_event_with_access(self): self.grant_access( obj=self.test_document, permission=permission_document_view ) @@ -84,3 +88,22 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase): self.assertEqual(event.actor, self._test_case_user) self.assertEqual(event.target, self.test_document) self.assertEqual(event.verb, event_document_view.id) + + def test_document_trashed_view_event_no_permission(self): + response = self._request_document_trash_post_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual(list(Action.objects.any(obj=self.test_document)), []) + + def test_document_trashed_view_event_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_trash + ) + + response = self._request_document_trash_post_view() + self.assertEqual(response.status_code, 302) + + event = Action.objects.any(obj=self.test_document).first() + self.assertEqual(event.actor, self._test_case_user) + self.assertEqual(event.target, self.test_document) + self.assertEqual(event.verb, event_document_trashed.id) diff --git a/mayan/apps/documents/tests/test_favorite_document_views.py b/mayan/apps/documents/tests/test_favorite_document_views.py index ea1c9fedce..9236199d1f 100644 --- a/mayan/apps/documents/tests/test_favorite_document_views.py +++ b/mayan/apps/documents/tests/test_favorite_document_views.py @@ -6,13 +6,34 @@ from ..permissions import permission_document_view from .base import GenericDocumentViewTestCase -class FavoriteDocumentsTestCase(GenericDocumentViewTestCase): +class FavoriteDocumentsTestMixin(object): def _request_document_add_to_favorites_view(self): return self.post( viewname='documents:document_add_to_favorites', kwargs={'pk': self.test_document.pk} ) + def _document_add_to_favorites(self): + FavoriteDocument.objects.add_for_user( + document=self.test_document, user=self._test_case_user + ) + + def _request_document_list_favorites(self): + return self.get( + viewname='documents:document_list_favorites', + ) + + def _request_document_remove_from_favorites(self): + return self.post( + viewname='documents:document_remove_from_favorites', + kwargs={'pk': self.test_document.pk} + ) + + +class FavoriteDocumentsTestCase( + FavoriteDocumentsTestMixin, GenericDocumentViewTestCase +): + def test_document_add_to_favorites_view_no_permission(self): response = self._request_document_add_to_favorites_view() self.assertEqual(response.status_code, 404) @@ -26,16 +47,6 @@ class FavoriteDocumentsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 302) self.assertEqual(FavoriteDocument.objects.count(), 1) - def _document_add_to_favorites(self): - FavoriteDocument.objects.add_for_user( - document=self.test_document, user=self._test_case_user - ) - - def _request_document_list_favorites(self): - return self.get( - viewname='documents:document_list_favorites', - ) - def test_document_list_favorites_view_no_permission(self): self._document_add_to_favorites() response = self._request_document_list_favorites() @@ -53,12 +64,6 @@ class FavoriteDocumentsTestCase(GenericDocumentViewTestCase): response=response, text=self.test_document.label, status_code=200 ) - def _request_document_remove_from_favorites(self): - return self.post( - viewname='documents:document_remove_from_favorites', - kwargs={'pk': self.test_document.pk} - ) - def test_document_remove_from_favorites_view_no_permission(self): self._document_add_to_favorites() response = self._request_document_remove_from_favorites() diff --git a/mayan/apps/documents/tests/test_links.py b/mayan/apps/documents/tests/test_links.py index c5947aca14..4a3113982b 100644 --- a/mayan/apps/documents/tests/test_links.py +++ b/mayan/apps/documents/tests/test_links.py @@ -4,10 +4,10 @@ import time from django.urls import reverse -from ..links import ( - link_document_restore, link_document_version_download, - link_document_version_revert +from ..links.document_version_links import ( + link_document_version_download, link_document_version_revert ) +from ..links.trashed_document_links import link_document_restore from ..models import DeletedDocument from ..permissions import ( permission_document_download, permission_document_restore, @@ -89,7 +89,6 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase): class DeletedDocumentsLinksTestCase(GenericDocumentViewTestCase): def setUp(self): super(DeletedDocumentsLinksTestCase, self).setUp() - self.login_user() self.test_document.delete() self.test_deleted_document = DeletedDocument.objects.get( pk=self.test_document.pk diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index cc251cc754..91ce316b41 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from datetime import timedelta import time -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..literals import STUB_EXPIRATION_INTERVAL from ..models import ( diff --git a/mayan/apps/documents/tests/test_permissions.py b/mayan/apps/documents/tests/test_permissions.py index be38906523..ed5f166c6b 100644 --- a/mayan/apps/documents/tests/test_permissions.py +++ b/mayan/apps/documents/tests/test_permissions.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from mayan.apps.acls.classes import ModelPermission from mayan.apps.acls.permissions import permission_acl_edit from mayan.apps.acls.tests.mixins import ACLTestMixin -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..models import DocumentType from ..permissions import permission_document_view diff --git a/mayan/apps/documents/tests/test_search.py b/mayan/apps/documents/tests/test_search.py index 76cc6b56be..2f7e22b044 100644 --- a/mayan/apps/documents/tests/test_search.py +++ b/mayan/apps/documents/tests/test_search.py @@ -1,12 +1,12 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase -from mayan.apps.documents.permissions import permission_document_view -from mayan.apps.documents.search import document_search, document_page_search -from mayan.apps.documents.tests import DocumentTestMixin +from ..permissions import permission_document_view +from ..search import document_search, document_page_search + +from .base import GenericDocumentViewTestCase -class DocumentSearchTestCase(DocumentTestMixin, BaseTestCase): +class DocumentSearchTestMixin(object): def _perform_document_page_search(self): return document_page_search.search( query_string={'q': self.test_document.label}, user=self._test_case_user @@ -17,6 +17,10 @@ class DocumentSearchTestCase(DocumentTestMixin, BaseTestCase): query_string={'q': self.test_document.label}, user=self._test_case_user ) + +class DocumentSearchTestCase( + DocumentSearchTestMixin, GenericDocumentViewTestCase +): def test_document_page_search_no_access(self): queryset = self._perform_document_page_search() self.assertFalse(self.test_document.pages.first() in queryset) diff --git a/mayan/apps/documents/tests/test_setting_migrations.py b/mayan/apps/documents/tests/test_setting_migrations.py new file mode 100644 index 0000000000..3690689323 --- /dev/null +++ b/mayan/apps/documents/tests/test_setting_migrations.py @@ -0,0 +1,62 @@ +from __future__ import unicode_literals + +from django.conf import settings +from django.utils.encoding import force_bytes + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.common.tests.mixins import EnvironmentTestCaseMixin +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.storage.utils import NamedTemporaryFile + +from ..settings import ( + setting_documentimagecache_storage_arguments, + setting_storage_backend_arguments +) + + +class DocumentSettingMigrationTestCase(EnvironmentTestCaseMixin, BaseTestCase): + def test_documents_storage_backend_arguments_0001(self): + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS', + '"{}"'.format( + Setting.serialize_value(value=test_value) + ) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_documentimagecache_storage_arguments.value, + test_value + ) + + def test_documents_cache_storage_backend_arguments_0001(self): + test_value = {'location': 'test value'} + + with NamedTemporaryFile() as file_object: + settings.CONFIGURATION_FILEPATH = file_object.name + file_object.write( + force_bytes( + '{}: {}'.format( + 'DOCUMENTS_STORAGE_BACKEND_ARGUMENTS', + '"{}"'.format( + Setting.serialize_value(value=test_value) + ) + ) + ) + ) + file_object.seek(0) + Setting._config_file_cache = None + + self.assertEqual( + setting_storage_backend_arguments.value, + test_value + ) diff --git a/mayan/apps/documents/tests/test_statistics.py b/mayan/apps/documents/tests/test_statistics.py index 5f342b8b42..61c7463f96 100644 --- a/mayan/apps/documents/tests/test_statistics.py +++ b/mayan/apps/documents/tests/test_statistics.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..statistics import namespace diff --git a/mayan/apps/documents/tests/test_trashed_document_views.py b/mayan/apps/documents/tests/test_trashed_document_views.py index 8be806f36e..858b8f3fed 100644 --- a/mayan/apps/documents/tests/test_trashed_document_views.py +++ b/mayan/apps/documents/tests/test_trashed_document_views.py @@ -7,80 +7,12 @@ from ..permissions import ( ) from .base import GenericDocumentViewTestCase +from .mixins import TrashedDocumentViewTestMixin -class TrashedDocumentTestCase(GenericDocumentViewTestCase): - def _request_document_restore_get_view(self): - return self.get( - viewname='documents:document_restore', kwargs={ - 'pk': self.test_document.pk - } - ) - - def test_document_restore_get_view_no_permission(self): - self.test_document.delete() - self.assertEqual(Document.objects.count(), 0) - - document_count = Document.objects.count() - - response = self._request_document_restore_get_view() - self.assertEqual(response.status_code, 404) - - self.assertEqual(Document.objects.count(), document_count) - - def test_document_restore_get_view_with_access(self): - self.test_document.delete() - self.assertEqual(Document.objects.count(), 0) - - self.grant_access( - obj=self.test_document, permission=permission_document_restore - ) - - document_count = Document.objects.count() - - response = self._request_document_restore_get_view() - self.assertEqual(response.status_code, 200) - - self.assertEqual(Document.objects.count(), document_count) - - def _request_document_restore_post_view(self): - return self.post( - viewname='documents:document_restore', kwargs={ - 'pk': self.test_document.pk - } - ) - - def test_document_restore_post_view_no_permission(self): - self.test_document.delete() - self.assertEqual(Document.objects.count(), 0) - - response = self._request_document_restore_post_view() - self.assertEqual(response.status_code, 404) - - self.assertEqual(DeletedDocument.objects.count(), 1) - self.assertEqual(Document.objects.count(), 0) - - def test_document_restore_post_view_with_access(self): - self.test_document.delete() - self.assertEqual(Document.objects.count(), 0) - - self.grant_access( - obj=self.test_document, permission=permission_document_restore - ) - - response = self._request_document_restore_post_view() - self.assertEqual(response.status_code, 302) - - self.assertEqual(DeletedDocument.objects.count(), 0) - self.assertEqual(Document.objects.count(), 1) - - def _request_document_trash_get_view(self): - return self.get( - viewname='documents:document_trash', kwargs={ - 'pk': self.test_document.pk - } - ) - +class TrashedDocumentViewTestCase( + TrashedDocumentViewTestMixin, GenericDocumentViewTestCase +): def test_document_trash_get_view_no_permissions(self): document_count = Document.objects.count() @@ -101,13 +33,6 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase): self.assertEqual(Document.objects.count(), document_count) - def _request_document_trash_post_view(self): - return self.post( - viewname='documents:document_trash', kwargs={ - 'pk': self.test_document.pk - } - ) - def test_document_trash_post_view_no_permissions(self): response = self._request_document_trash_post_view() self.assertEqual(response.status_code, 404) @@ -126,28 +51,71 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase): self.assertEqual(DeletedDocument.objects.count(), 1) self.assertEqual(Document.objects.count(), 0) - def _request_document_delete_get_view(self): - return self.get( - viewname='documents:document_delete', kwargs={ - 'pk': self.test_document.pk - } + def test_trashed_document_restore_get_view_no_permission(self): + self.test_document.delete() + self.assertEqual(Document.objects.count(), 0) + + document_count = Document.objects.count() + + response = self._request_trashed_document_restore_get_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual(Document.objects.count(), document_count) + + def test_trashed_document_restore_get_view_with_access(self): + self.test_document.delete() + self.assertEqual(Document.objects.count(), 0) + + self.grant_access( + obj=self.test_document, permission=permission_document_restore ) - def test_document_delete_get_view_no_permissions(self): + document_count = Document.objects.count() + + response = self._request_trashed_document_restore_get_view() + self.assertEqual(response.status_code, 200) + + self.assertEqual(Document.objects.count(), document_count) + + def test_trashed_document_restore_post_view_no_permission(self): + self.test_document.delete() + self.assertEqual(Document.objects.count(), 0) + + response = self._request_trashed_document_restore_post_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual(DeletedDocument.objects.count(), 1) + self.assertEqual(Document.objects.count(), 0) + + def test_trashed_document_restore_post_view_with_access(self): + self.test_document.delete() + self.assertEqual(Document.objects.count(), 0) + + self.grant_access( + obj=self.test_document, permission=permission_document_restore + ) + + response = self._request_trashed_document_restore_post_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual(DeletedDocument.objects.count(), 0) + self.assertEqual(Document.objects.count(), 1) + + def test_trashed_document_delete_get_view_no_permissions(self): self.test_document.delete() self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) trashed_document_count = DeletedDocument.objects.count() - response = self._request_document_delete_get_view() + response = self._request_trashed_document_delete_get_view() self.assertEqual(response.status_code, 404) self.assertEqual( DeletedDocument.objects.count(), trashed_document_count ) - def test_document_delete_get_view_with_access(self): + def test_trashed_document_delete_get_view_with_access(self): self.test_document.delete() self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) @@ -158,32 +126,25 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase): trashed_document_count = DeletedDocument.objects.count() - response = self._request_document_delete_get_view() + response = self._request_trashed_document_delete_get_view() self.assertEqual(response.status_code, 200) self.assertEqual( DeletedDocument.objects.count(), trashed_document_count ) - def _request_document_delete_post_view(self): - return self.post( - viewname='documents:document_delete', kwargs={ - 'pk': self.test_document.pk - } - ) - - def test_document_delete_post_view_no_permissions(self): + def test_trashed_document_delete_post_view_no_permissions(self): self.test_document.delete() self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) - response = self._request_document_delete_post_view() + response = self._request_trashed_document_delete_post_view() self.assertEqual(response.status_code, 404) self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) - def test_document_delete_post_view_with_access(self): + def test_trashed_document_delete_post_view_with_access(self): self.test_document.delete() self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) @@ -192,31 +153,28 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase): obj=self.test_document, permission=permission_document_delete ) - response = self._request_document_delete_post_view() + response = self._request_trashed_document_delete_post_view() self.assertEqual(response.status_code, 302) self.assertEqual(DeletedDocument.objects.count(), 0) self.assertEqual(Document.objects.count(), 0) - def _request_document_list_deleted_view(self): - return self.get(viewname='documents:document_list_deleted') - - def test_deleted_document_list_view_no_permissions(self): + def test_trashed_document_list_view_no_permissions(self): self.test_document.delete() - response = self._request_document_list_deleted_view() + response = self._request_trashed_document_list_view() self.assertNotContains( response=response, text=self.test_document.label, status_code=200 ) - def test_deleted_document_list_view_with_access(self): + def test_trashed_document_list_view_with_access(self): self.test_document.delete() self.grant_access( obj=self.test_document, permission=permission_document_view ) - response = self._request_document_list_deleted_view() + response = self._request_trashed_document_list_view() self.assertContains( response=response, text=self.test_document.label, status_code=200 ) diff --git a/mayan/apps/documents/tests/test_utils.py b/mayan/apps/documents/tests/test_utils.py index 1484282931..b89d6819d0 100644 --- a/mayan/apps/documents/tests/test_utils.py +++ b/mayan/apps/documents/tests/test_utils.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from mayan.apps.common.tests import BaseTestCase +from mayan.apps.common.tests.base import BaseTestCase from ..utils import parse_range diff --git a/mayan/apps/documents/urls.py b/mayan/apps/documents/urls.py index 6d954eebb0..6be733e983 100644 --- a/mayan/apps/documents/urls.py +++ b/mayan/apps/documents/urls.py @@ -4,35 +4,44 @@ from django.conf.urls import url from .api_views import ( APITrashedDocumentListView, APIDeletedDocumentRestoreView, - APIDeletedDocumentView, APIDocumentDownloadView, APIDocumentView, - APIDocumentListView, APIDocumentVersionDownloadView, - APIDocumentPageImageView, APIDocumentPageView, - APIDocumentTypeDocumentListView, APIDocumentTypeListView, - APIDocumentTypeView, APIDocumentVersionsListView, - APIDocumentVersionPageListView, APIDocumentVersionView, - APIRecentDocumentListView + APIDeletedDocumentView, APIDocumentDocumentTypeChangeView, + APIDocumentDownloadView, APIDocumentView, APIDocumentListView, + APIDocumentVersionDownloadView, APIDocumentPageImageView, + APIDocumentPageView, APIDocumentTypeDocumentListView, + APIDocumentTypeListView, APIDocumentTypeView, + APIDocumentVersionsListView, APIDocumentVersionPageListView, + APIDocumentVersionView, APIRecentDocumentListView ) -from .views import ( - ClearImageCacheView, DocumentDocumentTypeEditView, DocumentDownloadFormView, - DocumentDownloadView, DocumentDuplicatesListView, DocumentEditView, - DocumentListView, DocumentPageListView, DocumentPageNavigationFirst, - DocumentPageNavigationLast, DocumentPageNavigationNext, - DocumentPageNavigationPrevious, DocumentPageRotateLeftView, - DocumentPageRotateRightView, DocumentPageView, DocumentPageViewResetView, - DocumentPageZoomInView, DocumentPageZoomOutView, DocumentPreviewView, - DocumentPrint, DocumentTransformationsClearView, - DocumentTransformationsCloneView, DocumentTypeCreateView, - DocumentTypeDeleteView, DocumentTypeDocumentListView, - DocumentTypeFilenameCreateView, DocumentTypeFilenameDeleteView, - DocumentTypeFilenameEditView, DocumentTypeFilenameListView, - DocumentTypeListView, DocumentTypeEditView, DocumentUpdatePageCountView, +from .views.document_page_views import ( + DocumentPageDisable, DocumentPageEnable, DocumentPageListView, + DocumentPageNavigationFirst, DocumentPageNavigationLast, + DocumentPageNavigationNext, DocumentPageNavigationPrevious, + DocumentPageRotateLeftView, DocumentPageRotateRightView, + DocumentPageView, DocumentPageViewResetView, DocumentPageZoomInView, + DocumentPageZoomOutView +) +from .views.document_type_views import ( + DocumentTypeCreateView, DocumentTypeDeleteView, + DocumentTypeDeletionPoliciesEditView, DocumentTypeDocumentListView, + DocumentTypeEditView, DocumentTypeFilenameCreateView, + DocumentTypeFilenameDeleteView, DocumentTypeFilenameEditView, + DocumentTypeFilenameListView, DocumentTypeListView +) +from .views.document_version_views import ( DocumentVersionDownloadFormView, DocumentVersionDownloadView, DocumentVersionListView, DocumentVersionRevertView, DocumentVersionView, - DocumentView, DuplicatedDocumentListView, - RecentAccessDocumentListView, RecentAddedDocumentListView, +) +from .views.document_views import ( + DocumentDocumentTypeEditView, DocumentDownloadFormView, + DocumentDownloadView, DocumentEditView, DocumentListView, + DocumentPreviewView, DocumentPrint, DocumentTransformationsClearView, + DocumentTransformationsCloneView, DocumentUpdatePageCountView, + DocumentView, RecentAccessDocumentListView, RecentAddedDocumentListView +) +from .views.duplicated_document_views import ( + DocumentDuplicatesListView, DuplicatedDocumentListView, ScanDuplicatedDocuments ) -from .views.document_type_views import DocumentTypeDeletionPoliciesEditView from .views.favorite_document_views import ( FavoriteAddView, FavoriteDocumentListView, FavoriteRemoveView ) @@ -43,296 +52,318 @@ from .views.trashed_document_views import ( urlpatterns_document_types = [ url( - regex=r'^type/list/$', view=DocumentTypeListView.as_view(), + regex=r'^document_types/$', view=DocumentTypeListView.as_view(), name='document_type_list' ), url( - regex=r'^type/create/$', view=DocumentTypeCreateView.as_view(), + regex=r'^document_types/create/$', view=DocumentTypeCreateView.as_view(), name='document_type_create' ), url( - regex=r'^type/(?P\d+)/edit/$', view=DocumentTypeEditView.as_view(), - name='document_type_edit' - ), - url( - regex=r'^type/(?P\d+)/delete/$', + regex=r'^document_types/(?P\d+)/delete/$', view=DocumentTypeDeleteView.as_view(), name='document_type_delete' ), url( - regex=r'^type/(?P\d+)/documents/$', + regex=r'^document_types/(?P\d+)/edit/$', view=DocumentTypeEditView.as_view(), + name='document_type_edit' + ), + url( + regex=r'^document_types/(?P\d+)/documents/$', view=DocumentTypeDocumentListView.as_view(), name='document_type_document_list' ), url( - regex=r'^type/(?P\d+)/filename/list/$', + regex=r'^document_types/(?P\d+)/filenames/$', view=DocumentTypeFilenameListView.as_view(), name='document_type_filename_list' ), url( - regex=r'^type/filename/(?P\d+)/edit/$', - view=DocumentTypeFilenameEditView.as_view(), - name='document_type_filename_edit' - ), - url( - regex=r'^type/filename/(?P\d+)/delete/$', + regex=r'^document_types/filenames/(?P\d+)/delete/$', view=DocumentTypeFilenameDeleteView.as_view(), name='document_type_filename_delete' ), url( - regex=r'^type/(?P\d+)/filename/create/$', + regex=r'^document_types/filenames/(?P\d+)/edit/$', + view=DocumentTypeFilenameEditView.as_view(), + name='document_type_filename_edit' + ), + url( + regex=r'^document_types/(?P\d+)/filenames/create/$', view=DocumentTypeFilenameCreateView.as_view(), name='document_type_filename_create' ), url( - regex=r'^type/(?P\d+)/deletion_policies/$', + regex=r'^document_types/(?P\d+)/deletion_policies/$', view=DocumentTypeDeletionPoliciesEditView.as_view(), name='document_type_policies' ), ] +urlpatterns_documents = [ + url( + regex=r'^documents/$', view=DocumentListView.as_view(), name='document_list' + ), + url( + regex=r'^documents/recent_access/$', + view=RecentAccessDocumentListView.as_view(), + name='document_list_recent_access' + ), + url( + regex=r'^documents/recent_added/$', + view=RecentAddedDocumentListView.as_view(), + name='document_list_recent_added' + ), + url( + regex=r'^documents/(?P\d+)/preview/$', view=DocumentPreviewView.as_view(), + name='document_preview' + ), + url( + regex=r'^documents/(?P\d+)/properties/$', view=DocumentView.as_view(), + name='document_properties' + ), + url( + regex=r'^documents/(?P\d+)/type/$', + view=DocumentDocumentTypeEditView.as_view(), + name='document_document_type_edit' + ), + url( + regex=r'^documents/multiple/type/$', view=DocumentDocumentTypeEditView.as_view(), + name='document_multiple_document_type_edit' + ), + url( + regex=r'^documents/(?P\d+)/edit/$', view=DocumentEditView.as_view(), + name='document_edit' + ), + url( + regex=r'^documents/(?P\d+)/print/$', view=DocumentPrint.as_view(), + name='document_print' + ), + url( + regex=r'^documents/(?P\d+)/reset_page_count/$', + view=DocumentUpdatePageCountView.as_view(), + name='document_update_page_count' + ), + url( + regex=r'^documents/multiple/reset_page_count/$', + view=DocumentUpdatePageCountView.as_view(), + name='document_multiple_update_page_count' + ), + url( + regex=r'^documents/(?P\d+)/download/form/$', + view=DocumentDownloadFormView.as_view(), name='document_download_form' + ), + url( + regex=r'^documents/(?P\d+)/download/$', view=DocumentDownloadView.as_view(), + name='document_download' + ), + url( + regex=r'^documents/multiple/download/form/$', + view=DocumentDownloadFormView.as_view(), + name='document_multiple_download_form' + ), + url( + regex=r'^documents/multiple/download/$', view=DocumentDownloadView.as_view(), + name='document_multiple_download' + ), + url( + regex=r'^documents/(?P\d+)/transformations/clear/$', + view=DocumentTransformationsClearView.as_view(), + name='document_clear_transformations' + ), + url( + regex=r'^documents/multiple/clear_transformations/$', + view=DocumentTransformationsClearView.as_view(), + name='document_multiple_clear_transformations' + ), + url( + regex=r'^documents/(?P\d+)/transformations/clone/$', + view=DocumentTransformationsCloneView.as_view(), + name='document_clone_transformations' + ), +] + +urlpatterns_document_pages = [ + url( + regex=r'^documents/(?P\d+)/pages/$', view=DocumentPageListView.as_view(), + name='document_pages' + ), + url( + regex=r'^documents/pages/(?P\d+)/$', view=DocumentPageView.as_view(), + name='document_page_view' + ), + url( + regex=r'^documents/pages/(?P\d+)/disable/$', + name='document_page_disable', view=DocumentPageDisable.as_view() + ), + url( + regex=r'^documents/pages/multiple/disable/$', name='document_page_multiple_disable', + view=DocumentPageDisable.as_view() + ), + url( + regex=r'^documents/pages/(?P\d+)/enable/$', + name='document_page_enable', view=DocumentPageEnable.as_view() + ), + url( + regex=r'^documents/pages/multiple/enable/$', name='document_page_multiple_enable', + view=DocumentPageEnable.as_view() + ), + url( + regex=r'^documents/pages/(?P\d+)/navigation/next/$', + view=DocumentPageNavigationNext.as_view(), + name='document_page_navigation_next' + ), + url( + regex=r'^documents/pages/(?P\d+)/navigation/previous/$', + view=DocumentPageNavigationPrevious.as_view(), + name='document_page_navigation_previous' + ), + url( + regex=r'^documents/pages/(?P\d+)/navigation/first/$', + view=DocumentPageNavigationFirst.as_view(), + name='document_page_navigation_first' + ), + url( + regex=r'^documents/pages/(?P\d+)/navigation/last/$', + view=DocumentPageNavigationLast.as_view(), + name='document_page_navigation_last' + ), + url( + regex=r'^documents/pages/(?P\d+)/zoom/in/$', + view=DocumentPageZoomInView.as_view(), name='document_page_zoom_in' + ), + url( + regex=r'^documents/pages/(?P\d+)/zoom/out/$', + view=DocumentPageZoomOutView.as_view(), name='document_page_zoom_out' + ), + url( + regex=r'^documents/pages/(?P\d+)/rotate/left/$', + view=DocumentPageRotateLeftView.as_view(), + name='document_page_rotate_left' + ), + url( + regex=r'^documents/pages/(?P\d+)/rotate/right/$', + view=DocumentPageRotateRightView.as_view(), + name='document_page_rotate_right' + ), + url( + regex=r'^documents/pages/(?P\d+)/reset/$', + view=DocumentPageViewResetView.as_view(), + name='document_page_view_reset' + ), +] + +urlpatterns_document_versions = [ + url( + regex=r'^documents/(?P\d+)/versions/$', + view=DocumentVersionListView.as_view(), + name='document_version_list' + ), + url( + regex=r'^documents/versions/(?P\d+)/download/form/$', + view=DocumentVersionDownloadFormView.as_view(), + name='document_version_download_form' + ), + url( + regex=r'^documents/versions/(?P\d+)/$', + view=DocumentVersionView.as_view(), name='document_version_view' + ), + url( + regex=r'^documents/versions/(?P\d+)/download/$', + view=DocumentVersionDownloadView.as_view(), + name='document_version_download' + ), + url( + regex=r'^documents/versions/(?P\d+)/revert/$', + view=DocumentVersionRevertView.as_view(), + name='document_version_revert' + ), +] + +urlpatterns_duplicated_documents = [ + url( + regex=r'^documents/duplicated/$', + view=DuplicatedDocumentListView.as_view(), + name='duplicated_document_list' + ), + url( + regex=r'^documents/(?P\d+)/duplicates/$', + view=DocumentDuplicatesListView.as_view(), + name='document_duplicates_list' + ), + url( + regex=r'^tools/documents/duplicated/scan/$', + view=ScanDuplicatedDocuments.as_view(), + name='duplicated_document_scan' + ), +] + urlpatterns_favorite_documents = [ url( - regex=r'^list/favorites/$', view=FavoriteDocumentListView.as_view(), + regex=r'^documents/favorites/$', view=FavoriteDocumentListView.as_view(), name='document_list_favorites' ), url( - regex=r'^(?P\d+)/add_to_favorites/$', + regex=r'^documents/(?P\d+)/add_to_favorites/$', view=FavoriteAddView.as_view(), name='document_add_to_favorites' ), url( - regex=r'^multiple/add_to_favorites/$', view=FavoriteAddView.as_view(), + regex=r'^documents/multiple/add_to_favorites/$', view=FavoriteAddView.as_view(), name='document_multiple_add_to_favorites' ), url( - regex=r'^(?P\d+)/remove_from_favorites/$', + regex=r'^documents/(?P\d+)/remove_from_favorites/$', view=FavoriteRemoveView.as_view(), name='document_remove_from_favorites' ), url( - regex=r'^multiple/remove_from_favorites/$', + regex=r'^documents/multiple/remove_from_favorites/$', view=FavoriteRemoveView.as_view(), name='document_multiple_remove_from_favorites' ), +] + +urlpatterns_trashed_documents = [ + url( + regex=r'^documents/(?P\d+)/trash/$', view=DocumentTrashView.as_view(), + name='document_trash' + ), + url( + regex=r'^documents/multiple/trash/$', view=DocumentTrashView.as_view(), + name='document_multiple_trash' + ), + url( + regex=r'^trashed_documents/$', view=TrashedDocumentListView.as_view(), + name='document_list_deleted' + ), + url( + regex=r'^trashed_documents/(?P\d+)/restore/$', + view=TrashedDocumentRestoreView.as_view(), name='document_restore' + ), + url( + regex=r'^trashed_documents/multiple/restore/$', view=TrashedDocumentRestoreView.as_view(), + name='document_multiple_restore' + ), + url( + regex=r'^trashed_documents/(?P\d+)/delete/$', + view=TrashedDocumentDeleteView.as_view(), name='document_delete' + ), + url( + regex=r'^trashed_documents/multiple/delete/$', + view=TrashedDocumentDeleteView.as_view(), + name='document_multiple_delete' + ), url( regex=r'^trash_can/empty/$', view=EmptyTrashCanView.as_view(), name='trash_can_empty' ), ] -urlpatterns_trashed_documents = [ - url( - regex=r'^(?P\d+)/trash/$', view=DocumentTrashView.as_view(), - name='document_trash' - ), - url( - regex=r'^multiple/trash/$', view=DocumentTrashView.as_view(), - name='document_multiple_trash' - ), - url( - regex=r'^list/deleted/$', view=TrashedDocumentListView.as_view(), - name='document_list_deleted' - ), - url( - regex=r'^(?P\d+)/restore/$', - view=TrashedDocumentRestoreView.as_view(), name='document_restore' - ), - url( - regex=r'^multiple/restore/$', view=TrashedDocumentRestoreView.as_view(), - name='document_multiple_restore' - ), - url( - regex=r'^(?P\d+)/delete/$', - view=TrashedDocumentDeleteView.as_view(), name='document_delete' - ), - url( - regex=r'^multiple/delete/$', - view=TrashedDocumentDeleteView.as_view(), - name='document_multiple_delete' - ), -] - -urlpatterns = [ - url( - regex=r'^list/$', view=DocumentListView.as_view(), name='document_list' - ), - url( - regex=r'^list/recent_access/$', - view=RecentAccessDocumentListView.as_view(), - name='document_list_recent_access' - ), - url( - regex=r'^list/recent_added/$', - view=RecentAddedDocumentListView.as_view(), - name='document_list_recent_added' - ), - url( - regex=r'^list/duplicated/$', - view=DuplicatedDocumentListView.as_view(), - name='duplicated_document_list' - ), - url( - regex=r'^(?P\d+)/preview/$', view=DocumentPreviewView.as_view(), - name='document_preview' - ), - url( - regex=r'^(?P\d+)/properties/$', view=DocumentView.as_view(), - name='document_properties' - ), - url( - regex=r'^(?P\d+)/duplicates/$', - view=DocumentDuplicatesListView.as_view(), - name='document_duplicates_list' - ), - url( - regex=r'^(?P\d+)/type/$', - view=DocumentDocumentTypeEditView.as_view(), - name='document_document_type_edit' - ), - url( - regex=r'^multiple/type/$', view=DocumentDocumentTypeEditView.as_view(), - name='document_multiple_document_type_edit' - ), - url( - regex=r'^(?P\d+)/edit/$', view=DocumentEditView.as_view(), - name='document_edit' - ), - url( - regex=r'^(?P\d+)/print/$', view=DocumentPrint.as_view(), - name='document_print' - ), - url( - regex=r'^(?P\d+)/reset_page_count/$', - view=DocumentUpdatePageCountView.as_view(), - name='document_update_page_count' - ), - url( - regex=r'^multiple/reset_page_count/$', - view=DocumentUpdatePageCountView.as_view(), - name='document_multiple_update_page_count' - ), - url( - regex=r'^(?P\d+)/download/form/$', - view=DocumentDownloadFormView.as_view(), name='document_download_form' - ), - url( - regex=r'^(?P\d+)/download/$', view=DocumentDownloadView.as_view(), - name='document_download' - ), - url( - regex=r'^multiple/download/form/$', - view=DocumentDownloadFormView.as_view(), - name='document_multiple_download_form' - ), - url( - regex=r'^multiple/download/$', view=DocumentDownloadView.as_view(), - name='document_multiple_download' - ), - url( - regex=r'^(?P\d+)/clear_transformations/$', - view=DocumentTransformationsClearView.as_view(), - name='document_clear_transformations' - ), - url( - regex=r'^(?P\d+)/clone_transformations/$', - view=DocumentTransformationsCloneView.as_view(), - name='document_clone_transformations' - ), - url( - regex=r'^(?P\d+)/version/all/$', - view=DocumentVersionListView.as_view(), - name='document_version_list' - ), - url( - regex=r'^document/version/(?P\d+)/download/form/$', - view=DocumentVersionDownloadFormView.as_view(), - name='document_version_download_form' - ), - url( - regex=r'^document/version/(?P\d+)/$', - view=DocumentVersionView.as_view(), name='document_version_view' - ), - url( - regex=r'^document/version/(?P\d+)/download/$', - view=DocumentVersionDownloadView.as_view(), - name='document_version_download' - ), - url( - regex=r'^document/version/(?P\d+)/revert/$', - view=DocumentVersionRevertView.as_view(), - name='document_version_revert' - ), - - url( - regex=r'^(?P\d+)/pages/all/$', view=DocumentPageListView.as_view(), - name='document_pages' - ), - - url( - regex=r'^multiple/clear_transformations/$', - view=DocumentTransformationsClearView.as_view(), - name='document_multiple_clear_transformations' - ), - url( - regex=r'^cache/clear/$', view=ClearImageCacheView.as_view(), - name='document_clear_image_cache' - ), - url( - regex=r'^page/(?P\d+)/$', view=DocumentPageView.as_view(), - name='document_page_view' - ), - url( - regex=r'^page/(?P\d+)/navigation/next/$', - view=DocumentPageNavigationNext.as_view(), - name='document_page_navigation_next' - ), - url( - regex=r'^page/(?P\d+)/navigation/previous/$', - view=DocumentPageNavigationPrevious.as_view(), - name='document_page_navigation_previous' - ), - url( - regex=r'^page/(?P\d+)/navigation/first/$', - view=DocumentPageNavigationFirst.as_view(), - name='document_page_navigation_first' - ), - url( - regex=r'^page/(?P\d+)/navigation/last/$', - view=DocumentPageNavigationLast.as_view(), - name='document_page_navigation_last' - ), - url( - regex=r'^page/(?P\d+)/zoom/in/$', - view=DocumentPageZoomInView.as_view(), name='document_page_zoom_in' - ), - url( - regex=r'^page/(?P\d+)/zoom/out/$', - view=DocumentPageZoomOutView.as_view(), name='document_page_zoom_out' - ), - url( - regex=r'^page/(?P\d+)/rotate/left/$', - view=DocumentPageRotateLeftView.as_view(), - name='document_page_rotate_left' - ), - url( - regex=r'^page/(?P\d+)/rotate/right/$', - view=DocumentPageRotateRightView.as_view(), - name='document_page_rotate_right' - ), - url( - regex=r'^page/(?P\d+)/reset/$', - view=DocumentPageViewResetView.as_view(), - name='document_page_view_reset' - ), - - # Tools - - url( - regex=r'^tools/documents/duplicated/scan/$', - view=ScanDuplicatedDocuments.as_view(), - name='duplicated_document_scan' - ), -] +urlpatterns = [] +urlpatterns.extend(urlpatterns_documents) +urlpatterns.extend(urlpatterns_document_pages) urlpatterns.extend(urlpatterns_document_types) +urlpatterns.extend(urlpatterns_document_versions) +urlpatterns.extend(urlpatterns_duplicated_documents) urlpatterns.extend(urlpatterns_favorite_documents) urlpatterns.extend(urlpatterns_trashed_documents) @@ -362,6 +393,11 @@ api_urls = [ regex=r'^documents/(?P[0-9]+)/download/$', view=APIDocumentDownloadView.as_view(), name='document-download' ), + url( + regex=r'^documents/(?P[0-9]+)/type/change/$', + view=APIDocumentDocumentTypeChangeView.as_view(), + name='document-type-change' + ), url( regex=r'^documents/(?P[0-9]+)/versions/$', view=APIDocumentVersionsListView.as_view(), diff --git a/mayan/apps/documents/utils.py b/mayan/apps/documents/utils.py index 21b2df2107..e9ae97a24b 100644 --- a/mayan/apps/documents/utils.py +++ b/mayan/apps/documents/utils.py @@ -2,9 +2,17 @@ from __future__ import unicode_literals import pycountry +from django.apps import apps from django.utils.translation import ugettext_lazy as _ -from .settings import setting_language_codes +from .literals import DOCUMENT_IMAGES_CACHE_NAME + + +def callback_update_cache_size(setting): + Cache = apps.get_model(app_label='file_caching', model_name='Cache') + cache = Cache.objects.get(name=DOCUMENT_IMAGES_CACHE_NAME) + cache.maximum_size = setting.value + cache.save() def get_language(language_code): @@ -19,6 +27,8 @@ def get_language(language_code): def get_language_choices(): + from .settings import setting_language_codes + return sorted( [ ( diff --git a/mayan/apps/documents/views/__init__.py b/mayan/apps/documents/views/__init__.py index 0183a3a642..e69de29bb2 100644 --- a/mayan/apps/documents/views/__init__.py +++ b/mayan/apps/documents/views/__init__.py @@ -1,7 +0,0 @@ -from .document_page_views import * # NOQA -from .document_type_views import * # NOQA -from .document_version_views import * # NOQA -from .document_views import * # NOQA -from .favorite_document_views import * # NOQA -from .misc_views import * # NOQA -from .trashed_document_views import * # NOQA diff --git a/mayan/apps/documents/views/document_page_views.py b/mayan/apps/documents/views/document_page_views.py index e3dac8c3b8..94eab65eac 100644 --- a/mayan/apps/documents/views/document_page_views.py +++ b/mayan/apps/documents/views/document_page_views.py @@ -7,10 +7,12 @@ from furl import furl from django.contrib import messages from django.urls import reverse from django.utils.encoding import force_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _, ungettext from django.views.generic import RedirectView -from mayan.apps.common.generics import SimpleView, SingleObjectListView +from mayan.apps.common.generics import ( + MultipleObjectConfirmActionView, SimpleView, SingleObjectListView +) from mayan.apps.common.mixins import ExternalObjectMixin from mayan.apps.common.settings import setting_home_view from mayan.apps.common.utils import resolve @@ -18,21 +20,22 @@ from mayan.apps.converter.literals import DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL from ..forms import DocumentPageForm from ..icons import icon_document_pages -from ..links import link_document_update_page_count +from ..links.document_version_page_links import link_document_update_page_count from ..models import Document, DocumentPage -from ..permissions import permission_document_view +from ..permissions import permission_document_edit, permission_document_view from ..settings import ( setting_rotation_step, setting_zoom_percent_step, setting_zoom_max_level, setting_zoom_min_level ) __all__ = ( - 'DocumentPageListView', 'DocumentPageNavigationFirst', - 'DocumentPageNavigationLast', 'DocumentPageNavigationNext', - 'DocumentPageNavigationPrevious', 'DocumentPageView', - 'DocumentPageViewResetView', 'DocumentPageInteractiveTransformation', - 'DocumentPageZoomInView', 'DocumentPageZoomOutView', - 'DocumentPageRotateLeftView', 'DocumentPageRotateRightView' + 'DocumentPageDisable', 'DocumentPageEnable', 'DocumentPageListView', + 'DocumentPageNavigationFirst', 'DocumentPageNavigationLast', + 'DocumentPageNavigationNext', 'DocumentPageNavigationPrevious', + 'DocumentPageView', 'DocumentPageViewResetView', + 'DocumentPageInteractiveTransformation', 'DocumentPageZoomInView', + 'DocumentPageZoomOutView', 'DocumentPageRotateLeftView', + 'DocumentPageRotateRightView' ) logger = logging.getLogger(__name__) @@ -62,7 +65,7 @@ class DocumentPageListView(ExternalObjectMixin, SingleObjectListView): } def get_source_queryset(self): - return self.external_object.pages.all() + return self.external_object.pages_all class DocumentPageNavigationBase(ExternalObjectMixin, RedirectView): @@ -128,17 +131,17 @@ class DocumentPageNavigationNext(DocumentPageNavigationBase): def get_new_kwargs(self): document_page = self.get_object() - try: - document_page = document_page.siblings.get( - page_number=document_page.page_number + 1 - ) - except DocumentPage.DoesNotExist: + new_document_page = document_page.siblings.filter( + page_number__gt=document_page.page_number + ).first() + if new_document_page: + return {'pk': new_document_page.pk} + else: messages.warning( message=_( 'There are no more pages in this document' ), request=self.request ) - finally: return {'pk': document_page.pk} @@ -146,17 +149,17 @@ class DocumentPageNavigationPrevious(DocumentPageNavigationBase): def get_new_kwargs(self): document_page = self.get_object() - try: - document_page = document_page.siblings.get( - page_number=document_page.page_number - 1 - ) - except DocumentPage.DoesNotExist: + new_document_page = document_page.siblings.filter( + page_number__lt=document_page.page_number + ).last() + if new_document_page: + return {'pk': new_document_page.pk} + else: messages.warning( message=_( 'You are already at the first page of this document' ), request=self.request ) - finally: return {'pk': document_page.pk} @@ -261,3 +264,63 @@ class DocumentPageRotateRightView(DocumentPageInteractiveTransformation): query_dict['rotation'] = ( int(query_dict['rotation']) + setting_rotation_step.value ) % 360 + + +class DocumentPageDisable(MultipleObjectConfirmActionView): + object_permission = permission_document_edit + pk_url_kwarg = 'pk' + success_message_singular = '%(count)d document page disabled.' + success_message_plural = '%(count)d document pages disabled.' + + def get_extra_context(self): + queryset = self.object_list + + result = { + 'title': ungettext( + singular='Disable the selected document page?', + plural='Disable the selected document pages?', + number=queryset.count() + ) + } + + if queryset.count() == 1: + result['object'] = queryset.first() + + return result + + def get_source_queryset(self): + return DocumentPage.passthrough.all() + + def object_action(self, form, instance): + instance.enabled = False + instance.save() + + +class DocumentPageEnable(MultipleObjectConfirmActionView): + object_permission = permission_document_edit + pk_url_kwarg = 'pk' + success_message_singular = '%(count)d document page enabled.' + success_message_plural = '%(count)d document pages enabled.' + + def get_extra_context(self): + queryset = self.object_list + + result = { + 'title': ungettext( + singular='Enable the selected document page?', + plural='Enable the selected document pages?', + number=queryset.count() + ) + } + + if queryset.count() == 1: + result['object'] = queryset.first() + + return result + + def get_source_queryset(self): + return DocumentPage.passthrough.all() + + def object_action(self, form, instance): + instance.enabled = True + instance.save() diff --git a/mayan/apps/documents/views/document_type_views.py b/mayan/apps/documents/views/document_type_views.py index 6912751507..7997b0442a 100644 --- a/mayan/apps/documents/views/document_type_views.py +++ b/mayan/apps/documents/views/document_type_views.py @@ -17,7 +17,7 @@ from ..forms import DocumentTypeFilenameForm_create from ..icons import ( icon_document_type_filename, icon_document_type_setup ) -from ..links import ( +from ..links.document_type_links import ( link_document_type_create, link_document_type_filename_create ) from ..models import DocumentType, DocumentTypeFilename diff --git a/mayan/apps/documents/views/document_views.py b/mayan/apps/documents/views/document_views.py index 4d2bf53ea6..4e69f6edf9 100644 --- a/mayan/apps/documents/views/document_views.py +++ b/mayan/apps/documents/views/document_views.py @@ -2,8 +2,10 @@ from __future__ import absolute_import, unicode_literals import logging +from django.conf import settings from django.contrib import messages from django.core.exceptions import PermissionDenied +from django.db import transaction from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.urls import reverse @@ -17,7 +19,7 @@ from mayan.apps.common.generics import ( SingleObjectDetailView, SingleObjectDownloadView, SingleObjectEditView, SingleObjectListView ) -from mayan.apps.converter.models import Transformation +from mayan.apps.converter.layers import layer_saved_transformations from mayan.apps.converter.permissions import ( permission_transformation_delete, permission_transformation_edit ) @@ -30,10 +32,10 @@ from ..forms import ( ) from ..icons import ( icon_document_list, icon_document_list_recent_access, - icon_recent_added_document_list, icon_duplicated_document_list + icon_recent_added_document_list ) from ..literals import PAGE_RANGE_RANGE, DEFAULT_ZIP_FILENAME -from ..models import Document, DuplicatedDocument, RecentDocument +from ..models import Document, RecentDocument from ..permissions import ( permission_document_download, permission_document_print, permission_document_properties_edit, permission_document_tools, @@ -46,12 +48,11 @@ from ..tasks import task_update_page_count from ..utils import parse_range __all__ = ( - 'DocumentListView', 'DocumentDocumentTypeEditView', - 'DocumentDuplicatesListView', 'DocumentEditView', 'DocumentPreviewView', - 'DocumentView', 'DocumentDownloadFormView', 'DocumentDownloadView', - 'DocumentUpdatePageCountView', 'DocumentTransformationsClearView', - 'DocumentTransformationsCloneView', 'DocumentPrint', - 'DuplicatedDocumentListView', 'RecentAccessDocumentListView', + 'DocumentListView', 'DocumentDocumentTypeEditView', 'DocumentEditView', + 'DocumentPreviewView', 'DocumentView', 'DocumentDownloadFormView', + 'DocumentDownloadView', 'DocumentUpdatePageCountView', + 'DocumentTransformationsClearView', 'DocumentTransformationsCloneView', + 'DocumentPrint', 'RecentAccessDocumentListView', 'RecentAddedDocumentListView' ) logger = logging.getLogger(__name__) @@ -253,7 +254,6 @@ class DocumentDownloadView(SingleObjectDownloadView): target=item ) else: - # TODO: Improve by adding a document version download event event_document_download.commit( actor=request.user, target=item.document @@ -320,47 +320,6 @@ class DocumentDownloadView(SingleObjectDownloadView): return item.label -class DocumentDuplicatesListView(DocumentListView): - def dispatch(self, request, *args, **kwargs): - AccessControlList.objects.check_access( - obj=self.get_document(), permissions=(permission_document_view,), - user=self.request.user - ) - - return super( - DocumentDuplicatesListView, self - ).dispatch(request, *args, **kwargs) - - def get_document(self): - return get_object_or_404(klass=Document, pk=self.kwargs['pk']) - - def get_extra_context(self): - context = super(DocumentDuplicatesListView, self).get_extra_context() - context.update( - { - 'no_results_icon': icon_duplicated_document_list, - 'no_results_text': _( - 'Only exact copies of this document will be shown in the ' - 'this list.' - ), - 'no_results_title': _( - 'There are no duplicates for this document' - ), - 'object': self.get_document(), - 'title': _('Duplicates for document: %s') % self.get_document(), - } - ) - return context - - def get_source_queryset(self): - try: - return DuplicatedDocument.objects.get( - document=self.get_document() - ).documents.all() - except DuplicatedDocument.DoesNotExist: - return Document.objects.none() - - class DocumentEditView(SingleObjectEditView): form_class = DocumentForm model = Document @@ -522,7 +481,7 @@ class DocumentTransformationsClearView(MultipleObjectConfirmActionView): def object_action(self, form, instance): try: for page in instance.pages.all(): - Transformation.objects.get_for_object(obj=page).delete() + layer_saved_transformations.get_transformations_for(obj=page).delete() except Exception as exception: messages.error( self.request, _( @@ -545,24 +504,29 @@ class DocumentTransformationsCloneView(FormView): pk=form.cleaned_data['page'].pk ) - for page in target_pages: - Transformation.objects.get_for_object(obj=page).delete() + with transaction.atomic(): + for page in target_pages: + layer_saved_transformations.get_transformations_for(obj=page).delete() - Transformation.objects.copy( - source=form.cleaned_data['page'], targets=target_pages - ) + layer_saved_transformations.copy_transformations( + source=form.cleaned_data['page'], targets=target_pages + ) except Exception as exception: - messages.error( - self.request, _( - 'Error deleting the page transformations for ' - 'document: %(document)s; %(error)s.' - ) % { - 'document': instance, 'error': exception - } - ) + if settings.DEBUG: + raise + else: + messages.error( + message=_( + 'Error cloning the page transformations for ' + 'document: %(document)s; %(error)s.' + ) % { + 'document': instance, 'error': exception + }, request=self.request + ) else: messages.success( - self.request, _('Transformations cloned successfully.') + message=_('Transformations cloned successfully.'), + request=self.request ) return super(DocumentTransformationsCloneView, self).form_valid(form=form) @@ -668,31 +632,6 @@ class DocumentPrint(FormView): return (self.template_name,) -class DuplicatedDocumentListView(DocumentListView): - def get_document_queryset(self): - return DuplicatedDocument.objects.get_duplicated_documents() - - def get_extra_context(self): - context = super(DuplicatedDocumentListView, self).get_extra_context() - context.update( - { - 'no_results_icon': icon_duplicated_document_list, - 'no_results_text': _( - 'Duplicates are documents that are composed of the exact ' - 'same file, down to the last byte. Files that have the ' - 'same text or OCR but are not identical or were saved ' - 'using a different file format will not appear as ' - 'duplicates.' - ), - 'no_results_title': _( - 'There are no duplicated documents' - ), - 'title': _('Duplicated documents') - } - ) - return context - - class RecentAccessDocumentListView(DocumentListView): def get_document_queryset(self): return RecentDocument.objects.get_for_user(user=self.request.user) diff --git a/mayan/apps/documents/views/duplicated_document_views.py b/mayan/apps/documents/views/duplicated_document_views.py new file mode 100644 index 0000000000..a7a6c3bea3 --- /dev/null +++ b/mayan/apps/documents/views/duplicated_document_views.py @@ -0,0 +1,95 @@ +from __future__ import absolute_import, unicode_literals + +import logging + +from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.common.generics import ConfirmView +from mayan.apps.common.mixins import ExternalObjectMixin + +from ..icons import icon_duplicated_document_list +from ..models import Document, DuplicatedDocument +from ..permissions import permission_document_tools, permission_document_view +from ..tasks import task_scan_duplicates_all + +from .document_views import DocumentListView + +__all__ = ( + 'DocumentDuplicatesListView', 'DuplicatedDocumentListView', + 'ScanDuplicatedDocuments' +) +logger = logging.getLogger(__name__) + + +class DocumentDuplicatesListView(ExternalObjectMixin, DocumentListView): + external_object_class = Document + external_object_permission = permission_document_view + external_object_pk_url_kwarg = 'document_id' + + def get_extra_context(self): + context = super(DocumentDuplicatesListView, self).get_extra_context() + context.update( + { + 'no_results_icon': icon_duplicated_document_list, + 'no_results_text': _( + 'Only exact copies of this document will be shown in the ' + 'this list.' + ), + 'no_results_title': _( + 'There are no duplicates for this document' + ), + 'object': self.external_object, + 'title': _( + 'Duplicates for document: %s' + ) % self.external_object, + } + ) + return context + + def get_source_queryset(self): + try: + return DuplicatedDocument.objects.get( + document=self.external_object + ).documents.all() + except DuplicatedDocument.DoesNotExist: + return Document.objects.none() + + +class DuplicatedDocumentListView(DocumentListView): + def get_document_queryset(self): + return DuplicatedDocument.objects.get_duplicated_documents() + + def get_extra_context(self): + context = super(DuplicatedDocumentListView, self).get_extra_context() + context.update( + { + 'no_results_icon': icon_duplicated_document_list, + 'no_results_text': _( + 'Duplicates are documents that are composed of the exact ' + 'same file, down to the last byte. Files that have the ' + 'same text or OCR but are not identical or were saved ' + 'using a different file format will not appear as ' + 'duplicates.' + ), + 'no_results_title': _( + 'There are no duplicated documents' + ), + 'title': _('Duplicated documents') + } + ) + return context + + +class ScanDuplicatedDocuments(ConfirmView): + extra_context = { + 'title': _('Scan for duplicated documents?') + } + view_permission = permission_document_tools + + def view_action(self): + task_scan_duplicates_all.apply_async() + messages.success( + message=_('Duplicated document scan queued successfully.'), + request=self.request + ) diff --git a/mayan/apps/documents/views/misc_views.py b/mayan/apps/documents/views/misc_views.py deleted file mode 100644 index 0f2bf4fab8..0000000000 --- a/mayan/apps/documents/views/misc_views.py +++ /dev/null @@ -1,40 +0,0 @@ -from __future__ import absolute_import, unicode_literals - -import logging - -from django.contrib import messages -from django.utils.translation import ugettext_lazy as _ - -from mayan.apps.common.generics import ConfirmView - -from ..permissions import permission_document_tools -from ..tasks import task_clear_image_cache, task_scan_duplicates_all - -__all__ = ('ClearImageCacheView', 'ScanDuplicatedDocuments') -logger = logging.getLogger(__name__) - - -class ClearImageCacheView(ConfirmView): - extra_context = { - 'title': _('Clear the document image cache?') - } - view_permission = permission_document_tools - - def view_action(self): - task_clear_image_cache.apply_async() - messages.success( - self.request, _('Document cache clearing queued successfully.') - ) - - -class ScanDuplicatedDocuments(ConfirmView): - extra_context = { - 'title': _('Scan for duplicated documents?') - } - view_permission = permission_document_tools - - def view_action(self): - task_scan_duplicates_all.apply_async() - messages.success( - self.request, _('Duplicated document scan queued successfully.') - ) diff --git a/mayan/apps/documents/views/trashed_document_views.py b/mayan/apps/documents/views/trashed_document_views.py index bf783303ed..d55e99e05e 100644 --- a/mayan/apps/documents/views/trashed_document_views.py +++ b/mayan/apps/documents/views/trashed_document_views.py @@ -56,7 +56,7 @@ class DocumentTrashView(MultipleObjectConfirmActionView): return result def object_action(self, form, instance): - instance.delete() + instance.delete(_user=self.request.user) class EmptyTrashCanView(ConfirmView): diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index b374059f9e..f4ce98ec73 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -2,10 +2,9 @@ from __future__ import unicode_literals from django.utils.encoding import force_text -from rest_framework import generics from rest_framework.exceptions import ParseError -from mayan.apps.rest_api.filters import MayanObjectPermissionsFilter +from mayan.apps.rest_api import generics from .classes import SearchModel from .mixins import SearchModelMixin @@ -16,8 +15,6 @@ class APISearchView(SearchModelMixin, generics.ListAPIView): """ get: Perform a search operation """ - filter_backends = (MayanObjectPermissionsFilter,) - def get_queryset(self): search_model = self.get_search_model() @@ -48,8 +45,6 @@ class APIAdvancedSearchView(SearchModelMixin, generics.ListAPIView): """ get: Perform an advanced search operation """ - filter_backends = (MayanObjectPermissionsFilter,) - def get_queryset(self): self.search_model = self.get_search_model() diff --git a/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.mo index 64b8822281..cea990e8f7 100644 Binary files a/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.po index 6c6ed40f52..1c07b5c3a4 100644 --- a/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/ar/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n" "MIME-Version: 1.0\n" @@ -36,16 +36,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "مصطلحات البحث" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "البحث" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -53,7 +53,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.mo index 8ac481770d..bdb3b7d9d3 100644 Binary files a/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po index a2b0c12a52..b6bc65b11d 100644 --- a/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-17 07:05+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-04 18:33+0000\n" "Last-Translator: Lyudmil Antonov \n" "Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n" "MIME-Version: 1.0\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "При отметка ще бъдат върнати само резултати, които съвпадат с всички полета. Когато не е отметнато ще бъдат показани резултати, които съвпадат поне с едно поле." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Термини на търсене" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Търсене" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Подробно търсене" @@ -54,7 +54,12 @@ msgstr "Подробно търсене" msgid "Search again" msgstr "Потърсете отново" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "Деактивира еднопосочното търсене в лентата, оставяйки само бутона за разширено търсене." + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Подробно" diff --git a/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.mo index 999363bbb6..ec23ebf352 100644 Binary files a/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.po index f38c4f7409..43c72ebab7 100644 --- a/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/bs_BA/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Atdhe Tabaku \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Kada se proveri, biće vraćeni samo rezultati koji odgovaraju svim poljima. Kada se neprovereni rezultati koji se podudaraju sa najmanje jednim poljem će biti vraćeni." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Pojmovi pretrage" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Pretraga" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Napredna pretraga" @@ -54,7 +54,12 @@ msgstr "Napredna pretraga" msgid "Search again" msgstr "Traži ponovo" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Napredni" diff --git a/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.mo index e6fd904263..77e5604ff0 100644 Binary files a/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po index 0fcd6474e3..c0470390db 100644 --- a/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-10-17 11:12+0000\n" -"Last-Translator: Michal Švábík \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Czech (http://www.transifex.com/rosarior/mayan-edms/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,16 +36,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Po zaškrtnutí budou vráceny pouze výsledky, které odpovídají všem polím. Pokud nezaškrtnete, bude vr8cen v7sledek odpovídající alespoň jednomu poli." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Hledané výrazy" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Vyhledávání" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Pokročilé vyhledávání" @@ -53,7 +53,12 @@ msgstr "Pokročilé vyhledávání" msgid "Search again" msgstr "Hledej znovu" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Pokročilý" diff --git a/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.mo index fdf0a92ad9..dc7f11dc18 100644 Binary files a/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.po index 8108de2afd..077a96cb10 100644 --- a/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/da_DK/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Danish (Denmark) (http://www.transifex.com/rosarior/mayan-edms/language/da_DK/)\n" "MIME-Version: 1.0\n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Søg" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -52,7 +52,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.mo index da619a62be..6ffb92da5e 100644 Binary files a/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.po index ffb2c2fd6c..074c996bf8 100644 --- a/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/de_DE/LC_MESSAGES/django.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-07-04 22:13+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -42,16 +42,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Wenn aktiviert, werden nur Ergebnisse angezeigt bei denen alle Felder zutreffen. Ohne diese Option werden Ergebnisse mit mindestens einem Feld angezeigt." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Suchbegriffe" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Suche" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Erweiterte Suche" @@ -59,7 +59,12 @@ msgstr "Erweiterte Suche" msgid "Search again" msgstr "Suche wiederholen" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Erweitert" diff --git a/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.mo index 5326d486eb..c64f9ac0b5 100644 Binary files a/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.po index 4a8c101003..6dccedaf6f 100644 --- a/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/el/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Hmayag Antonian \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Greek (http://www.transifex.com/rosarior/mayan-edms/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Αν επιλεχθεί, θα επιστραφούν μόνο αποτελέσματα που ταιριάζουν με όλα τα πεδία. Αν δεν επιλεχθεί, θα επιστραφούν αποτελέσματα που ταιριάζουν σε τουλάχιστον ένα πεδίο." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Όροι αναζήτησης" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Αναζήτηση" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Προχωρημένη αναζήτηση" @@ -52,7 +52,12 @@ msgstr "Προχωρημένη αναζήτηση" msgid "Search again" msgstr "Αναζήτηση πάλι" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Προχωρημένα" diff --git a/mayan/apps/dynamic_search/locale/en/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/en/LC_MESSAGES/django.po index f2a056623b..a011eb6da0 100644 --- a/mayan/apps/dynamic_search/locale/en/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -52,7 +52,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo index 5192aff72f..cf613db000 100644 Binary files a/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.po index 1680f323ca..d50cd79e10 100644 --- a/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/es/LC_MESSAGES/django.po @@ -6,13 +6,13 @@ # jmcainzos , 2014 # Lory977 , 2015 # Roberto Rosario, 2011,2013 -# Roberto Rosario, 2015,2017-2018 +# Roberto Rosario, 2015,2017-2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-11-28 15:51+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:50+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n" "MIME-Version: 1.0\n" @@ -39,16 +39,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Cuando se selecciona, sólo se devolverán los resultados que coincidan con todos los campos. Si no se selecciona los resultados que coincidan con al menos un campo se devolverá." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Términos de búsqueda" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Búsqueda" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Búsqueda avanzada" @@ -56,7 +56,12 @@ msgstr "Búsqueda avanzada" msgid "Search again" msgstr "Volver a buscar" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "Inhabilita la búsqueda de barra de término único dejando solo el botón de búsqueda avanzada." + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Avanzada" diff --git a/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.mo index d02c4e0313..0c727602b3 100644 Binary files a/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.po index 73be36a9b1..e2c8f089c4 100644 --- a/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/fa/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Mehdi Amani \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "با انتخاب این گزینه، فقط نتایجی که با همه‌ی فیلدها منطبق باشند برگردانده می‌شوند. وقتی این گزینه انتخاب نشده باشد، نتایجی که دست کم با یک فیلد منطبق باشند برگردانده می‌شوند." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "عبارات جستجو" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "جستجو" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "جستجوی پیشرفته" @@ -54,7 +54,12 @@ msgstr "جستجوی پیشرفته" msgid "Search again" msgstr "جستجوی دوباره" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "پیشرفته" diff --git a/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.mo index c6db5c6071..a18278a4db 100644 Binary files a/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.po index fc83de8c26..385d23eead 100644 --- a/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/fr/LC_MESSAGES/django.po @@ -13,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Thierry Schott \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -41,16 +41,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Lorsqu'il est coché, seuls les résultats correspondant à tous les champs seront renvoyés. Lorsqu'il ne l'est pas, les résultats correspondant à au moins un champ seront retournés." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Termes de recherche" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Recherche" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Recherche avancée" @@ -58,7 +58,12 @@ msgstr "Recherche avancée" msgid "Search again" msgstr "Rechercher à nouveau" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Avancé" diff --git a/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.mo index 99e8eb77b9..7be8e33946 100644 Binary files a/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.po index 0a0053ef31..ca1ae0a456 100644 --- a/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/hu/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n" "MIME-Version: 1.0\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "keresési feltételek" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Keresés" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Részletes keresés" @@ -54,7 +54,12 @@ msgstr "Részletes keresés" msgid "Search again" msgstr "Újra keresés" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.mo index 09b13d09e2..95122aeb4e 100644 Binary files a/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.po index 209470f7b2..10d339d21a 100644 --- a/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/id/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n" "MIME-Version: 1.0\n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -52,7 +52,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.mo index 250df2c1ae..55cab7e127 100644 Binary files a/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.po index 9747cbd67f..c49ea2de52 100644 --- a/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/it/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Marco Camplese \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -39,16 +39,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Cerca termini " -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Cerca" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Ricerca avanzata" @@ -56,7 +56,12 @@ msgstr "Ricerca avanzata" msgid "Search again" msgstr "Cerca ancora" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Avanzato" diff --git a/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.mo index 6b105ba9c2..259c4eaaeb 100644 Binary files a/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.po index c72151d282..e757b3ade0 100644 --- a/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Latvian (http://www.transifex.com/rosarior/mayan-edms/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,16 +36,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Pēc izvēles tiek atgriezti tikai rezultāti, kas atbilst visiem laukiem. Kad tiks atdoti nekontrolēti rezultāti, kas atbilst vismaz vienam laukam, tiks atgriezti." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Meklēšanas vārdi" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Meklēt" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Izvērstā meklēšana" @@ -53,7 +53,12 @@ msgstr "Izvērstā meklēšana" msgid "Search again" msgstr "Meklēt vēlreiz" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Papildus" diff --git a/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.mo index c77349c37f..760fc57048 100644 Binary files a/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.po index 0b8ebcc787..a3b3d342fa 100644 --- a/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/nl_NL/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Justin Albstbstmeijer \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -38,16 +38,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Zoektermen" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Zoek" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Geavanceerd zoeken" @@ -55,7 +55,12 @@ msgstr "Geavanceerd zoeken" msgid "Search again" msgstr "Zoek nog een keer" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Geavanceerd" diff --git a/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.mo index ae18e192f1..681184253a 100644 Binary files a/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.po index 8e52c188ab..611e2cd7f5 100644 --- a/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/pl/LC_MESSAGES/django.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Wojciech Warczakowski \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -40,16 +40,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Zaznaczone oznacza, że zostaną zwrócone wyniki jedynie w przypadku dopasowania wszystkich pól. Niezaznaczone oznacza, że zostaną zwrócone wyniki jeśli wartość z przynajmniej jednego pola zostanie dopasowane." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Słowa do wyszukania" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Szukaj" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Zaawansowane wyszukiwanie" @@ -57,7 +57,12 @@ msgstr "Zaawansowane wyszukiwanie" msgid "Search again" msgstr "Wyszukać ponownie" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Zaawansowane" diff --git a/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo index b64ab3f1b1..edc47473b7 100644 Binary files a/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po index 75821de291..318e728891 100644 --- a/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/pt/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n" "MIME-Version: 1.0\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Termos de pesquisa" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Pesquisa" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Procura Avançada" @@ -54,7 +54,12 @@ msgstr "Procura Avançada" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.mo index 7bdaded3eb..461ac1df80 100644 Binary files a/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.po index d820c255a9..2103edd2d4 100644 --- a/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/pt_BR/LC_MESSAGES/django.po @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Aline Freitas \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -39,16 +39,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Quando marcado, somente os resultados que correspondem a todos os campos serão retornados. Quando os resultados não verificados correspondentes a pelo menos um campo serão retornados." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Termos de pesquisa" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Pesquisa" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "pesquisa avançada" @@ -56,7 +56,12 @@ msgstr "pesquisa avançada" msgid "Search again" msgstr "pesquisar novamente" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Avançada" diff --git a/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.mo index 74e33c19ad..694ca324cb 100644 Binary files a/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.po index 07545160c3..1f06a72c79 100644 --- a/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/ro_RO/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 13:32+0000\n" "Last-Translator: Harald Ersch\n" "Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n" "MIME-Version: 1.0\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "Atunci când este bifată, vor fi returnate numai rezultatele care corespund tuturor câmpurilor. Atunci când rezultatele neconfirmate care corespund cel puțin un câmp vor fi returnate." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Caută termeni" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Căută" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Cautare avansată" @@ -54,7 +54,12 @@ msgstr "Cautare avansată" msgid "Search again" msgstr "Caută din nou" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "Dezactivează căutarea în bară cu un singur termen lăsând doar butonul de căutare avansată." + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Avansate" diff --git a/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo index d7e36f7d88..0d6ed5c099 100644 Binary files a/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po index db61f9daa2..131c26a888 100644 --- a/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/ru/LC_MESSAGES/django.po @@ -7,9 +7,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: lilo.panic\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Условия поиска" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Поиск" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -52,7 +52,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "Дополнительно" diff --git a/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.mo index e3e4d055ff..bd1028c64c 100644 Binary files a/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.po index 903a4d6c28..d5989d814a 100644 --- a/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/sl_SI/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n" "MIME-Version: 1.0\n" @@ -35,16 +35,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -52,7 +52,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.mo index 65aefaaf87..a6825f539a 100644 Binary files a/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.po index c0abbb7988..010c504e9d 100644 --- a/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/tr_TR/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: serhatcan77 \n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -37,16 +37,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "İşaretlendiğinde, yalnızca tüm alanlarla eşleşen sonuçlar döndürülür. İşaretlenmemiş sonuçlar en az bir alanla eşleşen olduğunda geri döndürülecektir." -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "Arama terimleri" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Arama" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "Gelişmiş Arama" @@ -54,7 +54,12 @@ msgstr "Gelişmiş Arama" msgid "Search again" msgstr "Tekrar arama" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "İleri düzey" diff --git a/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.mo index 00ad721ff3..ccdf7bc9fe 100644 Binary files a/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.po index 82f5c3fbec..04b4f0ff2b 100644 --- a/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/vi_VN/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" "Last-Translator: Roberto Rosario\n" "Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n" "MIME-Version: 1.0\n" @@ -36,16 +36,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "Tìm kiếm" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "" @@ -53,7 +53,12 @@ msgstr "" msgid "Search again" msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "" diff --git a/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.mo index 7d5e305f0b..1ea1edd4bf 100644 Binary files a/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.po b/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.po index 585a91b16e..c99555f1b0 100644 --- a/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/zh/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-11-28 11:14-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: yulin Gong <540538248@qq.com>\n" +"POT-Creation-Date: 2019-12-09 00:32-0400\n" +"PO-Revision-Date: 2019-12-03 05:23+0000\n" +"Last-Translator: Roberto Rosario\n" "Language-Team: Chinese (http://www.transifex.com/rosarior/mayan-edms/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -36,16 +36,16 @@ msgid "" "unchecked results that match at least one field will be returned." msgstr "选中后,将仅返回与所有字段匹配的结果。未选中时,将返回与至少一个字段匹配的结果。" -#: forms.py:29 templates/dynamic_search/search_box.html:21 +#: forms.py:29 templates/dynamic_search/search_box.html:39 msgid "Search terms" msgstr "搜索项" -#: links.py:8 templates/dynamic_search/search_box.html:23 views.py:59 -#: views.py:72 +#: links.py:8 settings.py:7 templates/dynamic_search/search_box.html:43 +#: views.py:59 views.py:72 msgid "Search" msgstr "搜索" -#: links.py:11 views.py:86 +#: links.py:11 templates/dynamic_search/search_box.html:45 views.py:86 msgid "Advanced search" msgstr "高级搜索" @@ -53,7 +53,12 @@ msgstr "高级搜索" msgid "Search again" msgstr "再次搜索" -#: templates/dynamic_search/search_box.html:24 +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." +msgstr "" + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "高级" diff --git a/mayan/apps/dynamic_search/settings.py b/mayan/apps/dynamic_search/settings.py new file mode 100644 index 0000000000..e929fb3b5e --- /dev/null +++ b/mayan/apps/dynamic_search/settings.py @@ -0,0 +1,15 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from mayan.apps.smart_settings.classes import Namespace + +namespace = Namespace(label=_('Search'), name='search') + +setting_disable_simple_search = namespace.add_setting( + global_name='SEARCH_DISABLE_SIMPLE_SEARCH', + default=False, help_text=_( + 'Disables the single term bar search leaving only the advanced ' + 'search button.' + ) +) diff --git a/mayan/apps/dynamic_search/templates/dynamic_search/search_box.html b/mayan/apps/dynamic_search/templates/dynamic_search/search_box.html index d9005b2224..e0da3f20f1 100644 --- a/mayan/apps/dynamic_search/templates/dynamic_search/search_box.html +++ b/mayan/apps/dynamic_search/templates/dynamic_search/search_box.html @@ -1,13 +1,25 @@ {% load i18n %} {% load search_tags %} -{% get_search_models as search_models %} +{% load smart_settings_tags %} + +{% search_get_search_models as search_models %} +{% smart_setting global_name="SEARCH_DISABLE_SIMPLE_SEARCH" as setting_disable_simple_search %} + +{% if setting_disable_simple_search %} +
    +
    + {% endif %}